gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:03 24 4
gpt4 key购买 nike

假设我有一个 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;
}

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

最佳答案

我认为您实际上可能已经在做对了。来自Javadoc for getInsets() :

If a border has been set on this component, returns the border's insets; otherwise calls 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] 具有 Windows 外观。也许您正在使用自定义外观?

关于java - 确保 JButton 可以适合给定长度的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/659003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com