Combo
就是一个下拉列表,但是还可以输入,如果不想允许输入,style添加SWT.READ_ONLY。
1 2 3 4 5 | 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表示不可以输入。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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()); } }); List<student> students = 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. } } }); </student> |
处理Cmobo输入
去掉SWAT.READ_ONLY,则可以在文本框中输入,对Combo可以添加和Text控件一样的各种事件。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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); } }); |