8

我试图改变字体大小JLabel,我试图设置Font但它总是一样的!

这是一些代码:

 @Override
 public void paint(Graphics g) {
 super.paint(g);
 Container cont=this.getContentPane();
 intro=new JLabel("משחק זיכרון");
 intro.setForeground(Color.YELLOW);
 intro.setFont(intro.getFont().deriveFont(64.0f));
 intro.setHorizontalAlignment( SwingConstants.CENTER );
 cont.add(intro);
     }
4

2 回答 2

14

您正在调用错误的deriveFont方法。

in 参数deriveFont(int)是样式(粗体、斜体等)。您正在寻找的方法是deriveFont(float).

在您的情况下,您需要进行的唯一更改是intro.setFont(intro.getFont().deriveFont(64.0f));.

这是一个显示字体大小为 64 的标签的简短代码示例:

JFrame frame = new JFrame ("Test");
JLabel label = new JLabel ("Font Test");
label.setFont (label.getFont ().deriveFont (64.0f));
frame.getContentPane ().add (label);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.pack ();
frame.setVisible (true);
于 2013-07-26T15:07:02.993 回答
6

不要将deriveFont期望样式参数的方法与期望字体大小的方法混淆。您正在使用的那个使用样式参数并且与实际字体大小无关。而是使用

intro.setFont(intro.getFont().deriveFont(64f)); 

也不要在paint方法中添加组件。JLabel在重绘完成之前,您当前的应用程序不会显示。覆盖paint(或更正确地paintComponent适用于 Swing)旨在用于自定义绘画,但添加组件不符合此条件。每次重绘完成时,应用程序都会产生添加组件的开销。

例子:

在此处输入图像描述

public class LabelDemo {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame("Label Test");
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                JLabel intro = new JLabel("משחק זיכרון");
                frame.add(intro);
                intro.setFont(intro.getFont().deriveFont(64f));
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
于 2013-07-26T15:06:33.070 回答