简体   繁体   English

在JFrame中调整JPanel的大小

[英]Resize JPanel in JFrame

I have 4 panels which are added to a frame. 我有4个面板添加到框架中。 JFrame is set to GridLayout JFrame设置为GridLayout

setLayout(new GridLayout(2, 2));
add(panel1);
add(panel2);
add(panel3);
add(panel4);

When I click on a panel, I want this panel is zoom out and fit to frame's size. 当我单击面板时,我希望该面板缩小并适合框架的尺寸。

    getContentPane().removeAll();
    setLayout(new BorderLayout());
    panel1.setPreferredSize(new Dimension(getWidth(), getHeight()));
    add(panel1, BorderLayout.CENTER);
    revalidate();
   repaint();

But It didn't work. 但这没有用。 I think that I cannot set BorderLayout for this frame, it is still GridLayout. 我认为我不能为此框架设置BorderLayout,它仍然是GridLayout。 How can I repair it? 我该如何修理? Thanks 谢谢

When I click on a panel, I want this panel is zoom out and fit to frame's size.

direct answer to the question 直接回答问题

在此处输入图片说明

.

在此处输入图片说明

.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;


public class SwitchLayoutManager {

    private JFrame frame = new JFrame();
    private JPanel panel1 = new JPanel() {
        private static final long serialVersionUID = 1L;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(100, 50);
        }

        @Override
        public Border getBorder() {
            return new LineBorder(Color.BLACK, 1);
        }
    };
    private JPanel panel2 = new JPanel() {
        private static final long serialVersionUID = 1L;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(100, 50);
        }

        @Override
        public Border getBorder() {
            return new LineBorder(Color.RED, 1);
        }
    };
    private JPanel panel3 = new JPanel() {
        private static final long serialVersionUID = 1L;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(100, 50);
        }

        @Override
        public Border getBorder() {
            return new LineBorder(Color.BLUE, 1);
        }
    };
    private JPanel panel4 = new JPanel() {
        private static final long serialVersionUID = 1L;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(100, 50);
        }

        @Override
        public Border getBorder() {
            return new LineBorder(Color.ORANGE, 1);
        }
    };
    private JPanel panel5 = new JPanel() {
        private static final long serialVersionUID = 1L;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        public Border getBorder() {
            return new LineBorder(Color.GREEN, 1);
        }
    };
    private GridLayout gridLayout = new GridLayout(2, 2);
    private BorderLayout borderLayout = new BorderLayout();

    public SwitchLayoutManager() {
        frame.setLayout(gridLayout);
        frame.add(panel1);
        frame.add(panel2);
        frame.add(panel3);
        frame.add(panel4);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
        Timer t = new Timer(2500, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (frame.getContentPane().getLayout() == borderLayout) {
                    frame.getContentPane().removeAll();
                    frame.setLayout(gridLayout);
                    frame.add(panel1);
                    frame.add(panel2);
                    frame.add(panel3);
                    frame.add(panel4);
                    frame.pack();
                    //frame.revalidate();
                    //frame.repaint();
                } else if (frame.getContentPane().getLayout() == gridLayout) {
                    frame.getContentPane().removeAll();
                    frame.setLayout(borderLayout);
                    frame.add(panel5);
                    frame.pack();
                    //frame.revalidate();
                    //frame.repaint();
                }
            }
        });
        t.setInitialDelay(2500);
        t.setRepeats(true);
        t.start();
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new SwitchLayoutManager();
            }
        });
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM