这一直困扰着我。如果我在定义setText
之前在JButton 上定义setAction
,则文本会消失:
JButton test = new JButton();
test.setText("test"); // Before - disappears!
test.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
// do something
}
});
this.add(test);
如果在之后,则没有问题。
JButton test = new JButton();
test.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
// do something
}
});
test.setText("test"); // After - no problem!
this.add(test);
此外,如果我在JButton构造函数中设置文本,那很好! Yarghh!
为什么会这样?
答案 0 :(得分:7)
答案 1 :(得分:1)
看看
private void setTextFromAction(Action a, boolean propertyChange)
在AbstractButton中。你可以看到它根据动作调用setText()。
您似乎可以致电setHideActionText(true);
来解决问题。
答案 2 :(得分:1)
这是因为Action也有控件的名称。由于您未在Action中设置任何名称,因此将其设置为空字符串。
答案 3 :(得分:0)
1)Listeners将所有事件都放到了EDT,
2)所有事件都是waiting in EDT,输出到屏幕将在一瞬间完成
3)您必须将其拆分为Action
Listener
setText()
使用javax.swing.Timer调用Action,其中包含原始ActionListener
答案 4 :(得分:0)
如果您只想处理此事件,则不需要Action
。您可以添加ActionListener
:
JButton test = new JButton();
test.setText("test");
test.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// do something
}
});
this.add(test);
调用setAction
会覆盖预先设置的文字。