我有以下代码,它给出了文本字段和两个粗体和斜体文本的复选框。 eventlistener是itemStateChange,但它只适用于第二个if else语句并跳过第一个。 我试过用斜体切换粗体但是斜体是工作但粗体不起作用。所以只有第二个if else语句才有效。
代码如下所示
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class CreateFrame extends JFrame implements ItemListener {
private JTextField textField;
private JCheckBox bold, itelaic;
public CreateFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("JCkeckBox Test");
textField = new JTextField(30);
textField.setText("Watch the font style change");
bold = new JCheckBox("Bold");
itelaic = new JCheckBox("Italic");
add(textField);
add(bold);
add(itelaic);
bold.addItemListener(this);
itelaic.addItemListener(this);
setLayout(new FlowLayout());
setSize(100, 120);
setVisible(true);
}
public static void main(String[] args) {
new CreateFrame();
}
public void itemStateChanged(ItemEvent e) {
if(bold.isSelected()) {
textField.setFont(new Font("TimesRoman", Font.BOLD,14));
} else {
textField.setFont(new Font("TimesRoman", Font.PLAIN,14));
}
if(itelaic.isSelected()){
textField.setFont(new Font("TimesRoman", Font.ITALIC,14));
} else {
textField.setFont(new Font("TimesRoman", Font.PLAIN,14));
}
}
}
答案 0 :(得分:0)
您有2个选项。您可以为ItemListener
:
CheckBoxes
bold.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (bold.isSelected()) {
textField.setFont(new Font("TimesRoman", Font.BOLD, 14));
} else {
textField.setFont(new Font("TimesRoman", Font.PLAIN, 14));
}
}
});
或者您在检查状态之前确定ItemEvent
的来源:
public void itemStateChanged(ItemEvent e) {
if (e.getSource() == bold) {
if (bold.isSelected()) {
textField.setFont(new Font("TimesRoman", Font.BOLD, 14));
} else {
textField.setFont(new Font("TimesRoman", Font.PLAIN, 14));
}
} else if (e.getSource() == itelaic) {
if (itelaic.isSelected()) {
textField.setFont(new Font("TimesRoman", Font.ITALIC, 14));
} else {
textField.setFont(new Font("TimesRoman", Font.PLAIN, 14));
}
}
}
两个选项都可以正常使用