【发布时间】:2023-03-19 12:51:01
【问题描述】:
我正在尝试将 JTable 放入 JScrollPane 中,该 JScrollPane 位于设置为 MigLayout 的 JPanel 内。
当我插入表格时,我遇到了一些问题:
- 在列标题中添加到 JScrollPane 的标签总是丢失
- 表格对于几行来说太大了
这是一张不言自明的图片:
这里是我使用的简单代码:
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new MigLayout("", "[grow]", "[grow][grow]"));
JPanel oh_Panel = new JPanel();
frame.getContentPane().add(oh_Panel, "cell 0 0,grow");
oh_Panel.setLayout(new MigLayout("", "[grow]", "[grow]"));
JScrollPane oh_scrollPane = new JScrollPane();
oh_Panel.add(oh_scrollPane, "cell 0 0,grow");
JTree oh_tree = new JTree();
oh_scrollPane.setViewportView(oh_tree);
JLabel oh_label = new JLabel("MyLabel");
oh_label.setHorizontalAlignment(SwingConstants.CENTER);
oh_scrollPane.setColumnHeaderView(oh_label);
JPanel panel = new JPanel();
frame.getContentPane().add(panel, "cell 0 1,grow");
panel.setLayout(new MigLayout("", "[grow]", "[grow][]"));
JScrollPane scrollPane = new JScrollPane();
panel.add(scrollPane, "cell 0 0,grow");
table = new JTable(createTable());
//table.setPreferredScrollableViewportSize(null);
//table.setPreferredScrollableViewportSize(table.getPreferredSize());
scrollPane.setViewportView(table);
JLabel labelForTable = new JLabel("MyLabelForTable");
scrollPane.setColumnHeaderView(labelForTable);
}
private DefaultTableModel createTable() {
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Property");
model.addColumn("Value");
model.addRow(new String[]{"Name", "John"});
model.addRow(new String[]{"Surname", "Red"});
return model;
}
然后,我还尝试了我在其他问题中读到的解决方案,涉及:
table.setPreferredScrollableViewportSize(null); AND/OR
table.setPreferredScrollableViewportSize(table.getPreferredSize());
结果总是这样:
我什至尝试将 MigLayout 更改为 BorderLayout,但没有任何改变。
我错过了什么吗?
【问题讨论】:
-
为了进行实验,将 JScrollPane 和 JTable 的背景颜色设置为不同的颜色。我是
new JScrollPane(table)类型的编码员,但应该是一样的。您可能需要使用表格大小作为滚动窗格的大小。 -
既然您确定在使用 MigLayout 或 BorderLayout 时遇到同样的问题,那么您发布的代码应该是 BorderLayout 版本,因为 MigLayout 是第三部分类。问题应该首先通过使用JDK的类来解决,以确保问题不在其他类。
-
发布minimal reproducible example 来证明问题。
标签: java swing jtable jscrollpane miglayout