Java SWT:正确使用的小部件(按钮,标签)

时间:2014-07-24 21:24:37

标签: java user-interface swt

这是我的第一个问题,但我真的被卡住了。也许这只是我过去几天的极度疲劳,但我现在看了几个小时谷歌并且找不到好的答案。

我知道SWT是事件驱动的,就像我能想到的所有GUI一样,在创建小部件时我应该记住,他们需要能够达到他们应该修改/交互的那些。但我需要知道的是,如果我的想法是正确的,如果不是,我应该改进什么。

让我们说我从eclipse + windowbuilder + swt / jface java项目开始。然后我为按钮(SelectionListener)添加了button和clabel + click listener,所以生成的代码看起来或多或少(只有main方法,上面只有Main类和import)

public static void main(String[] args) {
    Display display = Display.getDefault();
    Shell shell = new Shell();
    shell.setSize(450, 300);
    shell.setText("SWT Application");

    Button btnNewButton = new Button(shell, SWT.NONE);
    btnNewButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
        }
    });
    btnNewButton.setBounds(51, 31, 75, 25);
    btnNewButton.setText("New Button");

    CLabel lblOneTwo = new CLabel(shell, SWT.NONE);
    lblOneTwo.setBounds(180, 119, 61, 21);
    lblOneTwo.setText("one two");

    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

据我所知,对大多数人来说,这可能是显而易见的,我只能去添加

btnNewButton.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
    }
});

代码如lblOneTwo.setText("three")以及我所知道和使用的有时我只是事先声明所有内容,如static widget widgetName然后我可以从基本上到处都访问它们,所以像

这样的代码
static Button btnNewButton;
static CLabel lblOneTwo;

public static void main(String[] args) {
    Display display = Display.getDefault();
    Shell shell = new Shell();
    shell.setSize(450, 300);
    shell.setText("SWT Application");

    btnNewButton = new Button(shell, SWT.NONE);
    btnNewButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            lblOneTwo.setText("three");
        }
    });
    (...)

工作得很好。但我想并认为这不是最好的做法和做法,不是吗?所以,请帮助我,指出正确的方向,这样我就可以停止犯罪了。提前致谢!带有文章/教程链接的间接答案会很棒,但我喜欢人们放在这里的例子,因为他们有清晰的展示方式。

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。

  1. 制作班级的小部件字段。除非必要,否则不要让他们static

    private Label l;
    private Button b;
    public static void main(String[] args)
    {
        ...
        b.addListener(...);
    
  2. 首先定义所有小部件(如果要在final中使用它们,必须为Listener),然后再添加Listener

    final Label l = ...;
    final Button b = ....;
    b.addListener(...);
    
  3. 如果您想在Listener中更改小部件本身,可以使用Event#widget来获取活动的来源。

    b.addListener(SWT.Selection, new Listener()
    {
        public void handleEvent(Event e)
        {
            Button button = (Button) e.widget;
        }
    });