首页 > 解决方案 > 了解 CardLayout 和面板可见性

问题描述

考虑以下:

    JFrame frame = new JFrame();
    frame.setLayout(new CardLayout());

    JPanel panel1 = new JPanel();
    panel1.setPreferredSize(new Dimension(1000, 1000));
    panel1.setBackground(Color.RED);

    JPanel panel2 = new JPanel();
    panel2.setPreferredSize(new Dimension(100, 100));
    panel2.setBackground(Color.GREEN);

    frame.add(panel1);
    frame.add(panel2);

    frame.pack();
    frame.setVisible(true);

无论如何,帧最终都是 1000x1000。据我了解,使用卡片布局,一次只会显示一个面板 - 因此,如果该面板是 100x100,那么框架也应该是 100x100?但这种情况并非如此。即使框架是绿色的(即显示的是面板 2),框架仍然是 1000x1000。

事实上,即使添加这条线panel1.setVisiblity(false);也不会改变任何东西。它仍然会影响帧大小,使其成为 1000x1000!

我显然误解了卡片布局和框架大小的工作原理。有人可以解决我的困惑吗?

标签: javaswinglayout-managercardlayout

解决方案


据我了解,使用卡片布局,一次只会显示一个面板 - 因此,如果该面板是 100x100,那么框架也应该是 100x100?

不会。ACardLayout将采用其中最宽和最高组件的首选尺寸。


推荐阅读