`
kingcean
  • 浏览: 23894 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

JButton的text与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。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics