Java GUI构建技巧?

时间:2010-08-10 22:58:39

标签: java user-interface

我正在为某些代码构建Java GUI,我对某些设计方面不太确定。

作为背景 - GUI将仅用于一个活动流

  • 用户加载文件,文件出现在屏幕上,并且每次按下按钮以指示是/否答案后,向用户显示数学变换1,变换2和变换3的效果。

我想知道的是 - 是否可以设计一些硬编码GUI代码,以便在加载文件后,与按钮相关的事件从连接转换1到2更改为3?

这些转换的功能是在另一个Java文件中实现的,我想知道两者之间的分离/通信是如何工作的;或者如果我应该继续使用一个文件来涵盖使用GUI项目执行的数学功能。

如果您认为有任何问题可以帮助您回答这个问题,请随时提出。

2 个答案:

答案 0 :(得分:3)

Model-View-Controller范式进行一些研究;它可能最适合你想要做的事情。

在您当前的设置中,您编写的代码就是模型。它包含适用于您的应用程序的所有“业务逻辑”。您需要编写的是前端,视图和控制器。 Controller充当View和Model之间的中介;当您单击按钮(视图元素)时,关联的按钮处理程序(控制器)将通过调用某个方法委托给模型。例如

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();
  }

}

在小例子中,将View和Controller混合在一起可能很好(视图在这个例子中处理按钮按下)。

就两者之间的沟通而言,我建议您使模型扩展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();
    }

}

答案 1 :(得分:2)

我肯定会将GUI和数学分成不同的类。至于GUI,我建议不要因为让类设计正确而陷入困境,而只是以最简单的方式做到这一点。