1

単一のウィンドウでポップアップのないアプリケーションを作成する必要があります。すべてが同じウィンドウを使用して機能し、コンテンツを変更するだけです。私はswingを使ってアプリケーションを作成しようとしています。

Java: single frame vs multiple framesを読みましたが、アプリケーションが大きくなると維持が難しくなるため、それが私の要件に合わないと思います。

MVCのデザインをお願いしたいです。コントローラーがビューとモデルをロードする、ある種のコントローラーのスタックを作成することを考えています。したがって、戻る必要がある場合は、現在のコントローラーをポップして前のコントローラーを使用するだけです。私は自分の設計について間違っている可能性があります。そのようなアプリケーションを実装する方法について提案がある場合は、コメントしてください。

御時間ありがとうございます。

切り替えるコンテナのスタックを保持するプロトタイプクラスを作成しようとしました。

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

}

コンテナー スタックの代わりに、ビューとモデルをロードするコントローラー スタックがあります。

4

1 に答える 1

2

一度に 1 ページだけが表示されるように、複数の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);
        }
    }
}
于 2013-02-17T17:17:38.573 に答える