java - 根据 SWT 所做的选择修改列表

标签 java eclipse user-interface swt

我在一个对话框中有两个列表,并且基于对其中一个项目的选择,我想删除第二个列表中的一个项目。问题是,我只能在按下“确定”后通过 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/

相关文章:

java - 在调试 eclipse 时更改字符串数组的值

user-interface - 让 Distraction Free 模式在 Pycharm/Intellij 中显示行号

user-interface - GUI 形状定义中 @ 符号的含义?

wpf - 我应该如何在 MVVM 中处理这种常见的 UI 场景?

eclipse - 如何根据工作空间更改eclipse窗口颜色?

java - JSF 2.0 从操作方法返回 null 不保留原始请求参数

java - 如何在 java 中再次抛出 IOException?

java - 通过流和平面图传递对象

eclipse - 无法从我的原型(prototype)创建 Maven 项目

java - Realm 查询还可以过滤嵌套在另一个 RealmObject 类中的自定义对象数据