使用java将文本设置为粗体

时间:2016-02-05 21:32:07

标签: java user-interface jtextfield

我正在使用一些JCheckButtons(粗体斜体)创建GUI,这些按钮会在通过使用动作侦听器选择时将文本字段中的文本转换为粗体,斜体或两者。以下是我在动作侦听器方法中实现此功能的方法(这是对于粗体方法,我也有类似的斜体和粗体和斜体方法)。

class Bold implements ActionListener {

    private final FontSetter fontSetter;
    private final JTextField textfield;

    Bold(FontSetter fontSetter, JTextField textfield) {
        this.fontSetter = fontSetter;
        this.textfield = textfield;
    }

    Font font = new Font(textfield.getText(), Font.BOLD,12);

    public void actionPerformed(ActionEvent e) {
        fontSetter.setBold();
        textfield.setFont(font);
    }

}

错误: 空白的最终字段文本字段可能尚未初始化,我该如何解决?

3 个答案:

答案 0 :(得分:1)

在使用textfield变量之前,必须先对其进行初始化。由于您已将font定义为另一个实例变量,因此对textfield的引用可能尚未初始化。

一种可能的方法是在构造上初始化font,因为它依赖于textfield

private final JTextField fontSetter;
private final JTextField textfield;
private final Font font;

Bold(JTextField fontSetter, JTextField textfield) {
    this.fontSetter = fontSetter;
    this.textfield = textfield;
    this.font = new Font(textfield.getText(), Font.BOLD, 12);
}

答案 1 :(得分:1)

好的,你有一个实例变量textfield,你正在类的构造函数体中初始化它。您还有另一个实例变量font,您正在实例变量声明中初始化它。初始化font时,您正在访问textfield

如果您阅读Java language specification,它会描述初始化的顺序。不幸的是,构造函数体的大部分是在初始化实例变量之后运行的。这意味着,当初始化font变量时,textfield变量尚未出现。

正如David Yee所建议的,显而易见的变化是在初始化font变量后初始化构造函数中的textfield变量,这给出了一个非常明确和明确的排序:

Bold(JTextField fontSetter, JTextField textfield) {
    this.fontSetter = fontSetter;
    this.textfield = textfield;
    this.font = new Font(textfield.getText(), Font.BOLD, 12);
}

答案 2 :(得分:-1)

JTextField 是一个纯文本组件,只允许写一行,即使您可以使用任何字体显示文字,但不能将其设置为粗体。要在程序中实现格式化文本区域,您应该使用JTextPane或 JEditorPane 。请点击此链接了解更多信息https://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html