2013-06-03 61 views
0

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

menuItem.addActionListener(new ActionListener() { 

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

回答

4

有两种方式

  1. 删除(JFrame.getContentPane.removeAll()),并添加JPanelJFrame,打电话JFrame.(re)validateJFrame.repaint所有更改后,需要对已经可见的Swing GUI完成,一旦时间,上次码行

  2. (更好,正确,适当的方法)使用CardLayout,在Oracle官方教程中的代码示例,几个很好的,一些优秀的例子在这里

+0

一把手是有益的感谢我也有一个JLabel上的JFrame当我第一次加载的应用程序现在当我改变jpanels它消失了,我猜是因为的removeAll(的)有没有只是把它留在那里?我把jlabel作为'mainPane.add(lblWelcome,BorderLayout.SOUTH);'我会继续努力,谢谢(: –

+0

一定要使用JFrame.getContentPane.removeAll(),否则你可以在烦恼, – mKorbel

+0

因为JFrame是在我使用的类之外​​声明我只是使用getContentPane()本身,它似乎工作 –

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

+0

感谢您的链接,我会看看如果我这样做的话,它会留在我分配给它的第一个jpanel中 –

+0

我看到你在说什么,我测试了一下,注意到前面的代码在重新调整JFrame的大小时,它只显示第二个内容窗格,尝试重新绘制,然后发现内容窗格设置的大小为零,我更新了代码以解决这个问题。 – ManEatingCheese