java - 了解 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!
我显然误解了卡片布局和框架大小的工作原理。有人可以解决我的困惑吗?
解决方案
据我了解,使用卡片布局,一次只会显示一个面板 - 因此,如果该面板是 100x100,那么框架也应该是 100x100?
不会。ACardLayout
将采用其中最宽和最高组件的首选尺寸。
推荐阅读
- c# - 大量的Task.Delay会不会导致性能问题
- node.js - 在 node.js 的生产服务器上获取 502 Bad Gateway
- canvas - 使用 PyX,如何设置画布的大小?
- azure - 哪些 Azure 应用服务可以在同一个应用服务计划上运行?
- laravel - Laravel 站点在重新安装供应商后停止工作
- java - 使用 javaMail 在 Java 11 中发送电子邮件时出错 - java.lang.module.ResolutionException:
- sql-server - 选择以逗号分隔的摘要计数?
- sql-server - ADO 不传递第一个参数值
- fabricjs - Fabricjs - 仅通过边框选择
- r - 如果文本包含 r 中的特定字符,则替换为新字符串