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

Mar*_*oDS 1 java swing netbeans action jbutton

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

  • 按钮的preferredSize属性不是默认值.
  • 按钮的text属性不是默认值""(空).

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

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

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

Gui*_*let 6

我会说两件事:

  1. 为什么强制JButton的preferredSize(否则它只是基于它包含的文本和图标)?
  2. 如果你想要一个来自Action NAME的文本,你为什么要设置JButton的文本?

我没有看到所描述的行为有任何问题.如果未提供任何文本,则默认为Action的NAME(如果有).否则,它将是空的.如果你想强制使用preferredSize,那么在某些情况下,你有权这样做.

如果要显示Action NAME,则不要在JButton上设置另一个"text"值.

编辑


如果我设置文本而不是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);
    }
}
Run Code Online (Sandbox Code Playgroud)