在 GUI 元素中存储对象引用
Store Object Reference in GUI Element
JCheckBox
(或其他 GUI 元素)是否有方法或字段来存储对另一个对象的引用?这样,当该复选框的 "Listener" 触发时,它可以立即获取关联的对象并对其执行某些操作。
不,没有这样的事情,但您可以通过多种方式实施,至少有两种:
首先,您可以子类化 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();
}
}
其次,您可以使用自己的 Action
s 实现来提供您需要的任何机制:
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);
JCheckBox
(或其他 GUI 元素)是否有方法或字段来存储对另一个对象的引用?这样,当该复选框的 "Listener" 触发时,它可以立即获取关联的对象并对其执行某些操作。
不,没有这样的事情,但您可以通过多种方式实施,至少有两种:
首先,您可以子类化 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();
}
}
其次,您可以使用自己的 Action
s 实现来提供您需要的任何机制:
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);