首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java/ JButton :如何去掉JButton上的省略号?

Java/ JButton :如何去掉JButton上的省略号?
EN

Stack Overflow用户
提问于 2013-11-19 13:55:15
回答 2查看 1K关注 0票数 1

我有这个奇怪的问题,它似乎不是发生在Mac系统上,而是在Windows上。我正在处理这个GUI,并试图使所有的按钮都保持相同的长度(最长按钮的长度),但由于某种原因,在Windows上,其中一个按钮将不会显示整个字符串并将其截断为省略号(.)。

下面是我用来检查和设置最长按钮标签的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //Temp button to hold the longest button for resizing
    JButton longestButton = new JButton();

    //Find size of the largest of the 6 buttons
    for(int i = 0; i < 6; i++){
        if (buttons[i].getText().length() > longestButton.getText().length()){
            longestButton = buttons[i];
        }
    }

    //Match size of 6 hex buttons to the size of the longest one
    for(int i = 0; i < 6; i++){
        buttons[i].setPreferredSize(longestButton.getPreferredSize());
    }

有人对此有所了解吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-19 17:09:53

当您真正想要覆盖setPreferredSize()时,不要使用getPreferredSize()BoxLayout对此很有效:“对于自上而下的盒子布局,容器的首选宽度是子容器的最大首选宽度。”在下面的示例中,BorderLayout.LINE_END采用容器的首选宽度。每个按钮覆盖getMaximumSize(),以有效地消除按钮宽度的上限。其结果在不同平台上运行良好。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.awt.*;
import javax.swing.*;

/**
 * @see https://stackoverflow.com/a/20085489/230513
 */
public class TestViewer {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new ButtonPanel(), BorderLayout.LINE_END);
                frame.pack();
                frame.setSize(500, 300);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    private static class ButtonPanel extends Box {

        public ButtonPanel() {
            super(BoxLayout.Y_AXIS);
            this.add(createButton("Button 1"));
            this.add(createButton("Button 2"));
            this.add(createButton("Long Button 3"));
            this.add(createButton("Button 4"));
            this.add(createButton("Button 5"));
        }

        private JButton createButton(String name) {
            final JButton b = new JButton(name) {

                @Override
                public Dimension getMaximumSize() {
                    return new Dimension(
                        Short.MAX_VALUE, getPreferredSize().height);
                }
            };
            b.setAlignmentX(0.5f);
            return b;
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-11-19 14:19:34

与其使用最大的.getText().length()查找按钮,不如使用最宽的preferredSize()找到按钮。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(int i = 0; i < 6; i++){
    if (buttons[i].getPreferredSize().getWidth() > longestButton.getPreferredSize().getWidth()){
        longestButton = buttons[i];
    }
} 

这解决了评论中提到的破坏他人财产的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20082907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文