betacode

Руководство Java SWT Combo

  1. SWT Combo
  2. Пример Combo
  3. Обработка событий с Combo

1. SWT Combo

Combo является распространенным элементом интерфейса. Который позволяет пользователю выбирать один из нескольких вариантов. Когда пользователь нажимает на Combo, список опций выпадает для выбора пользователя.
Примечание: Все элементы в Combo должные быть обьект вида String, если вы хотите, чтобы элементы, были вида Object используйте JFace ComboViewer, это класс, который включает Combo.
Смотрите дополнительно JFace ComboViewer:
  • Hướng dẫn sử dụng JFace ComboViewer
Styles:
Style
Описание
SWT.DROP_DOWN
Создать Combo с выпадающим списком ("drops down").
SWT.READ_ONLY
Combo включает готовые элементы, не позволяет добавить больше. Используется только для Combo с видом SWT.DROP_DOWN.
SWT.SIMPLE
Отобразить поле ввода (Input Box) и список (List).
Вы можете создать Combo из списка String:
// Create a dropdown Combo
Combo combo = new Combo(shell, SWT.DROP_DOWN);

String[] items = new String[] { "English", "Vietnamese" }; 
combo.setItems(items);
Можно также добавлять элементы в готовый Combo:
// Adds the item to the begin of the receiver's list.
combo.add("Indian",0);

// Adds the item to the end of the receiver's list.
combo.add("Indian");

2. Пример Combo

В следующем примере создается выпадающий Combo, можно ввести дополнительные значения.
ComboDemo.java
package org.o7planning.swt.combo;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
 

public class ComboDemo {

    public static void main(String[] args) {

        Display display = new Display();
        Shell shell = new Shell(display);

        RowLayout rowLayout = new RowLayout();
        rowLayout.marginLeft = 10;
        rowLayout.marginTop = 10;
        shell.setLayout(rowLayout);

        Label label = new Label(shell,SWT.NONE );
        
        label.setText("Select language:");
        
        // Create a dropdown Combo
        Combo combo = new Combo(shell, SWT.DROP_DOWN);

        String[] items = new String[] { "English", "Vietnamese" };

        combo.setItems(items);

        shell.setText("SWT Combo (o7planning.org)");
        shell.setSize(400, 200);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }
    
}
Readonly Combo:
// Create a dropdown Combo & Read only
Combo combo = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);

String[] items = new String[] { "English", "Vietnamese" };
combo.setItems(items)
Simple Combo
// Create a simple Combo
Combo combo = new Combo(shell, SWT.SIMPLE | SWT.READ_ONLY);

String[] items = new String[] { "English", "Vietnamese" };
combo.setItems(items);

3. Обработка событий с Combo

В примере ниже, Combo отображает список языков, пользователи могут вводить дополнительно новый язык и нажимает Enter, чтобы добавить язык в список.
ComboEventDemo.java
package org.o7planning.swt.combo;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class ComboEventDemo { 
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        RowLayout rowLayout = new RowLayout();
        rowLayout.marginLeft = 10;
        rowLayout.marginTop = 10;
        shell.setLayout(rowLayout);
        // Label
        Label label = new Label(shell, SWT.NONE);
        label.setText("Select language:");

        // Create a dropdown Combo
        Combo combo = new Combo(shell, SWT.DROP_DOWN);
        String[] items = new String[] { "English", "Vietnamese" };
        combo.setItems(items); 
        Label labelMessage = new Label(shell, SWT.NONE);

        // User select a item in the Combo.
        combo.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                int idx = combo.getSelectionIndex();
                String language = combo.getItem(idx);
                labelMessage.setText("Select: " + idx + " - " + language);
                labelMessage.pack();
            }
        });
        // User enter new 'language'
        // and press Enter to add new 'language' to the list.
        combo.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                // User pressed Enter.
                if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
                    String text = combo.getText();
                    if (text == null || text.length() == 0) {
                        return;
                    }
                    String[] items = combo.getItems();
                    for (String item : items) {
                        if (item.equals(text)) {
                            return;
                        }
                    }
                    combo.add(text);
                }
            }
        });
        shell.setText("SWT Combo (o7planning.org)");
        shell.setSize(400, 200);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }
}