设置按钮模型使复选框不可操作

时间:2013-02-20 18:05:00

标签: java swing model jcheckbox

为什么我不能为JCheckBox设置按钮模型?

以下代码可以工作,并在中心绘制一个带有一个复选框的窗口。复选框正常运行:

public class JCheckButton_Test {
public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            ButtonModel buttonModel = new DefaultButtonModel();

            JCheckBox checkBox = new JCheckBox();
            checkBox.setText("Check Box");
            //checkBox.setModel(buttonModel);

            JPanel controlPanel = new JPanel();
            controlPanel.add(checkBox);

            JFrame frame = new JFrame();

            frame.add(controlPanel, BorderLayout.CENTER);

            frame.pack();
            frame.setSize(640, 200);

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    });
}
}

但是,如果我在框中添加模型(取消注释行),则复选框将变为不可操作(如果单击则不会更改)。

为什么?

2 个答案:

答案 0 :(得分:4)

// this is more than just a standard button..
ButtonModel buttonModel = new JToggleButton.ToggleButtonModel();

答案 1 :(得分:2)

因为它是按钮的默认按钮模型实现,并作为按钮对您的操作作出反应。如果您仍想使用ButtonModel,那么您应该为它实现复选框行为。  例如,您可以使用以下实现

......
 final ButtonModel buttonModel = new DefaultButtonModel();
 buttonModel.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        buttonModel.setSelected(!buttonModel.isSelected());
    }
 });
......