Использование свойства Enabled на JButton в netbeans - PullRequest
0 голосов
/ 02 декабря 2011

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

  1. Переменная, чтобы связать его с (saveNeeded в их случае)
  2. Действие для запуска

Я воссоздал оба из них на другой кнопке, но она никогда не сработает.У меня есть операторы печати на 2 других кнопках, которые я использую, чтобы установить переменную, с которой моя кнопка связана с истиной и ложью, чтобы я мог видеть, что значение меняется.Есть ли какой-то важный шаг, который я пропускаю?кажется, что это должно быть довольно просто.

Еще одна вещь, если я вручную изменяю переменную на true в моем конструкторе на true и запускаю приложение, это активирует кнопку, а false отключает ее, чтобы часть работала, только не изменение.

Любая помощь будет признательна, так как я провел последние несколько часов, пытаясь и не могу понять этоСпасибо

1 Ответ

1 голос
/ 02 декабря 2011

Переменную или «свойство» нужно как-то отслеживать, возможно, используя объект PropertyChangeSupport и позволяя другим объектам добавлять к нему PropertyChangeListener, делая его « связанным свойством ». Существует специальная версия этого для приложений Swing, которая заботится о потоке событий Swing, SwingPropertyChangeSupport , и вы можете использовать его.

Редактировать
Вы спросили

Спасибо за ответ, я предполагаю, что это будет то, что firePropertyChange ("saveNeeded",! SaveNeeded, saveNeeded); делает, но что это делает? это просто уведомить программу или мне нужно поймать ручку это где-нибудь. Это основано на предварительно сгенерированном коде, поэтому я не уверен, что он добавил что-то в фоновом режиме.

Классу, который содержит отслеживаемую переменную, потребуется личное поле SwingPropertyChangeSupport. Вы бы предоставили ему открытый метод addPropertyChangeListener, в котором вы позволите другим классам слушать его связанные свойства, что-то вроде этого (если бы это свойство было String):

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.event.SwingPropertyChangeSupport;

public class Foo {
   public static final String MY_BOUND_PROPERTY = "My Bound Property";
   private SwingPropertyChangeSupport spcSupport = new SwingPropertyChangeSupport(
         this);
   private String myBoundProperty;

   public void addPropertyChangeListener(PropertyChangeListener listener) {
      spcSupport.addPropertyChangeListener(listener);
   }

   public void removePropertyChangeListener(PropertyChangeListener listener) {
      spcSupport.removePropertyChangeListener(listener);
   }

   public String getMyBoundProperty() {
      return myBoundProperty;
   }

   public void setMyBoundProperty(String myBoundProperty) {
      Object oldValue = this.myBoundProperty;
      Object newValue = myBoundProperty;

      this.myBoundProperty = myBoundProperty;
      PropertyChangeEvent pcEvent = new PropertyChangeEvent(this,
            MY_BOUND_PROPERTY, oldValue, newValue);
      spcSupport.firePropertyChange(pcEvent);
   }

}

Тогда любой класс, который хотел бы прослушивать изменения, просто добавил PropertyChangeListener к объекту этого класса и реагировал бы на изменения по своему усмотрению.

...