Измерение ширины отдельных символов в отдельных шрифтах (не все символы имеют одинаковую ширину) усложняется, особенно если вы хотите учесть пробелы между символами и добавить некоторые поля с обеих сторон, чтобы они не сталкивались с края кнопки. (N.B. Другие предоставили несколько способов сделать это проще, чем я думал, было возможно!)
Гораздо лучше / более обычное решение - позволить Java сделать всю работу за вас. Если вы используете java.awt.Button
(или javax.swing.JButton
), то он обычно будет автоматически соответствовать размеру текста на нем. Если ваша конкретная кнопка ведет себя странно, то, возможно, у вас проблема с макетом. Обратитесь к разделу учебника Java по Менеджерам макета для получения дополнительной информации.
В качестве примера (в Swing, а не в AWT - извините!) Эти две кнопки в конечном итоге имеют правильный размер текста на них:
import javax.swing.*;
public class ButtonTest {
public static void main(String[] args) {
JButton button1 = new JButton("Some label");
JButton button2 = new JButton("Some much longer label");
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(button1);
panel.add(button2);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
Если вам действительно нужен размер, а не просто позволить Java работать наилучшим образом, я бы рекомендовал вызывать button1.getPreferredSize()
и button2.getPreferredSize()
после вызова frame.pack()
.