Hướng dẫn sử dụng Java SWT Combo
Công ty Vĩnh Cửu tuyển dụng lập trình viên Java

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:
  • TODO

Styles:

Style     Mô tả
SWT.DROP_DOWN Tạo một Combo với danh sách sổ xuống.
SWT.READ_ONLY Combo chỉ bao gồm các phần tử có sẵn, không cho phép nhập. Chỉ dùng cho các Combo có style SWT.DROP_DOWN.
SWT.SIMPLE    Hiển thị hộp đầu vào và một danh sách.
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- Sử 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();
   }

}