Combo
就是一个下拉列表,但是还可以输入,如果不想允许输入,style添加SWT.READ_ONLY。
Combo combo = new Combo(parent, SWT.NONE); combo.setItems(new String[] {"Item1", "Item2", "Item3"}); combo.select(0); int select = combo.getSelectionIndex();
ComboViewer
对Combo的封装,input可以是任何类型,通常会是一个Collection或Array,用ArrayContentProvider就可以了。其它类型input,自己实现ContentProvider。
SWT.READ_ONLY表示不可以输入。
ComboViewer comboViewer = new ComboViewer(parent, SWT.NONE); comboViewer.setContentProvider(new ArrayContentProvider()); comboViewer.setLabelProvider(new LabelProvider() { @Override public Image getImage(Object element) { return Display.getDefault().getSystemImage(SWT.ICON_INFORMATION); } @Override public String getText(Object element) { Student st = (Student) element; return String.format("%s - %s", st.getName(), st.getCountry()); } }); Liststudents = StudentFactory.create(); comboViewer.setInput(students); comboViewer.setSelection(new StructuredSelection(students.get(0))); comboViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { StructuredSelection selection = (StructuredSelection) event.getSelection(); Object firstElement = selection.getFirstElement(); if (firstElement instanceof Student) { // Do something. } } });
处理Cmobo输入
去掉SWAT.READ_ONLY,则可以在文本框中输入,对Combo可以添加和Text控件一样的各种事件。
comboViewer.getCombo().addModifyListener(new ModifyListener(){ @Override public void modifyText(ModifyEvent e) { System.out.println("Input changed."); } }); comboViewer.getCombo().addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (SWT.CR == e.keyCode) { System.out.println("Entery key is pressed."); } } }); comboViewer.getCombo().addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { System.out.println("Focus is lost."); } }); comboViewer.getCombo().addVerifyListener(new VerifyListener() { @Override public void verifyText(VerifyEvent e) { // Prevent from inputing letter "s". e.doit = !"s".equals(e.text); } });