Java 在GUI元素中存储对象引用

Java 在GUI元素中存储对象引用,java,swing,object,reference,Java,Swing,Object,Reference,JCheckBox(或其他GUI元素)是否有方法或字段来存储对另一个对象的引用?这样,当该复选框的“侦听器”启动时,它可以立即获取相关对象并对其执行操作。不,没有这样的事情,但可以通过多种方式实现,至少有两种: 首先,您可以将JCheckBox(MyJCheckBox)子类化,并向其中添加所需的内容: class MyJCheckBox extends JCheckBox { private Object o; public Object getObject() { return o;

JCheckBox
(或其他GUI元素)是否有方法或字段来存储对另一个对象的引用?这样,当该复选框的“侦听器”启动时,它可以立即获取相关对象并对其执行操作。

不,没有这样的事情,但可以通过多种方式实现,至少有两种:

首先,您可以将
JCheckBox
MyJCheckBox
)子类化,并向其中添加所需的内容:

class MyJCheckBox extends JCheckBox {
  private Object o;
  public Object getObject() { return o; }
  public void setObject(Object o) { this.o = o; }
  // add necessaries ctors
}

// somewhere else
MyJCheckBox j = new MyJCheckBox(...);
j.setObject(...);
j.addActionListener(new MyListener());

class MyListener implements ActionListener {
  actionPerformed(ActionEvent e) {
    MyJCheckBox jcb = (MyJCheckBox)(e.getSource());
    Object o = jcb.getObject();
  }
}
class MyAction extends AbstractAction {
  public static final String MY_KEY = "MY_KEY";
  public void actionPerformed(ActionEvent e) {
    Object o = this.getValue(MY_KEY);
  }
}

// somewhere else
JCheckBox j = new JCheckBox(...);
MyAction a = new MyAction(...);
a.putValue(MyAction.MY_KEY,some_object);
j.addAction(a);
其次,您可以使用自己的
Action
s实现来提供所需的任何机制:

class MyJCheckBox extends JCheckBox {
  private Object o;
  public Object getObject() { return o; }
  public void setObject(Object o) { this.o = o; }
  // add necessaries ctors
}

// somewhere else
MyJCheckBox j = new MyJCheckBox(...);
j.setObject(...);
j.addActionListener(new MyListener());

class MyListener implements ActionListener {
  actionPerformed(ActionEvent e) {
    MyJCheckBox jcb = (MyJCheckBox)(e.getSource());
    Object o = jcb.getObject();
  }
}
class MyAction extends AbstractAction {
  public static final String MY_KEY = "MY_KEY";
  public void actionPerformed(ActionEvent e) {
    Object o = this.getValue(MY_KEY);
  }
}

// somewhere else
JCheckBox j = new JCheckBox(...);
MyAction a = new MyAction(...);
a.putValue(MyAction.MY_KEY,some_object);
j.addAction(a);