2010-08-10 76 views
2

我正在为一些代码构建Java GUI,并且我对某些设计方面不太确定。Java GUI构建技巧?

作为一些背景 - 该GUI将只对活动

  • 用户加载的文件的一个流中使用,该文件显示在屏幕上,向用户示出的数学变换1,转化的影响2和转换3每按一次按钮指示是/否回答后。

我想知道的是 - 是否可以设计有点硬编码的GUI代码,以便文件加载后,与按钮相关的事件从连接变换(s)1变为2到3 ?

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

请随时提出您认为会帮助您回答此问题的任何问题。

回答

3

做一些研究Model-View-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(); 
    } 

} 

在小例子中,可能很好地让视图和控制器混合在一起(视图处理本例中的按钮按下)。

至于两者之间的沟通,我会建议是,你让你的模型扩展Observable

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

     // Do the transformation 

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

,使观落实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 2010-08-11 00:22:22

2

我肯定会将GUI和数学分为不同的类。至于图形用户界面,我建议不要因为让课堂设计合适而陷入太多困境,而只是尽可能以最简单的方式进行。

+0

疑难杂症。谢谢:) – sparkFinder 2010-08-11 00:22:54