0

メインの JFrame 内で JPanels を切り替える方法を知りたいのですが、このコードを試してみましたが、メニュー項目をクリックすると変更され、他のメニュー項目をクリックしても変更されず、最初にクリックしたメニュー項目をクリックすると変更されます....jpanels を簡単に切り替えられる他の方法はありますか? 私が必要としているもので動作しないため、cardLayoutのがらくたを表示しないでください.Googleのすべての回答にはそのデモが含まれているようです.方向ありがとう。

menuItem.addActionListener( new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            mainPane.remove(getContentPane());
            mainPane.add(cdPanel, BorderLayout.CENTER);
            mainPane.validate();
        }
    });
4

2 に答える 2

4

2つの方法があります

  1. ( ) を削除JFrame.getContentPane.removeAll()して に追加JPanelJFrame、呼び出す必要がJFrame.(re)validateありJFrame.repaint、既に表示されている Swing GUI へのすべての変更が完了したら、一度、最後のコード行

  2. (より良い、正しい、適切な方法)CardLayoutを使用してください、公式のOracleチュートリアルのコード例、いくつかの優れた例、ここにいくつかの優れた例

于 2013-06-03T06:59:35.147 に答える
0

編集されたコード:

public static void main(String[] args) 
{
    // TODO code application logic here

    JFrame frame = new JFrame();
    frame.setSize( 300, 300);
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

    JPanel panelOne = new JPanel();
    panelOne.setBackground( Color.red );

    JPanel panelTwo = new JPanel();
    panelTwo.setBackground(Color.blue);

    frame.setContentPane( panelOne );
    frame.setVisible(true);

    //This delay is just here so you can see the transition
    try 
    {
        Thread.sleep( 1000 );
    }
    catch ( InterruptedException ie )
    {
        ie.printStackTrace();
    }

    panelTwo.setSize( frame.getContentPane().getSize() );
    frame.setContentPane( panelTwo );

}

JTabbedPane というクラスがあることを指摘しておきます。探しているものではないかもしれませんが、基本的には 1 つのペインであり、ユーザーがクリックしてビューを切り替えることができる複数のタブがあります。

http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html http://docs.oracle.com/javase/6/docs/api/javax/swing/JTabbedPane.html

于 2013-06-03T07:07:54.833 に答える