openplanning

Hướng dẫn và ví dụ Java SWT Combo

  1. SWT Combo
  2. Ví dụ Combo
  3. Xử lý sự kiện với Combo

1. SWT Combo

Combo là một thành phần giao diện thông dụng. Nó cho phép người dùng chọn một trong nhiều lựa chọn. Khi người dùng click vào Combo, một danh sách các lựa chọn sẽ sổ xuống cho người dùng lựa chọn.
Chú ý: Tất cả các phần tử trong Combo phải là đối tượng kiểu String, nếu bạn muốn các phần tử là kiểu Object hãy sử dụng JFace ComboViewer, nó là một class bao lấy một Combo.
Xem thêm JFace ComboViewer:
  • Hướng dẫn và ví dụ JFace ComboViewer
Styles:
Style
Mô tả
SWT.DROP_DOWN
Tạo một Combo với danh sách sổ xuống ("drops down").
SWT.READ_ONLY
Combo chỉ bao gồm các phần tử có sẵn, không cho phép nhập thêm. Chỉ dùng cho các Combo có style là SWT.DROP_DOWN.
SWT.SIMPLE
Hiển thị hộp đầu vào (Input Box) và một danh sách (List).
Bạn có thể tạo Combo từ một danh sách các String:
// Tạo một Combo sổ xuống.
Combo combo = new Combo(shell, SWT.DROP_DOWN);

String[] items = new String[] { "English", "Vietnamese" };
combo.setItems(items);
Bạn cũng có thể thêm các phần tử vào Combo có sẵn:
// Thêm một phần tử (item) vào vị trí đầu tiên.
combo.add("Indian",0);

// Thêm một phần tử vào cuối danh sách của combo.
combo.add("Indian");

2. Ví dụ Combo

Ví dụ dưới đây tạo một Combo sổ xuống, có thể nhập thêm giá trị.
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:");
       
       // Tạo một Combo sổ xuống.
       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:
// Tạo một Combo sổ xuống & Read only
Combo combo = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);

String[] items = new String[] { "English", "Vietnamese" };
combo.setItems(items)
Simple Combo
// Tạo một đơn giản Combo.
Combo combo = new Combo(shell, SWT.SIMPLE | SWT.READ_ONLY);

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

3. Xử lý sự kiện với Combo

Ví dụ dưới đây, một Combo hiển thị danh sách các ngôn ngữ, người dùng có thể nhập thêm ngôn ngữ mới và nhấn Enter để thêm ngôn ngữ vào danh sách.
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
       // Tạo một Combo sổ xuống.
       Combo combo = new Combo(shell, SWT.DROP_DOWN);
       String[] items = new String[] { "English", "Vietnamese" };
       combo.setItems(items);

       Label labelMessage = new Label(shell, SWT.NONE);
       // Người dùng lựa chọn một Item trên 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();
           }
       });
       // Người dùng nhập 'ngôn ngữ' mới
       // và nhấn Enter để thêm 'ngôn ngữ' vào danh sách.
       combo.addKeyListener(new KeyAdapter() {
           @Override
           public void keyPressed(KeyEvent e) {
               // Người dùng nhấn nút 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();
   }
}