java单帧应用程序
我需要创建一个单一窗口,没有任何弹出窗口的应用程序。一切都使用相同的窗口,只改变内容。我将使用swing创建应用程序 我读过,但我认为这不符合我的要求,因为当应用程序增长时,维护起来就更困难了 我想有MVC设计。我正在考虑创建某种控制器堆栈,控制器将在其中加载视图和模型。所以当我需要返回时,只需弹出当前控制器并使用上一个。我的设计可能是错误的,如果有人对如何实现这样的应用程序有任何建议,请随意评论 谢谢你抽出时间 我已经尝试过创建原型类,该类可以容纳一堆容器在它们之间切换java单帧应用程序,java,swing,frame,Java,Swing,Frame,我需要创建一个单一窗口,没有任何弹出窗口的应用程序。一切都使用相同的窗口,只改变内容。我将使用swing创建应用程序 我读过,但我认为这不符合我的要求,因为当应用程序增长时,维护起来就更困难了 我想有MVC设计。我正在考虑创建某种控制器堆栈,控制器将在其中加载视图和模型。所以当我需要返回时,只需弹出当前控制器并使用上一个。我的设计可能是错误的,如果有人对如何实现这样的应用程序有任何建议,请随意评论 谢谢你抽出时间 我已经尝试过创建原型类,该类可以容纳一堆容器在它们之间切换 public clas
public class WindowManager
{
protected Stack<Container> frames;// contains frames stack to navigate
protected JFrame wnd; // frame to show
public WindowManager()
{
this.frames = new Stack<>();
this.wnd = new JFrame();
wnd.setSize(640, 480);
//wnd.setVisible(true);
}
public void addFrame(Container c)
{
this.frames.push(this.wnd.getContentPane());
this.wnd.setContentPane(c);
}
public WindowManager removeFrame()
{
Container c = this.frames.pop();
wnd.setContentPane(c);
return this;
}
public void showWindow()
{
wnd.setVisible(true);
}
公共类窗口管理器
{
受保护的堆栈帧;//包含要导航的堆栈帧
受保护的JFrame wnd;//要显示的帧
公共窗口管理器()
{
this.frames=新堆栈();
this.wnd=新的JFrame();
wnd.setSize(640480);
//wnd.setVisible(真);
}
公共无效添加框架(容器c)
{
this.frames.push(this.wnd.getContentPane());
this.wnd.setContentPane(c);
}
公共WindowManager removeFrame()
{
容器c=this.frames.pop();
wnd.setContentPane(c);
归还这个;
}
公共void showWindow()
{
wnd.setVisible(真);
}
}
取代容器堆栈的是控制器堆栈,它将加载视图和模型。您可能应该创建几个
JPanel
对象并将它们放入CardLayout
,这样一次只能看到一个页面。请参见以下示例:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class CardLayoutExample extends JFrame
{
public CardLayoutExample ()
{
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
getContentPane ().setLayout (new CardLayout ());
getContentPane ().add (new Fruits (), "Fruits");
getContentPane ().add (new Seasons (), "Seasons");
getContentPane ().add (new Colors (), "Colors");
getContentPane ().add (new Towns (), "Towns");
}
public void switchTo (String page)
{
((CardLayout)getContentPane ().getLayout ()).show (getContentPane (), page);
}
public static void main (String [] args)
{
SwingUtilities.invokeLater (new Runnable()
{
@Override
public void run ()
{
CardLayoutExample example = new CardLayoutExample ();
example.pack ();
example.setVisible (true);
}
});
}
private class Colors extends JPanel
{
public Colors ()
{
Box box = Box.createHorizontalBox ();
box.add (new JButton (new AbstractAction("Red")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Fruits");
}
}));
box.add (Box.createHorizontalStrut (8));
box.add (new JButton (new AbstractAction("Green")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Seasons");
}
}));
box.add (Box.createHorizontalStrut (8));
box.add (new JButton (new AbstractAction("Blue")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Towns");
}
}));
setLayout (new BorderLayout ());
add (box, BorderLayout.CENTER);
}
}
private class Fruits extends JPanel
{
public Fruits ()
{
Box box = Box.createVerticalBox ();
box.add (new JButton (new AbstractAction("Apple")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Colors");
}
}));
box.add (Box.createVerticalStrut (8));
box.add (new JButton (new AbstractAction("Orange")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Seasons");
}
}));
box.add (Box.createVerticalStrut (8));
box.add (new JButton (new AbstractAction("Pear")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Towns");
}
}));
setLayout (new BorderLayout ());
add (box, BorderLayout.CENTER);
}
}
private class Seasons extends JPanel
{
public Seasons ()
{
Box box = Box.createHorizontalBox ();
box.add (new JButton (new AbstractAction("Winter")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Colors");
}
}));
box.add (Box.createHorizontalStrut (8));
box.add (new JButton (new AbstractAction("Spring")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Fruits");
}
}));
box.add (Box.createHorizontalStrut (8));
box.add (new JButton (new AbstractAction("Summer")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Towns");
}
}));
setLayout (new BorderLayout ());
add (box, BorderLayout.CENTER);
}
}
private class Towns extends JPanel
{
public Towns ()
{
Box box = Box.createVerticalBox ();
box.add (new JButton (new AbstractAction("Moscow")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Colors");
}
}));
box.add (Box.createVerticalStrut (8));
box.add (new JButton (new AbstractAction("London")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Fruits");
}
}));
box.add (Box.createVerticalStrut (8));
box.add (new JButton (new AbstractAction("Tokyo")
{
@Override
public void actionPerformed (ActionEvent e)
{
switchTo ("Seasons");
}
}));
setLayout (new BorderLayout ());
add (box, BorderLayout.CENTER);
}
}
}
你能告诉我们你尝试过什么吗?你的顶级设计的某些方面可能反映了你的包容层次,但MVC与此是正交的。另见此。