0

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

menuItem.addActionListener( new ActionListener() {

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

2 回答 2

4

有两种方法

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

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

于 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 的类。它可能不是您想要的,但它本质上是一个窗格,上面有多个选项卡,用户可以单击并切换视图。

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 回答