如何在Java中测量按钮所需的大小

时间:2009-08-03 22:54:42

标签: java button

我需要制作一个按钮,根据应用程序的状态显示不同的内容。因此,例如,如果没有打开任何东西,它的标题将是“课程计划”,如果项目B打开,它将是“项目B课程计划”,我正在使用java.awt.Button类。我的问题是,有没有办法确定按钮应该适合给定文本的大小。例如,我可以以某种方式获得按钮使用的给定字体中每个字符的宽度,然后乘以我想要使用的标题中的字符?我如何获得这个字符宽度还是有更好的方法?谢谢!

4 个答案:

答案 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。然后,您可以根据此设置按钮的首选大小。它不会考虑边界所需的额外间距(根据平台的不同而不同)。

我会尝试依次设置每个字符串,获得首选尺寸,然后设置最大尺寸的首选尺寸。