Советы по созданию графического интерфейса Java? - PullRequest
2 голосов
/ 11 августа 2010

Я строю графический интерфейс Java для некоторого кода, и я не совсем уверен в некоторых аспектах дизайна.

В качестве некоторого фона - графический интерфейс будет использоваться только для одного потока активности

  • Пользователь загружает файл, файл появляется на экране, а пользователю показываются эффектыматематическое преобразование 1, преобразование 2 и преобразование 3 каждый раз после нажатия кнопки для обозначения ответа «да / нет».

Что меня интересовало, так это то, что можно ли несколько жестко закодировать код GUI, чтобы после загрузки файла события, связанные с кнопками, изменялись с соединения с преобразованием (ями) 1 наОт 2 до 3?

Функциональность этих преобразований реализована в другом файле Java, и мне было интересно, как бы я мог разделить / связать между ними;или если мне просто нужно пойти дальше и использовать один файл, чтобы охватить обе математические функции, которые должны выполняться с элементами графического интерфейса.

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

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

Проведите некоторое исследование парадигмы Model-View-Controller ;это, вероятно, лучше всего подходит для того, что вы пытаетесь сделать.

В вашей текущей настройке код, который вы написали, является моделью.Он содержит всю «бизнес-логику» для вашего приложения.То, что вам нужно написать, это внешний интерфейс, вид и контроллер.Контроллер выступает в качестве посредника между представлением и моделью;когда вы нажимаете кнопку (элемент представления), соответствующий обработчик кнопки (контроллер) делегирует модели, вызывая некоторый метод.Например,

public class View extends JPanel implements ActionListener {

  JButton transform = new JButton("Transform1");
  Model m;
  public View(Model m) {
       super();
       this.m = m;
       transform.setActionListener(this);
       // lay out the GUI
       setLayout(...);
       add(// whatever view you need to visualize the data);
       add(transform);
  }

  /**
   Make sure all of the GUI elements are correct */
  public void update() {
    State transformState = m.getTransformState();
    transform.setText(transformState.getNextStateDescription());

    // Draw the state of the file they loaded in, probably to another JPanel
  }

  public void actionPerformed(ActionEvent e) {
    m.transform();
  }

}

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

Что касается связи междуВо-вторых, я бы порекомендовал вам сделать так, чтобы ваша модель расширялась Observable

public class Model extends Observable {
    public void transform() {

       // Do the transformation

       // notify the view
       setChanged();
       notifyObservers();
    }
}

и заставить инструмент View Observer

public class View implements ActionListener, Observer {

    public View(Model m) {
            // snip
            m.addObserver(this);
    }

    public void     update(Observable o, Object arg) {
        // Delegate to previously defined method
        update();
    }

}
2 голосов
/ 11 августа 2010

Я бы определенно разделил GUI и математику на разные классы.Что касается графического интерфейса, я бы посоветовал не слишком сильно увязать с правильным дизайном класса, а просто сделать это как можно проще.

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