You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:向JFrame添加两个JTable仅显示一个的问题

问题原因

JFrame默认使用BorderLayout布局,当你直接调用f.add(listPahel)和f.add(listPahel2)时,没有指定布局位置,两个组件都会被默认添加到BorderLayout.CENTER区域——这个区域只能容纳一个组件,后添加的listPahel2会覆盖掉之前的listPahel,所以最终只显示第二个表格。

解决方法

你需要用合适的布局管理器来容纳两个面板,让它们同时显示。下面提供两种简单的实现方式:

方式一:用BoxLayout垂直排列两个表格

创建一个主面板,设置垂直方向的BoxLayout,把两个表格所在的面板都加到这个主面板里,再把主面板添加到JFrame中:

private JFrame f = new JFrame("List of cars");
f.setSize(700, 600);

// 第一个表格
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
model.addColumn("GROUP 1");
table.setPreferredScrollableViewportSize(new Dimension(300, 200)); // 调整合适的显示大小
JScrollPane jScrollPane1 = new JScrollPane(table);
JPanel listPahel = new JPanel(new BorderLayout());
listPahel.add(jScrollPane1, BorderLayout.CENTER);
listPahel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // 缩小边框间距,避免挤压表格

// 第二个表格
DefaultTableModel model2 = new DefaultTableModel();
JTable table2 = new JTable(model2);
model2.addColumn("GROUP 2");
table2.setPreferredScrollableViewportSize(new Dimension(300, 200));
JScrollPane jScrollPane2 = new JScrollPane(table2);
JPanel listPahel2 = new JPanel(new BorderLayout());
listPahel2.add(jScrollPane2, BorderLayout.CENTER);
listPahel2.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

// 主面板,垂直排列两个表格面板
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.add(listPahel);
mainPanel.add(listPahel2);

f.add(mainPanel); // 把主面板加到JFrame
f.setVisible(true);

方式二:用GridLayout分两行显示

直接给JFrame设置GridLayout,分成两行一列,分别添加两个面板:

private JFrame f = new JFrame("List of cars");
f.setSize(700, 600);
f.setLayout(new GridLayout(2, 1)); // 设置两行一列的网格布局

// 第一个表格(代码和上面一致,调整边框和大小)
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
model.addColumn("GROUP 1");
table.setPreferredScrollableViewportSize(new Dimension(300, 200));
JScrollPane jScrollPane1 = new JScrollPane(table);
JPanel listPahel = new JPanel(new BorderLayout());
listPahel.add(jScrollPane1, BorderLayout.CENTER);
listPahel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

// 第二个表格
DefaultTableModel model2 = new DefaultTableModel();
JTable table2 = new JTable(model2);
model2.addColumn("GROUP 2");
table2.setPreferredScrollableViewportSize(new Dimension(300, 200));
JScrollPane jScrollPane2 = new JScrollPane(table2);
JPanel listPahel2 = new JPanel(new BorderLayout());
listPahel2.add(jScrollPane2, BorderLayout.CENTER);
listPahel2.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

// 直接添加到JFrame,GridLayout会自动分配位置
f.add(listPahel);
f.add(listPahel2);

f.setVisible(true);

另外注意:你之前设置的EmptyBorder参数过大(比如500的右边框),会把表格挤压到几乎看不见,建议调整成合理的间距值,比如10。

内容的提问来源于stack exchange,提问作者Max_insane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:31:02