今天在使用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。
分享到:
相关推荐
1. **Swing组件**:使用JFrame作为主窗口,JTextComponent(如JTextArea和JEditorPane)作为文本编辑区域,JMenuBar和JMenuItem构建菜单栏,JButton和JRadioButton创建控制按钮。 2. **文件操作**:通过`File`和`...
与JButton不同,JTextField允许用户输入和查看文本。Swing还提供了其他类似的文本组件,比如JTextArea,用于多行文本输入,JPasswordField用于安全地输入密码,以及JTextPane,它支持格式化的文本显示,这些组件都...
- `JButton(String text, Icon icon)`:创建一个带有文本和图标的按钮。 常用方法包括: - `getText()`:获取按钮的文本。 - `setText(String text)`:设置按钮的文本。 - `setActionCommand(String action...
函数描述 public CalculateButton(Action listener,String text,int key,boolean isctrl) 构造一个具有缺省事件、指定文本、指定快捷键的JButton。 public CalculateButton(Action listener,String text,int key,...
本文将详细介绍一个名为“文件分割器”的Java程序,该程序能够实现对任意格式文件的分割与合并功能。此工具旨在为用户提供一种简便的方式来处理大型文件,使其更易于传输、存储或管理。 #### 主要功能与特点 1. **...
Action action = new AbstractAction("Action Text") { public void actionPerformed(ActionEvent e) { // 执行的操作 } }; button.setAction(action); ``` 此外,`JToolBar`还支持浮动和拖放功能。当用户将鼠标...
/** the current page number text field */ JTextField pageField; /** the full screen window, or null if not in full screen mode */ FullScreenWindow fullScreen; /** the root of the outline, or null...
### 基于Java Swing的超链接标签与按钮实现 #### 概述 在Java Swing框架下,我们经常需要在用户界面中嵌入超链接功能,以提供更加丰富的交互体验。例如,在`JTable`(一种用于显示表格数据的组件)中添加超链接...
它支持文本、图标或两者的组合,并提供了如`actionCommand`、`text`和`icon`等属性来定制外观和行为。 2. **JCheckBox**:用于提供多选选项,用户可以勾选或取消勾选。JCheckBox继承自AbstractButton,具备相同的...
SwixML的核心理念是将UI设计与业务逻辑分离,使得开发者可以专注于应用程序的功能实现,而不用过多地关注界面的细节。这种方式提高了代码的可读性和可维护性,同时也方便了团队协作,因为设计师和开发者可以独立工作...
JButton button = new JButton(text); button.addActionListener(listener); constraints.gridx = x; constraints.gridy = y; constraints.gridwidth = width; constraints.gridheight = height; layout.set...
* setActionCommand(String actionCommand):设置按钮的命令标识文本 * getActionCommand():获取按钮的命令标识文本 * addActionListener(ActionListener l):设置按钮的 ActionEvent 的监听器 * ...
JButton button = new JButton("Drag Me"); JTextArea textArea = new JTextArea(); DragSource ds = new DragSource(); ds.createDefaultDragGestureRecognizer(button, DnDConstants.ACTION_COPY, new ...
JButton button = new JButton("Click me"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Button clicked!"); } }); ``` 这个例子...
9. **界面设计**:程序可能使用了Java Swing或JavaFX库来构建图形用户界面,这两个库提供了丰富的组件,如`JFrame`, `JButton`, `JTextArea`等,用于构建菜单栏、工具栏和编辑区域。 10. **事件处理**:用户与界面...
例如,可以创建一个基类`TextEditor`,然后派生出具体的`OpenAction`,`SaveAction`等子类,每个子类代表一个特定的操作。 为了实现这些功能,开发者可能使用了Swing或JavaFX这样的图形用户界面(GUI)库来构建界面...
在Java中,我们可以使用`java.util.Date`类和`java.text.SimpleDateFormat`类来处理日期和时间。但这两个类在Java 8之后已经被新的`java.time`包取代。`java.time`包提供了如`LocalTime`、`LocalDateTime`和`Instant...