调整jpanels大小时调整大小的窗口



我在Java中有一个应用程序,其中有2个Jpanels在Jframe内部的分层台式。我希望在调整窗框大小时,所有面板都会调整Althougth的组件大小。这是我的调整大小功能的代码:

 mainFrame.addComponentListener(new ComponentListener() {
        @Override
        public void componentShown(ComponentEvent e) {
            // TODO Auto-generated method stub
        }
        @Override
        public void componentResized(ComponentEvent e) {
            // Resize components of JFrame to fit new size
            int width = e.getComponent().getWidth();
            int height = e.getComponent().getHeight();
            if(containerJPanel != null) {
                containerJPanel.setBounds(0, 0, 
                        width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT);
                containerJPanel.setPreferredSize(new Dimension(width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT));
            }

            if(mainJPanel != null) {
                mainJPanel.setBounds(0, 0, 
                        width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT);
                mainJPanel.setPreferredSize(new Dimension(width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT));
            }

            if(loadingPanel != null) {
                loadingPanel.setBounds(0, 0, 
                        width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT);
                loadingPanel.setPreferredSize(new Dimension(width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT));
            }
        }
        @Override
        public void componentMoved(ComponentEvent e) {
            // TODO Auto-generated method stub
        }
        @Override
        public void componentHidden(ComponentEvent e) {
            // TODO Auto-generated method stub
        }
    });

这是变量定义:

 /** Main frame **/
 mainFrame = new JFrame();
 mainFrame.setBounds(100,100,DEFAULT_WINDOW_WIDTH,DEFAULT_WINDOW_HEIGHT);
 mainFrame.setPreferredSize(new Dimension(DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT));
 mainFrame.getContentPane().setLayout(new BorderLayout(0, 0));
 containerJPanel = new JLayeredPane();

 mainFrame.getContentPane().add(containerJPanel, BorderLayout.CENTER);
 containerJPanel.setBounds(0,0,
                    DEFAULT_WINDOW_WIDTH-DEFAULT_PANEL_MINUS_WITDH, DEFAULT_WINDOW_HEIGHT-DEFAULT_PANEL_MINUS_HEIGHT);

 /** Main Panel **/
 mainJPanel = new JPanel();
 mainJPanel.setBounds(0,0,
                    DEFAULT_WINDOW_WIDTH-DEFAULT_PANEL_MINUS_WITDH, DEFAULT_WINDOW_HEIGHT-DEFAULT_PANEL_MINUS_HEIGHT);
 containerJPanel.add(mainJPanel, new Integer(0), 0);
 /** Loading Panel **/
 loadingPanel = new JPanel();
 containerJPanel.add(loadingPanel, new Integer(1), 0);
 loadingPanel.setBounds(0,0,
                    DEFAULT_WINDOW_WIDTH-DEFAULT_PANEL_MINUS_WITDH, DEFAULT_WINDOW_HEIGHT-DEFAULT_PANEL_MINUS_HEIGHT);
 loadingPanel.setLayout(new BorderLayout(0, 0));
 loadingPanel.setOpaque(false);

重点是要有两个面板,因此一次可见。我确定我做错了什么,但我无法意识到!感谢您的帮助。

正如c0der所说:请参见使用cardlayout的示例。

我的解决方案差但有效的解决方案:在我的动作范围内(由javax.swing.timer.timer.timer)在ms-中延迟时,我使用this.remove(paneltoreFresh)将界限更改为新的窗口界限,并将其更改为add(paneltorefresh)这对您的计算机有些费用,但令人惊讶的是不会闪烁太多计时器

gameTime = new Timer(120, this);
gameTime.start();
最小代码在Action Performed

this.remove(backGround);
backGround.setSize(this.getWidth(), this.getHeight() + getInsets().top - getInsets().bottom);
this.add(backGround);

最新更新