Java 中的三态复选框

2022-09-03 09:23:14

我真的可以在Java中使用三态复选框。这听起来像是一件简单的事情,但我只见过非常丑陋的实现[注意:链接现在坏了]。

三个单选按钮只是占用了太多的空间,在我的情况下可能会让用户感到困惑。它基本上是用于搜索对话框。我需要真,假或“不在乎”的选项。人们使用不同的技术吗?


答案 1

使用下拉列表。


答案 2

我找到了一种方法,通过简单地添加一个监听器来制作一个三态复选框:


public class TriStateActionListener implements ActionListener{
    final protected Icon icon;

    public TriStateActionListener(Icon icon){
        this.icon=icon;
    }

    public static Boolean getState(javax.swing.JCheckBox cb){
        if (cb.getIcon()==null) return null;
        if (cb.isSelected()) return true;
        else return false;
    }

    public void actionPerformed(ActionEvent e) {
        javax.swing.JCheckBox cb=(javax.swing.JCheckBox)e.getSource();
        if (!cb.isSelected()){
            cb.setIcon(icon);
        }
        else if (cb.getIcon()!=null){
            cb.setIcon(null);
            cb.setSelected(false);
        }
    }
}

然后在应用程序代码中,它只是一行:


jCheckBox1.addActionListener(new TriStateActionListener(getResourceMap().getIcon("TriStateIcon")));

在所有反馈之后,我认为下拉列表可能是更好的选择。但是,我想在这里为其他人分享我的代码。


推荐