kingcean 发表于 2013-2-3 14:16:05

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 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。
页: [1]
查看完整版本: JButton的text与action