Java 确保JButton可以适合给定长度的字符串

Java 确保JButton可以适合给定长度的字符串,java,swing,Java,Swing,假设我有一个JButton,我希望它足够大,可以容纳一个8“M”字符的字符串,而不考虑实际分配给它的字符串和字体大小,而不使用省略号 JButton必须具有精确的大小,不能多,也不能少。正在使用的布局管理器是GridBagLayout 我尝试覆盖getPreferredSize()方法,并使用字符串和系统的当前字体执行计算。计算结果给了我一些合理的值,但是,我不知道如何设置首选大小,以便同时考虑边界 我试图获取组件的插图,但它们都是0 这是我的方法的代码: public void getPref

假设我有一个JButton,我希望它足够大,可以容纳一个8“M”字符的字符串,而不考虑实际分配给它的字符串和字体大小,而不使用省略号

JButton必须具有精确的大小,不能多,也不能少。正在使用的布局管理器是GridBagLayout

我尝试覆盖getPreferredSize()方法,并使用字符串和系统的当前字体执行计算。计算结果给了我一些合理的值,但是,我不知道如何设置首选大小,以便同时考虑边界

我试图获取组件的插图,但它们都是0

这是我的方法的代码:

public void getPreferredSize() {
        Dimension d = super.getPreferredSize();

        // Geometry width indicates how many characters must fit
        char[] pad = new char[propGeometryWidth];
        Arrays.fill(pad, 'M');
        String tmpTemplateString = new String(pad);

        FontMetrics tmpMetrics = getFontMetrics(getFont());
        Rectangle2D tmpR2D = tmpMetrics.getStringBounds(tmpTemplateString, getGraphics());

        int tmpWidth = (int)tmpR2D.getWidth();
        int tmpHeight = (int)(tmpR2D.getHeight() * propGeometryHeight + tmpR2D.getHeight());

        // We need to take into consideration borders and padding!
        Insets insets = getInsets();

        Dimension tmpSize = new Dimension(tmpWidth + insets.left + insets.right, tmpHeight + insets.top + insets.bottom);
        return tmpSize;
}

我觉得这可能与我的组件尚未实现有关,但我完全不确定如何解决这个问题。我是否从错误的角度看待这个问题?

我想你可能已经做对了。从:

如果已在此组件上设置边框,则返回边框的插图;否则调用
super.getInsets


一个新创建的
JButton
为我显示了
java.awt.insets[top=5,left=17,bottom=5,right=17]
java.awt.insets[top=4,left=16,bottom=4,right=16]
的默认外观和感觉。您是否使用自定义的外观?

我找到了问题的原因。问题是我有一个面板,里面有一个JButton,我在面板上重写了方法(有一个相对复杂的类层次结构)。当然,面板的插图都设置为0。在得到按钮的插图后,正如Mr.Mmyers所说,一切都很好