JButton обновляет собственное значение isEnabled - PullRequest
1 голос
/ 09 августа 2010

Я пытаюсь создать подкласс компонента JButton, который будет активировать или деактивировать себя в зависимости от условия (как показано ниже)

public interface Condition {
    public static final Condition TRUE  = new Condition() { 
                                          public boolean test() {
                                              return true;
                                          } };
    public static final Condition FALSE = new Condition() { 
                                          public boolean test() {
                                              return false;
                                          } };
    public boolean test();
}

Однако код JButton полностью основан нана фактическое логическое значение, хранящееся в частном порядке в классе JButton.Мой вопрос: какой метод JButton может быть переопределен для обновления его сохраненного логического значения isEnabled (через setEnabled (логическое))?Будет ли обновление (Графика)?или перекрасить ()?ИЛИ какая-нибудь другая функция?

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

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Я настоятельно рекомендую использовать Действия для реализации такой функции.

Вы должны включить / отключить действие, прикрепленное к вашей кнопке. В Swing одно и то же действие может быть связано со многими типами компонентов, такими как кнопки, пункты меню и т. Д. Отключив определенное действие, вы автоматически отключите все связанные компоненты.

Это становится очень удобным, когда у вас есть панели инструментов, контекстные меню и т. Д. С одинаковым набором действий.

1 голос
/ 09 августа 2010

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

Приложение: В качестве альтернативы и, как отмечено в статье Привязки клавиш , "Другое преимущество Actions заключается в том, что они имеют включенное состояние, которое обеспечивает простой способ отключить действие, не отслеживая, к какому компоненту оно подключено. "Подробнее см. Как использовать действия .

...