当前位置: 首页 > 知识库问答 >
问题:

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

江衡
2023-03-14

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

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

假设我从eclipse windowbuilder swt/jface java项目开始。然后我添加按钮并单击侦听器(SelectionListener),这样生成的代码看起来或多或少像(只有main方法,上面只有Main类和导入)

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(“三”)根据我所知道和使用的,有时我只是预先声明所有东西,作为静态小部件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个答案

元嘉木
2023-03-14

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

>

private Label l;
private Button b;
public static void main(String[] args)
{
    ...
    b.addListener(...);

首先定义所有小部件(如果要在监听器中使用它们,必须是最终的),然后添加监听器。

final Label l = ...;
final Button b = ....;
b.addListener(...);

如果要在侦听器中更改小部件本身,可以使用事件小部件获取事件源。

b.addListener(SWT.Selection, new Listener()
{
    public void handleEvent(Event e)
    {
        Button button = (Button) e.widget;
    }
});
 类似资料:
  • 我有jframe与2 jboard。我有一些组件在第一个jboard和第二个按钮。当我在第一个面板上点击jbuton(调用方法删除所有)它删除所有组件(我调用方法重新验证(),重新绘制())在该jboard然后我显示第二个面板与组件。长话短说,我删除第一个jboard显示第二个,第二个显示第一个jframe,...在jboard之间切换工作正常,当我切换回第一个jboard光标时,按钮指针类型不显

  • 我以前也问过类似的问题,但在解析网页时仍然会遇到错误。场景是系统导航到https://shop.sprouts.com/shop/flyer并希望提取与每个类别相关的每个特价商品。目前,当一个类别被点击时,我会在右边看到一个空白屏幕。我尝试了以下两种方法,但得到了相同的结果。 这是时间问题吗?我做错了什么?

  • 我在为按钮找到正确的Xpath语法时遇到了一些困难。页面上有2个添加按钮。报告下面有一个添加按钮。项目下面有一个添加按钮。我想找到一个下面的项目,但我正在找到一个下面的报告。 我尝试了以下Xpaths,这些Xpaths在span类报告下面找到了add按钮: 我可以使用什么Xpath来定位Add...哪一个是在span类项目下面?谢了。

  • 问题内容: 如何使文件选择器的按钮文本国际化?例如,此代码向用户呈现的内容: 问题答案: 它通常由浏览器提供并且很难更改,因此解决该问题的唯一方法是CSS / JavaScript hack,

  • 我目前正在克隆一个站点,在“输入电子邮件”输入中,文本不会对齐,并粘在输入的底部,我更希望它在中间的左边。我该怎么解决这个?感谢任何帮助<3 null null

  • 我最初的目标是能够在侧边栏中按标题排序显示Woocommerce产品。目前,此小部件中唯一的排序选项是日期、价格、随机和销售。 我能够在wc类小部件产品的两个部分中添加标题排序选项。php: 在这里: 此自定义工作正常,但: 我的问题:我应该在哪里保存这个定制的“”文件,以防止它在下一次更新时被覆盖<或者。。。有没有更优雅的方法来实现这一点?非常感谢。