我想使Java Swing组件具有标准的字体大小,因此我通过使子类从swing组件类扩展而来,将组件定制为“ HAHA组件”。
但是,无法键入自定义的JTextfield
和setText
。自定义的按钮不显示任何文本。 (我确定没有编写其他代码来更改自定义组件的属性)。
调试后,我发现如果删除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");
}
}
答案 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都将使用这些属性。