当前位置:  开发笔记 > 编程语言 > 正文

如何动态更改JFrame中的JPanel?

如何解决《如何动态更改JFrame中的JPanel?》经验,为你挑选了5个好方法。

简单来说,有一个简单的java swing应用程序,它由JFrame和其中的一些组件组成.其中一个组件是JPanel,它意味着在用户操作上被另一个JPanel替换.

那么,做这样事情的正确方法是什么?我试过了

panel = new CustomJPanelWithComponentsOnIt();
parentFrameJPanelBelongsTo.pack();

但这不行.你会建议什么?



1> Swapnonil Mu..:

您的用例,对于CardLayout来说似乎很完美.

在卡片布局中,您可以在同一位置添加多个面板,然后一次显示或隐藏一个面板.


使用CardLayout时,请记住,使用它的面板的首选大小将是布局中LARGEST面板的大小.如果要回收空间,则需要使用setVisible(false)和setPreferredSize(new Dimension(0,0))来隐藏组件.

2> Telcontar..:

1)设置第一个面板:

JFrame frame=new JFrame();
frame.getContentPane().add(new JPanel());

2)更换面板:

frame.getContentPane().removeAll();
frame.getContentPane().add(new JPanel());

另请注意,您必须在Event的Thread中执行此操作,以确保使用SwingUtilities.invokeLater或SwingWorker



3> Tom Hawtin -..:
frame.setContentPane(newContents());
frame.revalidate(); // frame.pack() if you want to resize.

请记住,Java使用'按值复制引用'参数传递.因此,更改变量不会更改传递给其他方法的引用的副本.

另外请注意JFrame,在可用性的名称中非常混乱.添加组件或设置布局(通常)会在内容窗格上执行操作.奇怪的是,获得布局确实给你框架的布局管理器.


使用setContentPane()方法时可能会遇到问题.我遇到过所有(自定义)游标在调用之后不再显示的情况.

4> 小智..:

希望这段代码能让您了解如何在JFrame中更改jPanel.

public class PanelTest extends JFrame {

        Container contentPane;

        public PanelTest()  {
           super("Changing JPanel inside a JFrame");
           contentPane=getContentPane();
        }

        public void createChangePanel() {
           contentPane.removeAll();
           JPanel newPanel=new JPanel();
           contentPane.add(newPanel);
           System.out.println("new panel created");//for debugging purposes
           validate();
           setVisible(true);
        }
}



5> ShawnD..:

关于用户操作:

//你必须做一些事情

myJFrame.getContentPane().removeAll()
myJFrame.getContentPane().invalidate()

myJFrame.getContentPane().add(newContentPanel)
myJFrame.getContentPane().revalidate()

然后你可以根据需要调整你的wndow.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有