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

标签 java swing user-interface

我想制作具有标准字体大小的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/

相关文章:

java - 重构建议和工具

java外观和感觉: windows server 2012 shows progress bar too thin

仅当单击按钮时调用方法时,Java Swing GUI 才会被方法阻止

java - 设计启动画面 (java)

Java JTextArea 未正确填充。请帮助

java - java中的分割模式代码

java - Java 的可扩展 GUI 框架

ios - 通过不同容器 View 中的 UI 按钮更改容器 View 内容

c++ - 如何使用 CSS 样式表更改 Qt 的 QMenu 中选定元素的右箭头图像?

java - 在 Spring Boot 应用程序中将 json 从 AngularJS 发送到 Spring Controller 时导致异常