我想说两件事:
- 为什么要强制 JButton 的 preferredSize (否则它只是基于它包含的文本和图标)?
- 如果您想要来自动作名称的文本,为什么要设置 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);
}
}