为我的所有 Jlabels JTextArea 等设置通用字体大小

Posted

技术标签:

【中文标题】为我的所有 Jlabels JTextArea 等设置通用字体大小【英文标题】:Setting a universal font size for all my Jlabels JTextArea , etc 【发布时间】:2012-10-08 02:27:28 【问题描述】:

你好,我有一个奇怪的问题。

我想知道是否以及如何为我的 Jlabels、TextAreas 以及基本上任何可以在面板上显示的文本进行通用设置。我一直在每个标签上写下字体大小以使其保持一致。但是面板正在增长,我不想在每个标签上硬编码字体大小。

这是我正在使用并希望在我的所有标签和 textarea 上使用的尺寸。

titlelb.getFont().deriveFont( Font.BOLD, (float) 20.); 
lb1.getFont().deriveFont( Font.PLAIN, (float) 11.);
lb2.getFont().deriveFont( Font.BOLD, (float) 11.);
textArea.setFont( Font.decode( "Arial-PLAIN-11"));

我只是想知道是否有一种方法可以通用地设置它,如果可能的话,每个面板都会继承这些特定的尺寸,我真的不知道如何处理标签的尺寸,这就是为什么我在这里问。提前谢谢你。

【问题讨论】:

为什么?我怀疑你正在做类似this 的事情,但不会有任何好处。即使是同名字体在不同平台上也有不同的指标。 为什么这是一致性问题,因为我被要求这样做,哈哈,否则我可以不在乎。不,我当然不会做那样的事情。 【参考方案1】:

您可以通过调用UIManager.put("nameOfFontProperty", new Font(Font.DIALOG, FONT.PLAIN, sizeInPixel)); 为您需要的每个组件更改UIManager 中的字体属性。您可以找到具有默认属性here 的列表。

将所有标签的字体设置为 20px 的示例:

UIManager.put("Label.font", UIManager.getFont("Label.font").deriveFont(20.0));
SwingUtilities.updateComponentTreeUI(yourJFrame);

【讨论】:

请更改 nameOfFontProperty 应为 ComponentName.font,区分大小写 我发现的最佳方法是在您初始化 UIManager 的外观和感觉之后以及在您启动 UI 之前执行此操作,尽管 SwingUtilties#updateCompoent 应该可以正常工作;)跨度> 所以我会在每个面板上添加该行以确保我将字体大小设置为 20,问题可以说我使用它。但是我想将一个标签设置为 11,并且我写了将字体设置为 11。它是否仍将其设置为 20,还是按照我的意愿设置为 11?【参考方案2】:

为您希望在面板中具有固定字体的任何 JComponent 子类编写自定义包装类,并在构造函数中添加字体代码。例如:

public class JLabelCustom extends JLabel 

    public JLabelCustom(...) 
        super();

        // Font setting code here
        .getFont().deriveFont( Font.BOLD, (float) 20.); 
        .getFont().deriveFont( Font.PLAIN, (float) 11.);
        .getFont().deriveFont( Font.BOLD, (float) 11.);
        this.setFont( Font.decode( "Arial-PLAIN-11"));
    

在任何需要标准化字体的地方使用自定义 JComponent。

【讨论】:

很有趣,所以我要做的是创建一个新的类文件,然后像上面那样编写代码以供参考。然后我可以在每个面板上扩展它吗? 它不会只是每个面板,它会是任何你想要标准化字体的 JComponent。 正确的是每个 Jlabel 和文本区域大声笑。但是我可以创建一个新的类文件并将其扩展到我的标签等? 好的,我的另一个问题是因为我担心在这个意义上将它设置为相同,对于标题我希望它是 20 粗体但对于不是我想要的标题的标签它们要么是 11 粗体,要么是简单的。用这种方法可以吗?就文本区域而言,我希望它经常使用 Arial-PLAIN-11,因此我可以将它用于文本区域。但不太确定标签。 对于通用字体的任何异常,您可以在初始化后手动设置它们以覆盖设置【参考方案3】:

您可以创建一个自动设置所有内容的子类。像'

class UniversalJPanel extends JPanel
    public UniversalJPanel()
        super();
        this.setFont(...);
        
    

然后您可以使用它来代替常规的 JPanel。 JLabel、JTextArea 等也是如此

【讨论】:

我有点东西已经扩展了 JPanel 一个接口文件。除了接口文件之外,是否可以将一个类扩展到 JPANEL?如果是这样,我会怎么做?只需新建一个类似于你的类文件,然后将其添加到扩展语句中? 该接口是 JPanel 的子类还是只是一些设置文件?如果它是一个设置文件,你可以扩展 JPanel 完全没有问题,因为设置将应用于父级,因此将被继承。 接口文件只有这个`import javax.swing.JPanel;公共接口 PanelValidate public boolean Validate();公共JPanel getPanel();公共无效保存信息(); ` 看起来像一个设置文件,但不是 100% 确定。

以上是关于为我的所有 Jlabels JTextArea 等设置通用字体大小的主要内容,如果未能解决你的问题,请参考以下文章

JTextArea 空间不足?可以容纳多少文字,我可以容纳更多吗?

JTextArea 问题

使用arrayList在JTextArea中显示

Java JTextArea 如何实现换行???

jpanel 中 jlabels 的搜索栏

如何创建具有指定宽度和显示所有文本所需的最小高度的 JTextArea?