gpt4 book ai didi

Java SWT : Widgets(buttons, 标签)使用正确

转载 作者:行者123 更新时间:2023-12-01 12:42:47 25 4
gpt4 key购买 nike

这是我的第一个问题,但我真的很困惑。也许这只是我最近几天的极度疲劳,但我现在在谷歌上查找了几个小时,但找不到任何接近好的答案。

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

假设我从 eclipse+windowbuilder+swt/jface java 项目开始。然后我为按钮添加按钮和 clabel +click 监听器(SelectionListener),因此生成的代码看起来或多或少像(只有主方法,上面只有主类和导入)

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. 创建您的类的 widgets 字段。除非必要,否则不要将它们设为静态

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

    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;
    }
    });

关于Java SWT : Widgets(buttons, 标签)使用正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com