了解CardLayout和面板可见性

问题描述 投票:0回答:1

考虑以下:

    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!

我显然误解了卡片布局和框架尺寸的工作原理。有人能解决我的困惑吗?

java swing layout-manager cardlayout
1个回答
1
投票

我的理解是,使用卡布局,一次只显示一个面板 - 因此如果该面板是100x100,框架也应该是100x100?

没有。一个CardLayout将采用其中最宽和最高组件的首选尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.