1

我刚刚注意到,当至少以下两件事为真时,aJButton不会将其文本更改NAME为耦合对象的值:Action

  • 按钮的preferredSize属性不是默认值。
  • 按钮的text属性不是默认的“”(空)。

可能还有其他属性值组合使按钮忽略操作的名称,但是当我将其中一个或另一个设置为默认值时,它可以工作。

我将明确说明该操作已正确注册,并且该hideActionText属性为false。另外,我应该说我是通过Netbeans GUI 设计器中的属性面板设置这些属性的。

一些谷歌搜索没有带来任何结果。这是正常行为吗?可以解决吗?

4

1 回答 1

6

我想说两件事:

  1. 为什么要强制 JButton 的 preferredSize (否则它只是基于它包含的文本和图标)?
  2. 如果您想要来自动作名称的文本,为什么要设置 JButton 的文本?

我在所描述的行为中没有看到任何问题。如果未提供文本,则默认为操作的名称(如果有)。否则,它将是空的。如果您想强制使用preferredSize,就这样吧,在某些情况下,您有权这样做。

如果您希望出现动作名称,只需不要在 JButton 上设置另一个“文本”值。

编辑


如果我设置了文本而不是preferredSize,我仍然会看到按钮文本(即使文本太小太适合,你的文本上会出现“...”)。在此 SSCCE 上自行测试:

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.io.IOException;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Main {

    public static void main(String[] args) throws IOException {
        JFrame frame = new JFrame();
        frame.setTitle("frame");
        final JButton button = new JButton(new AbstractAction("Action text") {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.err.println("Hello");
            }
        });
        button.setText("Button text which is a lot longer");
        button.setPreferredSize(new Dimension(100, 30));
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    }
}
于 2012-04-11T23:27:08.537 回答