Можно ли использовать JCheckBox в JButton на Java? - PullRequest
1 голос
/ 25 августа 2011

У меня есть программа загрузки, в которой есть JTable, отображающий набор строк загрузок.У меня есть JButton с надписью «Очистить завершено», который при нажатии удаляет строки завершенных загрузок.Теперь я хотел бы иметь комбинацию JCheckBox / JButton (например, комбинацию флажок / раскрывающийся список в gmail), чтобы при установке флажка строки автоматически удалялись.

Я создал класс, который расширяетсяJButton и переопределить конструктор, чтобы добавить JCheckBox.Добавлены ActionListeners для JCheckBox и JButton.Похоже на это.

http://i.stack.imgur.com/KcBHv.png

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

Приведет ли это к какому-либотакие проблемы, как нарушение интерфейса во время выполнения?Или, возможно, он не будет работать во всех ОС?(Я использую Windows7)

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

Пожалуйста, поделитесь своим мнением.Спасибо.

Ответы [ 3 ]

3 голосов
/ 25 августа 2011

Это вызовет проблемы

Может быть. Например, вы можете получить проблемы с рендерингом, если для рендеринга кнопки используется нативный виджет. Или флажок может не реагировать на щелчки, поскольку кнопка поглощает событие.

Это хороший подход к проектированию?

Не совсем. Большинство пользователей подумают, что в вашем макете есть ошибка, потому что они никогда раньше не видели флажок внутри кнопки. Наряду с любыми проблемами рендеринга (как будет выглядеть флажок, когда я нажимаю кнопку? Исчезнет ли он или отобразится в нечетных цветах?), Я чувствую, что вам следует избегать этого.

Используйте стандартный подход: флажок с текстом («Очистить автоматически») над кнопкой. Возможно, измените текст кнопки, когда флажок установлен на «Закрыть».

2 голосов
/ 25 августа 2011

Не вызовет ли это каких-либо проблем, таких как нарушение интерфейса во время выполнения? Либо это Возможно, это не будет работать во всех ОС? (Я использую Windows7)

Я думаю, что это не будет проблемой.

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

Лично я думаю, что поставить флажок слева от JButton было бы более понятно. В любом случае это зависит от вас. Кроме того, быстрые перемещения могут позволить пользователю нажимать кнопку, а не флажок.

0 голосов
/ 20 июля 2012

В случае, если кому-то интересно, как вы можете это сделать.Возможно, вам придется добавить EmptyBorder (4,4,4,4), чтобы сохранить размер, аналогичный размеру кнопки.Я обычно оборачиваю их в сетку с помощью других кнопок.

            new JCheckBox() {
            JButton button = new JButton();
            {
                button.setModel(getModel());
            }

            @Override
            protected void paintComponent(Graphics g) {
                if (!button.getSize().equals(getSize())) {
                    button.setSize(getSize());
                }

                button.paint(g);
                super.paintComponent(g);
            }

            @Override
            public void setEnabled(boolean b) {
                super.setEnabled(b);
                button.setEnabled(b);
            }
        };
...