我正在使用Java(ver1.42)来制作聊天程序
我做了大胆的&斜体JCheckBox
可更改JTextArea
中的字体。
这是2个CheckBoxes的监听器。
class CheckBoxListener implements ChangeListener {
public void stateChanged(ChangeEvent ce) {
String fontName = inputTextArea.getFont().getFontName();
int fontSize = inputTextArea.getFont().getSize();
int fontStyle = 0;
if(boldCheckBox.isSelected())
fontStyle += Font.BOLD;
if(italicCheckBox.isSelected())
fontStyle += Font.ITALIC;
inputTextArea.setFont(new Font(fontName, fontStyle, fontSize));
}
}
}
一切都运作良好
如果我选中“boldCheckBox”,则inputTextArea
中的字体会变为BOLD
如果我检查“italicCheckBox”,inputTextArea
中的字体会变为ITALIC
和
如果我取消选中“italicCheckBox”,字体将变为正常形式。
无论其
即使我取消选中“boldCheckBox”,字体也永远不会回来 你能找到什么问题吗?
答案 0 :(得分:2)
首先,您确实必须使用按位|
运算符将Bold和Italic一起使用相同的字体,而不是+
运算符。
也可能是系统一旦切换到粗体字体,就会使用包含粗体属性的相关字体。例如,在某些操作系统中,您有" Arial"和" ArialBD"。由于您是根据旧字体的名称创建新字体而不是使用deriveFont
,因此可能会保留" ArialBD"。
所以试试这个:
class CheckBoxListener implements ChangeListener {
public void stateChanged(ChangeEvent ce) {
int fontStyle = Font.PLAIN;
if(boldCheckBox.isSelected())
fontStyle |= Font.BOLD;
if(italicCheckBox.isSelected())
fontStyle |= Font.ITALIC;
inputTextArea.setFont(inputTextArea.getFont().deriveFont(fontStyle));
}
}
}
答案 1 :(得分:1)
问题在于每次在侦听器内初始化fontName
。将fontName
初始化代码仅移出侦听器一次。
尝试以下代码:
final String fontName = inputTextArea.getFont().getFontName();
final int fontSize = inputTextArea.getFont().getSize();
class CheckBoxListener implements ChangeListener {
public void stateChanged(ChangeEvent ce) {
int fontStyle = 0;
if (boldCheckBox.isSelected() && italicCheckBox.isSelected())
fontStyle = Font.BOLD | Font.ITALIC;
else if (boldCheckBox.isSelected())
fontStyle = Font.BOLD;
else if (italicCheckBox.isSelected())
fontStyle = Font.ITALIC;
else
fontStyle = Font.PLAIN;
inputTextArea.setFont(new Font(fontName, fontStyle, fontSize));
}
}
答案 2 :(得分:0)
谢谢你们,但我找到了回答。
原因是FontName
如果我把它变成BOLD风格
FontName从“dialog”
更改为“dialog.bold”所以,即使我删除粗体样式,字体仍然是粗体样式,因为FontName是“dialog.bold”
这是我的回答
class CheckBoxListener implements ChangeListener {
public void stateChanged(ChangeEvent ce) {
int fontSize = inputTextArea.getFont().getSize();
int fontStyle = 0;
if(boldCheckBox.isSelected())
fontStyle += Font.BOLD;
if(italicCheckBox.isSelected())
fontStyle += Font.ITALIC;
inputTextArea.setFont(new Font("dialog", fontStyle, fontSize));
}
}