如何自定义Swing组件(以标准化字体)?

时间:2018-11-17 16:51:57

标签: java swing user-interface

我想使Java Swing组件具有标准的字体大小,因此我通过使子类从swing组件类扩展而来,将组件定制为“ HAHA组件”。

但是,无法键入自定义的JTextfieldsetText。自定义的按钮不显示任何文本。 (我确定没有编写其他代码来更改自定义组件的属性)。

调试后,我发现如果删除setFont中的HAHATextField语句,则可以键入文本字段对象,并输入setText。此外,如果我通过setFont实例HAHATextField,它可以正常工作。

为什么这不能正常工作?正确的做法是什么?

代码在下面。

class HAHAButton extends JButton
{
    HAHAButton(String haha)
    {
        super(haha);
        this.setFont(new Font("haha",Font.BOLD,fontsize));
    }
}

class HAHALabel extends JLabel
{
    HAHALabel(String haha)
    {
        super(haha);
        this.setFont(new Font("haha",Font.BOLD,fontsize));
    }
}

class HAHATextField extends JTextField
{
    HAHATextField(int haha)
    {
        super(haha);
        this.setFont(new Font("haha",Font.BOLD,fontsize));
        this.setText("haha");
    }
}

1 个答案:

答案 0 :(得分:1)

我不知道“ haha​​”字体是什么。每当您测试新东西时,就使用系统类和对象测试逻辑。

我们也不知道fontsize是什么,甚至没有值。

因此,您将执行以下操作:

//this.setFont(new Font("haha", Font.BOLD, fontsize));
setFont( getFont().deriveFont( 24.0f ) );

如果这行得通,那么您可以尝试使用其他字体系列:

setFont(new Font("monospaced", Font.BOLD, 16));

如果这可行,那么您尝试使用自定义字体。

这将有助于隔离问题出处。

  

正确的做法是什么?

如果要为所有组件更改此设置,则有时可以利用UIManager。在课程开始之前,您可以创建组件:

UIManager.put("TextField.font", new FontUIResource( yourFontHere ));

现在,这将是创建组件时使用的默认字体。

同样,从标准系统字体开始进行简单测试。然后尝试使用“ haha​​”字体。

您还需要对其他组件执行此操作。

查看UIManager Default了解更多信息。请勿尝试更改这些默认值,因为不能保证每个LAF都将使用这些属性。