Флажки с тремя состояниями в Java

Вот определение того, что утверждение, и здесь некоторый пример кода. Вкратце утверждение является способом для разработчика протестировать его (или ее) предположения о состоянии кода в любой данной точке. Например, если Вы делали следующий код:

mypointer->myfunct();

Вы, вероятно, хотите утверждать, что mypointer не является ПУСТЫМ, потому что это - Ваше предположение - что mypointer никогда не будет ПУСТЫМ перед вызовом.

12
задан John Kugelman supports Monica 13 September 2013 в 21:24
поделиться

6 ответов

Я нашел способ сделать флажок с тремя состояниями, просто добавив слушателя:


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")));

После всех отзывов, Я думаю, что раскрывающийся список может быть лучшим выбором. Но я хотел поделиться своим кодом со всеми остальными.

5
ответ дан 2 December 2019 в 04:25
поделиться

Используйте раскрывающийся список.

14
ответ дан 2 December 2019 в 04:25
поделиться

Эти "уродливые реализации" - старая ссылка. Одно из предложений на этой странице было обновлено пару лет назад. Я не тестировал старую реализацию, поэтому не знаю, лучше или хуже новая.

TristateCheckBox Revisited

2
ответ дан 2 December 2019 в 04:25
поделиться

Я бы просто использовал тот, который вы опубликовали.

Пока ваша сложность находится в другом классе (который работает) и действует так же, как любой другой элемент управления, кого это волнует? (Похоже, что это предположение, лежащее в основе всех свингов, большинство классов свинга, кажется, об этом сложны.)

0
ответ дан 2 December 2019 в 04:25
поделиться

Измените пользовательский интерфейс. Флажок с тремя состояниями необычен и действительно может сбить с толку пользователей. Выпадающий список - хороший вариант, но более одного случая в диалоговом окне он также может ввести пользователя в заблуждение.

0
ответ дан 2 December 2019 в 04:25
поделиться

Флажки с тремя состояниями - это стандартная идиома пользовательского интерфейса для Treeviews с частично отмеченными дочерними узлами. Они широко используются при управлении слоями в сложных иерархических представлениях, таких как Google Earth.

2
ответ дан 2 December 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: