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]