在Jframe中使用menuItem切换jpanel

时间:2013-06-03 06:52:58

标签: java swing jframe jpanel

我想知道如何在我的主JFrame中切换JPanels,我已经尝试过这段代码但是当我点击菜单项时它会改变然后我点击其他菜单项并且不会改变,我点击菜单项我先点击它改变....还有其他方法我可以轻松切换jpanels?不要给我看看cardLayout废话,因为它不适用于我需要的东西,似乎谷歌上的每个答案都涉及到这个演示,无论如何有一个简单的做事方式,如果有人帮助我指出正确的话我很感激方向谢谢。

menuItem.addActionListener( new ActionListener() {

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

2 个答案:

答案 0 :(得分:4)

有两种方式

  1. 删除(JFrame.getContentPane.removeAll())并将JPanel添加到JFrame,在对已经可见的Swing GUI进行所有更改后调用JFrame.(re)validateJFrame.repaint所需完成,一次,最后一行代码

  2. (更好,更正,更正确)使用CardLayout,官方Oracle教程中的代码示例,这里有一些好的,一些优秀的例子

答案 1 :(得分: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的类。它可能不是您正在寻找的,但它实际上是一个窗格,其上有多个标签,用户可以单击并切换视图。

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