使用 java 将文本设置为粗体
setting text to bold using java
我正在创建一个带有一些 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);
}
}
错误:
空白的最终字段文本字段可能尚未初始化,我该如何解决?
您必须先初始化 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);
}
JTextField是一个纯文本组件,只允许写一行,即使你可以显示任何字体的文本你不能设置它粗体。要在您的程序中实现格式化文本区域,您应该使用 JTextPane 或 JEditorPane。关注此 link 了解更多信息 https://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html
好的,所以你有一个实例变量,textfield
,你正在 class 的构造函数的主体中初始化它。您还有另一个实例变量 font
,您正在实例变量声明中对其进行初始化。当您初始化 font
时,您正在访问 textfield
.
如果你阅读Java language specification,它描述了初始化的顺序。对您来说不幸的是,初始化实例变量后,构造函数主体的大部分是 运行 。这意味着当 font
变量被初始化时,textfield
变量还没有被初始化。
正如 David Yee 所建议的,明显的变化是在初始化 textfield
变量之后在构造函数中初始化 font
变量,这给出了非常清晰明确的顺序:
Bold(JTextField fontSetter, JTextField textfield) {
this.fontSetter = fontSetter;
this.textfield = textfield;
this.font = new Font(textfield.getText(), Font.BOLD, 12);
}
我正在创建一个带有一些 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);
}
}
错误: 空白的最终字段文本字段可能尚未初始化,我该如何解决?
您必须先初始化 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);
}
JTextField是一个纯文本组件,只允许写一行,即使你可以显示任何字体的文本你不能设置它粗体。要在您的程序中实现格式化文本区域,您应该使用 JTextPane 或 JEditorPane。关注此 link 了解更多信息 https://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html
好的,所以你有一个实例变量,textfield
,你正在 class 的构造函数的主体中初始化它。您还有另一个实例变量 font
,您正在实例变量声明中对其进行初始化。当您初始化 font
时,您正在访问 textfield
.
如果你阅读Java language specification,它描述了初始化的顺序。对您来说不幸的是,初始化实例变量后,构造函数主体的大部分是 运行 。这意味着当 font
变量被初始化时,textfield
变量还没有被初始化。
正如 David Yee 所建议的,明显的变化是在初始化 textfield
变量之后在构造函数中初始化 font
变量,这给出了非常清晰明确的顺序:
Bold(JTextField fontSetter, JTextField textfield) {
this.fontSetter = fontSetter;
this.textfield = textfield;
this.font = new Font(textfield.getText(), Font.BOLD, 12);
}