我在一个对话框中有两个列表,并且基于对其中一个项目的选择,我想删除第二个列表中的一个项目。问题是,我只能在按下“确定”后通过 getSelection() 访问两个列表的选定项目!按钮。调用该函数以在 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!");
}
}
最佳答案
您所做的不起作用,因为您在尚未选择任何项目的情况下请求所选项目。
您需要做的是将 Listener
添加到 SWT.Selection
的两个 List
中,并根据选择。
但是,您想要做的似乎与我发布到 this question 的答案非常相似.
<小时/>最后一点:请使用Layout
而不是直接设置小部件的边界。它在您正在开发的屏幕分辨率上可能看起来不错,但在不同的分辨率上可能看起来完全不合适......
关于java - 根据 SWT 所做的选择修改列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25044143/