Предположим, у меня есть JButton, и я хочу, чтобы он был достаточно большим, чтобы соответствовать строке из 8 символов «M», независимо от строки, которая фактически назначена это и размер шрифта, без использования elipsis.Обеспечение того, что JButton может соответствовать строкам заданной длины
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;
}
я чувствую, что это может быть связано с тем, что мой компонент еще не реализован, но я совершенно не уверен, как я мог бы решить эту проблему , Подхожу ли я к этой проблеме с неправильной точки зрения?