Следите за Swing GUI "текущее состояние" - PullRequest
1 голос
/ 01 марта 2011

Извините, название нечеткое, но я действительно не могу придумать подходящее название.

Я разрабатываю свое первое приложение с помощью Swing, и мне трудно понять, как отслеживать текущее представление приложения. Я имею в виду с текущим видом, например, если кнопка уже была нажата. Например, вы не должны нажимать «Выполнить» до того, как файл был загружен. Я придумал архитектурное решение этой проблемы, которое было бы действительно дерьмовым, и я хотел бы получить советы о том, как его улучшить.

У меня есть ярлык с именем infoText, и он обновляется почти каждый раз, когда я нажимаю кнопку. Благодаря этому я слежу за состоянием приложений следующим пугающим способом:

if (infoText == LOADING_NARROW){
                    printSelected(narrow_list);
                }else{
                    printSelected(list);
                }

Ответы [ 3 ]

4 голосов
/ 01 марта 2011

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

Просто сохраните boolean loadingNarrow в этом случае, к которому вы обращаетесь и обновляете при необходимости.

Кроме того, если вы выполняете большую загрузку в результате нажатия кнопки и не хотите, чтобы пользователь нажимал ее снова, вы можете отключить кнопку после начала загрузки и включить ее позже.(Обратите внимание, я предполагаю, что вы запускаете загрузку в отдельном потоке, чтобы графический интерфейс не зависал).

2 голосов
/ 01 марта 2011

Компоненты Swing отслеживают свои собственные состояния.

Мой совет:

  • Запуск приложения в состояние по умолчанию.
  • Настройте параметры в зависимости от события. Например, когда нажимается JButton A, включите JButton B и C и установите JTextField.
  • Проверьте состояния объектов с помощью встроенных методов. пример if((jButtonA.isEnabled() && jTextField.getText().equals("foobar"))

Вы также можете использовать шаблон посредника для группировки связанных компонентов и их действий.

0 голосов
/ 01 марта 2011

Первый: это разные методы или ошибка копирования-вставки?

      printSelecteds (narrow_list);
      printSelected (list);

Второй: чтобы отключить кнопку, которую вы обычно используете:

ok.setEnabled (false);

Если файл загружен, вы звоните

ok.setEnabled (true);

, чтобы включить кнопку «ОК». * * 1010

Я не вижу, как это связано с вашим информационным текстом и вашим методом printSelected (s). Если вы передадите состояние через графический интерфейс, вы можете потерять одно или другое из-за условий гонки. Изменение метки может быть поглотителем изменения состояния.

Вы можете иметь взаимоисключающие битовые комбинации для разрешения помех:

FILE_OPEN = 1;
SEARCHED = 2;
FRIDAY = 4; 

чтобы добавить их поразрядно:

state |= FRIDAY

чтобы задать их в двоичном порядке:

if (state | FILE_OPEN) ....

Это не выглядит очень элегантно для меня. Думаю, я не уверен, в чем твоя проблема. :) Чтобы запустить действие, если какая-то кнопка нажата, вы должны реализовать actionListener, который также может изменить вашу метку. Но свинг Eventloop уже проверит состояние ваших компонентов. Вы, кажется, частично дублируете работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...