Java / JButton:如何摆脱JButton上的省略号?

时间:2013-11-19 21:55:15

标签: java swing user-interface awt jbutton

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

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

    //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());
    }

有人对此有所了解吗?

2 个答案:

答案 0 :(得分:3)

如果您真的要覆盖setPreferredSize(),请不要使用getPreferredSize()BoxLayout适用于此:“对于从上到下的方框布局,容器的首选宽度是子容器的最大首选宽度。”在下面的示例中,BorderLayout.LINE_END采用容器的首选宽度。每个按钮都会覆盖getMaximumSize()以有效删除按钮宽度的上限。结果适用于各个平台。

image

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;
        }
    }
}

答案 1 :(得分:0)

您可以找到最宽的preferredSize()按钮,而不是找到最大的.getText()。length()按钮。

for(int i = 0; i < 6; i++){
    if (buttons[i].getPreferredSize().getWidth() > longestButton.getPreferredSize().getWidth()){
        longestButton = buttons[i];
    }
} 

这解决了评论中提到的问题vandale