根据选择SWT修改列表

时间:2014-07-30 18:22:01

标签: java eclipse user-interface swt

我在对话框中有两个列表,并根据一个项目的选择,我想删除第二个列表中的项目。问题是,我只能通过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!");

}
}

1 个答案:

答案 0 :(得分:1)

您正在做的事情不起作用,因为您尚未选择任何项目时请求所选项目。

您需要做的是为Listener的{​​{1}}添加List,并根据选择修改其他列表。


但是,您想要做的事情似乎与我发布到this question的答案非常相似。


最后评论:请使用SWT.Selection而不是直接设置小部件的边界。它可能在您正在开发的屏幕分辨率上看起来不错,但在不同的分辨率上可能看起来完全不合适......