【发布时间】:2013-06-15 02:49:28
【问题描述】:
同事。
我正在尝试用 Java 构建简单的 GUI,其中 JFrame 具有边框布局。我想把带有 JTable 的 JScrollPane 放到 CENTER,把没有布局的 JPanel 放到 NORTH。
问题是 JPanel 不可见。有一个简单的问题示例:
JFrame frame = new JFrame("Test frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("Test button");
button.setBounds(10, 10, 40, 20);
JPanel panelN = new JPanel(null); // layout = null, panelN without layout
panelN.add(button);
frame.add(panelN, BorderLayout.NORTH);
JTable table = new JTable(new DefaultTableModel(4, 4));
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(400, 400);
frame.setVisible(true);
【问题讨论】:
-
在面板中使用 layoutManager
-
@dumas45,没有充分的理由使用空布局。按照设计使用的方式使用 Swing,并使用布局管理器。
-
问题是,在布局管理器中,父容器不知道子面板的大小,所以它的大小为 0x0,这是一个组件的默认大小
-
我发现 setPreferredSize 方法有帮助并且面板变得可见。如果我在创建 GUI 之前使用
JFrame.setDefaultLookAndFeelDecorated(true);,我希望 GUI 在 Linux、Windows 和其他操作系统上也一样。不是吗?
标签: java swing layout border-layout absolutelayout