2010-08-10 3 views
2

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

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

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

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

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

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

ответ

3

Проведите некоторое исследование парадигмы 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(); 
    } 

} 
+0

Это выглядит довольно многообещающе, я рассмотрю его. – sparkFinder

2

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

+0

Попался. Спасибо :) – sparkFinder

Смежные вопросы