六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 23|回复: 0

JButton的text与action

[复制链接]

升级  64%

8

主题

8

主题

8

主题

童生

Rank: 1

积分
32
 楼主| 发表于 2013-2-3 14:16:05 | 显示全部楼层 |阅读模式
今天在使用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 listenerif (!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。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表