首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JButton在非默认情况下不使用preferredSize的名称

JButton在非默认情况下不使用preferredSize的名称
EN

Stack Overflow用户
提问于 2012-04-11 22:53:13
回答 1查看 701关注 0票数 1

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

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

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

很明显,操作是正确注册的,hideActionText属性是false。此外,我应该说,我通过Netbeans设计器中的属性面板设置了这些属性。

谷歌的一些搜索并没有带来任何影响。这是否正常的行为,能否解决?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-11 23:27:08

我要说两件事:

  1. 为什么要强制使用JButton的preferredSize (否则它只是基于它包含的文本和图标)?
  2. ,如果您想要从操作名称中获取文本,为什么要设置JButton的文本?

我不认为所描述的行为有任何问题。如果没有提供文本,则默认为“操作”的名称(如果有的话)。否则它就会是空的。如果您想强制使用preferredSize,那么在某些情况下,您完全有权这样做。

如果您想要显示Action,就不要在JButton上设置另一个"text“值。

编辑

如果我设置文本,而不是设置preferredSize,我仍然会看到按钮文本(即使文本太小太合适,也会得到“.”。在你的短信上)。在这个SSCCE上自己测试它:

代码语言:javascript
复制
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);
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10115118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档