我在eclipse RCP应用程序中遇到了SWT Combo的问题。
我会尝试用一个用例来解释我的问题,以便更好地理解。
我在Eclipse RCP View中有一个组合框,其值为“A”,“B”,“C”,“D”,旁边有一个提交按钮&它下方的SWT表。
在Combo中更改值并单击提交按钮后,记录将显示在表格中。
我们假设默认情况下选择“A”,并且在视图调用的表格中显示A的记录。
现在我从下拉列表中选择“B”,然后点击“提交”。虽然组合显示“B”,但我只看到表中“A”的记录。
只有当我从组合中再次选择“B”然后点击提交时,才会显示“B”的记录。
现在,如果我从组合中选择C,则只会显示“B”的记录。
稍后,如果我从组合中选择D,则会显示“C”的记录。
似乎只处理和显示了之前的选择,而不是当前的选择。
我在Windows XP或Windows的早期版本中没有遇到此问题。我最近转向使用Windows 7 64位操作系统,我遇到了这个问题。
这是一个已知问题吗?任何帮助将不胜感激。
答案 0 :(得分:2)
使用下拉侦听器存储所选索引。当组合列表下降时,将触发下拉监听器。此时,存储旧选项。如果在列表中选择新项,则不会再次触发侦听器。如果您稍后按下提交按钮,则始终会获得之前选择的项目索引。
要获得您想要的内容,您必须使用选择侦听器而不是下拉侦听器,并且一切正常。在下拉列表中选择项目时,将调用选择侦听器。只需将SWT.DropDown
替换为SWT.Selection
即可。
filter.addListener(SWT.Selection, new Listener() {...});
答案 1 :(得分:0)
请在下面找到示例代码
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
public class TestCombo {
private static String[] filterByText = new String[] {"A","B","C","D"};
static int index = 0;
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
Composite comp = new Composite(shell, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
GridData gridData = new GridData(SWT.FILL,SWT.FILL,true,false);
comp.setLayout(layout);
comp.setLayoutData(gridData);
final Combo filter = new Combo (comp, SWT.READ_ONLY);
filter.setItems (filterByText );
filter.setText (filterByText[0]);
filter.setVisibleItemCount( filterByText.length );
filter.addListener(SWT.DROP_DOWN, new Listener() {
@Override
public void handleEvent(Event event) {
index = filter.getSelectionIndex();
}
});
Button submit = new Button (comp, SWT.PUSH);
submit.setText ("Submit");
GridData data = new GridData();
data.widthHint = 80;
submit.setLayoutData(data);
submit.addSelectionListener (new SelectionAdapter () {
public void widgetSelected(SelectionEvent e) {
System.out.println("The index is ==> "+index);
}
});
comp.pack();
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}