【问题标题】:JButton does not take action's name when preferredSize is non-default当preferredSize 为非默认值时,JButton 不采用动作名称
【发布时间】:2012-04-11 22:53:13
【问题描述】:

我刚刚注意到JButton 不会将其文本更改为耦合的Action 对象的NAME 值,但至少满足以下两点:

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

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

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

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

【问题讨论】:

标签: java swing netbeans action jbutton


【解决方案1】:

我想说两件事:

  1. 为什么要强制 JButton 的首选大小(否则它只是基于它包含的文本和图标)?
  2. 如果您希望 JButton 的文本来自 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);
    }
}

【讨论】:

  • preferredSize 的原因纯粹是为了美观和用户体验,比如说我希望它引起用户更多的关注/让它更加突出。文本的原因是按钮在 GUI 设计器中应该仍然有意义。我承认有一些简单的解决方法,但首先它们不应该是必需的......
  • @MarioDeSchaepmeester 您认为应该有什么不同?我同意这是预期的行为。您是说要为按钮分配一个名称并仍然让它覆盖名称并显示操作吗?
  • 好的,我知道您想要设置文本(用于在 GUI 设计器中预览),但您不应该这样做。 GUI 设计者应该提供一种输入示例值的方法,该示例值纯粹用于显示按钮可能包含的内容。对于您的问题,我没有看到任何其他“解决方法”。
  • @YoussefG。这就是我要说的,如果我不更改preferredSize,它就会起作用。
  • @GuillaumePolet Netbeans 不提供该功能,我知道。正如我所说,单独设置文本,它可以工作。我只是不明白preferredSize 属性为什么以及如何影响按钮是否接受操作文本。似乎是 java API 中的一个缺陷......当然,如果只是因为动作文本 可能 不适合按钮。但这是程序员的责任。
猜你喜欢
  • 2018-03-30
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多