gpt4 book ai didi

Java Swing - 如何使用 MigLayout 将 JTable 放入 JScrollPane 中而不出现问题?

转载 作者:行者123 更新时间:2023-12-02 00:49:57 24 4
gpt4 key购买 nike

我试图将 JTable 放入 JScrollPane 中,该 JScrollPane 位于设置为 MigLayout 的 JPanel 中。

当我插入表格时,我遇到了一些问题:

  1. 添加到 JScrollPane 列标题中的标签始终丢失
  2. 表格对于几行来说太大了

这是一个不言自明的图片:

enter image description here

这是我使用的简单代码:

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());

结果总是这样:

enter image description here

我什至尝试将 MigLayout 更改为 BorderLayout,但没有任何改变。

我错过了什么吗?

最佳答案

这与所涉及的布局管理器无关。它与 JTable 和 JScrollPane 之间的交互有关。

JTable 添加到 JScrollPane 的视口(viewport)时,JTableJTableHeader 为用作滚动 Pane 的列标题。但是,直到框架变得可显示后,才会设置列标题。也就是说,它是在您在框架上调用 pack() 或 setVisible(true) 之后添加的。因此您设置列标题的尝试将被覆盖。

如果您想使用自己的列标题,那么最简单的方法是使用两个组件创建您自己的面板:

JLabel labelForTable = new JLabel("MyLabelForTable");
JTable table = new JTable(3, 2);
JPanel tableWrapper = new JPanel( new BorderLayout() );
tableWrapper.add(labelForTable, BorderLayout.PAGE_START);
tableWrapper.add(table, BorderLayout.CENTER);
JScrollPane scrollPane = new JScrollPane( tableWrapper );

关于Java Swing - 如何使用 MigLayout 将 JTable 放入 JScrollPane 中而不出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57868081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com