如何将窗口底部的滚动条移至JTable正下方?
解决JScrollPane滚动条未置于JTable正下方的问题
我来帮你搞定这个滚动条位置不对的问题!你遇到的情况是因为JFrame默认使用BorderLayout布局,当你直接把JScrollPane添加到窗口的CENTER区域时,布局管理器会把JScrollPane拉伸至填满整个窗口,导致滚动条贴在窗口底部,而不是紧跟在JTable的下方。
这里有两种简单的修复方案:
方案一:改用FlowLayout布局
把JFrame的布局改成FlowLayout,这样JScrollPane会保持自身的首选大小,滚动条就会乖乖待在JTable正下方了:
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import java.awt.FlowLayout; public class Test { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setLayout(new FlowLayout()); // 设置FlowLayout布局 frame.setSize(400, 300); JTable table = new JTable(10, 20); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane scrollPane = new JScrollPane(table); frame.add(scrollPane); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 加上关闭窗口时退出程序的逻辑 frame.setVisible(true); } }
方案二:用JPanel包裹JScrollPane
如果需要保留BorderLayout,可以把JScrollPane放到一个JPanel里,再把JPanel添加到窗口中,这样JPanel会自适应JScrollPane的大小,避免滚动条被拉伸到窗口底部:
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JPanel; import java.awt.BorderLayout; public class Test { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(400, 300); JPanel panel = new JPanel(); // 创建JPanel作为容器 JTable table = new JTable(10, 20); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane scrollPane = new JScrollPane(table); panel.add(scrollPane); frame.add(panel, BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
另外还有个小技巧:如果你不需要固定窗口大小,可以去掉frame.setSize(400,300),改用frame.pack(),这样窗口会自动调整到刚好适配组件的大小,滚动条自然就会出现在JTable的正下方啦。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

