为什么我不能为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);
}
});
}
}
但是,如果我在框中添加模型(取消注释行),则复选框将变为不可操作(如果单击则不会更改)。
为什么?
答案 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());
}
});
......