`
kingcean
  • 浏览: 24145 次
  • 性别: 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。
分享到:
评论

相关推荐

    java text editor

    1. **Swing组件**:使用JFrame作为主窗口,JTextComponent(如JTextArea和JEditorPane)作为文本编辑区域,JMenuBar和JMenuItem构建菜单栏,JButton和JRadioButton创建控制按钮。 2. **文件操作**:通过`File`和`...

    Java桌面程序开发第5章-使用Swing常用组件.ppt

    与JButton不同,JTextField允许用户输入和查看文本。Swing还提供了其他类似的文本组件,比如JTextArea,用于多行文本输入,JPasswordField用于安全地输入密码,以及JTextPane,它支持格式化的文本显示,这些组件都...

    S1机试攻略之一--Swing常用组件使用

    - `JButton(String text, Icon icon)`:创建一个带有文本和图标的按钮。 常用方法包括: - `getText()`:获取按钮的文本。 - `setText(String text)`:设置按钮的文本。 - `setActionCommand(String action...

    计算器_j2se项目源码及介绍

    函数描述 public CalculateButton(Action listener,String text,int key,boolean isctrl) 构造一个具有缺省事件、指定文本、指定快捷键的JButton。 public CalculateButton(Action listener,String text,int key,...

    文件分割器

    本文将详细介绍一个名为“文件分割器”的Java程序,该程序能够实现对任意格式文件的分割与合并功能。此工具旨在为用户提供一种简便的方式来处理大型文件,使其更易于传输、存储或管理。 #### 主要功能与特点 1. **...

    java JToolBar的基础演示

    Action action = new AbstractAction("Action Text") { public void actionPerformed(ActionEvent e) { // 执行的操作 } }; button.setAction(action); ``` 此外,`JToolBar`还支持浮动和拖放功能。当用户将鼠标...

    java pdf 查看器

    /** 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的超链接标签与按钮实现 #### 概述 在Java Swing框架下,我们经常需要在用户界面中嵌入超链接功能,以提供更加丰富的交互体验。例如,在`JTable`(一种用于显示表格数据的组件)中添加超链接...

    Java语言程序设计-基础篇-中文ppt-第十七章.ppt

    它支持文本、图标或两者的组合,并提供了如`actionCommand`、`text`和`icon`等属性来定制外观和行为。 2. **JCheckBox**:用于提供多选选项,用户可以勾选或取消勾选。JCheckBox继承自AbstractButton,具备相同的...

    swixml_220

    SwixML的核心理念是将UI设计与业务逻辑分离,使得开发者可以专注于应用程序的功能实现,而不用过多地关注界面的细节。这种方式提高了代码的可读性和可维护性,同时也方便了团队协作,因为设计师和开发者可以独立工作...

    编写一个计算器java

    JButton button = new JButton(text); button.addActionListener(listener); constraints.gridx = x; constraints.gridy = y; constraints.gridwidth = width; constraints.gridheight = height; layout.set...

    JavaGUI的布局管理方式(ppt文档).ppt

    * setActionCommand(String actionCommand):设置按钮的命令标识文本 * getActionCommand():获取按钮的命令标识文本 * addActionListener(ActionListener l):设置按钮的 ActionEvent 的监听器 * ...

    java swing控件的drag和drop的实现方法

    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. **事件处理**:用户与界面...

    Java编写的记事本

    例如,可以创建一个基类`TextEditor`,然后派生出具体的`OpenAction`,`SaveAction`等子类,每个子类代表一个特定的操作。 为了实现这些功能,开发者可能使用了Swing或JavaFX这样的图形用户界面(GUI)库来构建界面...

    clock-display.rar_In Time

    在Java中,我们可以使用`java.util.Date`类和`java.text.SimpleDateFormat`类来处理日期和时间。但这两个类在Java 8之后已经被新的`java.time`包取代。`java.time`包提供了如`LocalTime`、`LocalDateTime`和`Instant...

Global site tag (gtag.js) - Google Analytics