当preferredSize为非默认值时,JButton不会采取操作名称

时间:2012-04-11 22:53:14

标签: java swing netbeans action jbutton

我刚刚注意到JButton当至少满足以下两个条件时,它不会将文本更改为耦合NAME对象的Action值:

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

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

我会明确表示行动正确注册hideActionText属性为 false 。另外,我应该说我通过 Netbeans GUI设计器中的属性面板设置了这些属性。

一些谷歌搜索没有带来什么。这是正常的行为,可以解决吗?

1 个答案:

答案 0 :(得分:6)

我会说两件事:

  1. 为什么要强制JButton的preferredSize(否则它只是基于它包含的文本和图标)?
  2. 如果你想要一个来自Action NAME的文本,你为什么要设置JButton的文本?
  3. 我没有看到所述行为中的任何问题。如果未提供任何文本,则默认为Action的NAME(如果有)。否则,它将是空的。 如果你想强制使用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);
        }
    }