我需要制作一个按钮,根据应用程序的状态显示不同的内容。因此,例如,如果没有打开任何东西,它的标题将是“课程计划”,如果项目B打开,它将是“项目B课程计划”,我正在使用java.awt.Button类。我的问题是,有没有办法确定按钮应该适合给定文本的大小。例如,我可以以某种方式获得按钮使用的给定字体中每个字符的宽度,然后乘以我想要使用的标题中的字符?我如何获得这个字符宽度还是有更好的方法?谢谢!
答案 0 :(得分:4)
测量特定字体中各个字符的宽度(并非所有字符都是相同的宽度)变得复杂,特别是如果你想考虑字符之间的空格,并在任何一侧添加一些边距,这样它们就不会对抗按钮的边缘。 (N.B.其他人提供了一些比我意识到的更简单的方法!)
更好/更常见的解决方案是让Java为您完成工作。如果您使用java.awt.Button
(或javax.swing.JButton
),则它通常会自动调整为其上的文字大小。如果您的特定按钮表现奇怪,那么您可能遇到布局问题。有关详细信息,请查看Layout Managers上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()
。
答案 1 :(得分:0)
快速浏览一下API Docs节目:
public Rectangle2D getStringBounds(String str, FontRenderContext frc)
java.awt.Font中的
返回指定FontRenderContext中指定String的逻辑边界。该 逻辑边界包含原点,上升,前进和高度,其中包括前导。
这应该对你有帮助。
答案 2 :(得分:0)
您是否尝试过使用按钮上的getMinimumSize()
或getPreferredSize()
?我相信其中一个会告诉你按钮显示标签所需的最小尺寸。
答案 3 :(得分:0)
在awt按钮上,您可以调用getFontMetrics,然后询问getStringBounds。然后,您可以根据此设置按钮的首选大小。它不会考虑边界所需的额外间距(根据平台的不同而不同)。
我会尝试依次设置每个字符串,获得首选尺寸,然后设置最大尺寸的首选尺寸。