Допустим, у меня есть JButton, и я хочу, чтобы он был достаточно большим, чтобы вместить строку из 8 "M" символов, независимо от того, какая строка фактически назначена ему, и размера шрифта без использования elipsis. *
JButton должен иметь именно такой размер, ни больше, ни меньше. Используется менеджер раскладок GridBagLayout.
Я попытался переписать метод getPreferredSize () и выполнить вычисление, используя строку и текущий шрифт системы. Расчет возвращает мне разумное значение, однако я понятия не имею, как установить предпочтительный размер таким образом, чтобы также учитывались границы.
Я попытался получить вставки компонента, но все они равны нулю.
Это код моего метода:
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;
}
У меня такое ощущение, что это может быть связано с тем фактом, что мой компонент еще не реализован, но я совершенно не уверен, как мне решить эту проблему. Я подхожу к этой проблеме с неправильной точки зрения?