3

为什么我不能设置按钮模型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);
        }
    });
}
}

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

为什么?

4

2 回答 2

4
// this is more than just a standard button..
ButtonModel buttonModel = new JToggleButton.ToggleButtonModel();
于 2013-02-20T18:10:47.183 回答
2

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

......
 final ButtonModel buttonModel = new DefaultButtonModel();
 buttonModel.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        buttonModel.setSelected(!buttonModel.isSelected());
    }
 });
......
于 2013-02-20T18:26:42.570 回答