我在对话框中有两个列表,并根据一个项目的选择,我想删除第二个列表中的项目。问题是,我只能通过getSelection()为BOTH列表访问所选项目,按下确定!按钮。调用函数从Ok列表的选择侦听器之前的任何位置接收所选元素。按钮,不起作用,即说没有包含要返回的选择的数组。任何人都可以告诉我如何实现这一功能?谢谢。
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
public class TwoLists {
protected Shell shell;
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
TwoLists window = new TwoLists();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
final List list = new List(shell, SWT.BORDER);
list.setBounds(10, 24, 120, 144);
list.add("Beijing");
list.add("New York");
list.add("Tahiti");
final List list_1 = new List(shell, SWT.BORDER);
list_1.setBounds(186, 24, 145, 144);
list_1.add("Beijing");
list_1.add("New York");
list_1.add("Tahiti");
/*int index= list_1.getSelectionIndex();
System.out.println(index); THROWS AN INDEX OUT OF BOUNDS
list.remove(index);*/
Button btnOk = new Button(shell, SWT.NONE);
btnOk.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String[] selectedDestination= list.getSelection();
String[] selectedOrigin= list_1.getSelection();
System.out.println(selectedOrigin[0]+" to "+selectedDestination[0]);
}
});
btnOk.setBounds(99, 227, 75, 25);
btnOk.setText("OK!");
}
}
答案 0 :(得分:1)
您正在做的事情不起作用,因为您尚未选择任何项目时请求所选项目。
您需要做的是为Listener
的{{1}}添加List
,并根据选择修改其他列表。
但是,您想要做的事情似乎与我发布到this question的答案非常相似。
最后评论:请使用SWT.Selection
而不是直接设置小部件的边界。它可能在您正在开发的屏幕分辨率上看起来不错,但在不同的分辨率上可能看起来完全不合适......