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