0

我正在使用 JTable 以图形方式显示我正在开发的应用程序的搜索结果。我希望能够在不再需要表时删除它,然后用新创建的表替换它。以下是我当前如何将表添加到我的 JFrame 中:

    userLibrary = new CustomLibrary(users, LIBRARY_WIDTH, LIBRARY_HEIGHT);
    userLibrary.setOpaque(true);
    userLibrary.setBounds(LIBRARY_START_X, LIBRARY_START_Y, LIBRARY_WIDTH, LIBRARY_HEIGHT);
    getContentPane().add(userLibrary);

我的自定义库(扩展 JPanel)执行以下操作:

public CustomLibrary(LinkedList<User> usernames, int width, int height) {
    CustomTable table = new CustomTable(userRows,columnNames);
    table.setPreferredScrollableViewportSize(new Dimension(width, height));
    table.setFillsViewportHeight(true);
    table.setAutoCreateRowSorter(true);
    JScrollPane scrollPane = new JScrollPane(table);

    // Add the scroll pane to this panel.
    add(scrollPane);
}

现在这一切都可以正常工作并显示我的表格,但我无法弄清楚如何从我的内容窗格中完全删除表格。我试过打电话

getContentPane().remove(userLibrary);

但这似乎无济于事。

所以我的一般问题是。创建并绘制表格后,如何从 JFrame 中完全删除表格?

4

2 回答 2

6

我希望能够在不再需要表时删除它,然后用新创建的表替换它。

最简单的方法是只替换 JTable 的 TableModel:

table.setModel( yourNewlyCreatedTableModel );

无需创建 JTable 或 JScrollPane。

于 2013-10-27T20:09:03.627 回答
1

要删除并用另一个组件替换它:

contentPanel.remove(table);
contentPanel.add(component, BorderLayout.CENTER);

添加/删除组件后,您应该执行以下操作:

panel.add(...);
panel.revalidate();
panel.repaint(); // sometimes needed

通常一个 JTable 显示在一个 JScrollPane 中。所以也许更好的解决方案是使用:

scrollPane.setViewportView( anotherComponent );
于 2013-10-27T20:32:26.367 回答