【问题标题】:How To Extend Java's SWT Label?如何扩展 Java 的 SWT 标签?
【发布时间】:2014-02-22 12:27:38
【问题描述】:

我想扩展 java SWT Label 对象,发现不允许。
所以我创建了一个包含标签对象的类“MyLabel”。
它看起来像这样:

public class MyLabel {

    Label label;

    //more instance variables here...

    public MyLabel(Composite parent, int type) {
        label=new Label(parent,type);
        //more initialization here...
    }

    public void setText(String label_text) {
        label.setText(label_text);
    }

    public void setImage(Image label_image) {
        label.setImage(label_image);
    }

    public void addMouseListener(MouseListener board_listener) {
        label.addMouseListener(board_listener);
    }

    public void removeMouseListener(MouseListener board_listener) {
        label.removeMouseListener(board_listener);
    }

    //more staff here...
}

它工作了一段时间,直到我开始听事件,并意识到这一点:

public class SWTTest {

    public static void main(String[] args) {

        Display display=new Display();
        Shell shell=new Shell(display);
        shell.setLayout(new RowLayout());


        MyLabel my_label=new MyLabel(shell, SWT.SHADOW_OUT);
        my_label.setText("this is my label");

        my_label.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseUp(MouseEvent e) {
                e.getSource(); //returns the Label object instead of MyLabel object...
            }

        });

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

这可能看起来还不错,但是我有几个 MyLabel 对象,我需要根据 MyLabel 知道鼠标单击的来源。
这种情况有什么解决办法吗?

**编辑

我正在尝试创建自己的标签。更具体地说,我想要一个标签,其中包含一个附加字段 X,以及一个 getX() 和 setX(X x_var)。

**EDIT2

好的,我会更具体:
我有一个棋盘,上面有 64 个标签,按 8x8 网格排列,每个代表棋盘上的一个位置。
现在,我想要实现的是,每当点击板上 64 个位置中的一个时 - 我会知道它被点击的在哪里就 x 和 y 板而言 -坐标
所以,我想扩展标签,并为其添加位置实例变量。 (Position 是一个包含 x 和 y 字段的类)。
现在,每当单击其中一个标签时,我都可以从“mouseUp(MouseEvent e)”方法中调用“getPoint()”方法,并知道单击了板上的哪个位置。

希望现在更清楚,对于含糊不清的地方深表歉意。

【问题讨论】:

  • 你想要完成什么?可能有一种更惯用和更可靠的方法。
  • 我正在尝试创建自己的标签。更具体地说,我想要一个带有附加字段 X 的标签,以及其中的 getX() 和 setX(X x_var)。
  • 那个额外的字段是干什么用的?
  • 我编辑了主帖。
  • 好的。在这种情况下,Label 似乎是代表棋盘的错误超类;毕竟,标签的本质是它是一个不可编辑的文本字符串。我不熟悉 SWT 的内部结构,但如果这是 Swing,我会创建一个 JComponent 的子类;查看 SWT 的等效基小部件类。

标签: java user-interface swt


【解决方案1】:

您可以使用LabelsetData 方法来保存对您的类的引用。

因此,当您创建标签时,请使用:

label.setData(myLabel);

在鼠标事件中你可以使用

MyLabel myLabel = (MyLabel)((Widget)e.getSource()).getData();

【讨论】:

  • 这太棒了!我的朋友,我感激不尽!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多