JButton的text与action

在使用JButton时,通过setText()、setIcon()和setAction()设置文本、图标和事件,发现事件添加后文本和图标不再显示。通过分析源码发现,配置按钮属性的方法在设置action时被调用,导致了这一问题。提出解决方案包括不对按钮直接操作,而是对action进行操作,或者在设置action之前设置文本和图标。
今天在使用JButton的时候,想用setText()setIcon()setAction()这三个方法来设置文本,图标和事件,结果发现事件添加之后,文本和图标不显示了。查看源码发现,
 public void setAction(Action a) {
Action oldValue = getAction();
if (action==null || !action.equals(a)) {
action = a;
if (oldValue!=null) {
removeActionListener(oldValue);
oldValue.removePropertyChangeListener(actionPropertyChangeListener);
actionPropertyChangeListener = null;
}
configurePropertiesFromAction(action);
if (action!=null) {
// Don't add if it is already a listener
if (!isListener(ActionListener.class, action)) {
addActionListener(action);
}
// Reverse linkage:
actionPropertyChangeListener = createActionPropertyChangeListener(action);
action.addPropertyChangeListener(actionPropertyChangeListener);
}
firePropertyChange("action", oldValue, action);
}
}

在设置action的时候调用了configurePropertiesFromAction,而这个方法会根据action里的属性对button进行设置。在这个方法中:

 protected void configurePropertiesFromAction(Action a) {
setMnemonicFromAction(a);
setTextFromAction(a, false);
AbstractAction.setToolTipTextFromAction(this, a);
setIconFromAction(a);
setActionCommandFromAction(a);
AbstractAction.setEnabledFromAction(this, a);
if (AbstractAction.hasSelectedKey(a) &&
shouldUpdateSelectedStateFromAction()) {
setSelectedFromAction(a);
}
setDisplayedMnemonicIndexFromAction(a, false);
}

这里对快捷键,文本,备注,图标都进行了设置。
所以可以考虑修改原有代码,不直接对button进行操作,而对action进行操作,或者setAction在最前,在这个之后对文本和图标进行设置。
或可以使用actionListener代替action。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值