itemStateChanged()只影响一个复选框

时间:2017-12-13 08:44:25

标签: java swing

我有以下代码,它给出了文本字段和两个粗体和斜体文本的复选框。 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));

}

}

}

1 个答案:

答案 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));

        }
    }
}

两个选项都可以正常使用