我想制作具有标准字体大小的Java Swing组件,因此我通过从swing组件类扩展子类来将组件定制为“HAHA组件”。
但是,自定义的JTextfield
无法输入和setText
。自定义按钮不显示任何文字。 (我确信我没有编写其他可以更改自定义组件属性的代码)。
经过调试,我发现如果删除HAHATextField
中的setFont
语句,则可以键入该文本字段对象并setText
。此外,如果我通过 HAHATextField
实例 setFont
,它可以正常工作。
为什么这不能正常工作?正确的做法是什么?
代码如下。
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");
}
}
最佳答案
我不知道“哈哈”字体是什么。每当您测试新东西时,请使用系统类和对象测试逻辑。
此外,我们不知道字体大小是什么,或者它是否有值。
所以你会做这样的事情:
//this.setFont(new Font("haha", Font.BOLD, fontsize));
setFont( getFont().deriveFont( 24.0f ) );
如果这有效,那么您可以尝试不同的字体系列:
setFont(new Font("monospaced", Font.BOLD, 16));
如果这有效,那么您可以尝试自定义字体。
这将有助于确定问题发生的位置。
And what is the proper way to do?
如果您想为所有组件更改此设置,那么有时您可以利用 UIManager。在类(class)开始时,在创建组件之前,您可以执行以下操作:
UIManager.put("TextField.font", new FontUIResource( yourFontHere ));
现在这将是创建组件时使用的默认字体。
同样,从标准系统字体开始进行简单的测试。然后尝试“haha”字体。
您也需要对其他组件执行此操作。
查看UIManager Default了解更多信息。不要疯狂地尝试更改这些默认值,因为不能保证每个 LAF 都会使用这些属性。
关于java - 如何自定义Swing组件(标准化字体)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53353387/