【问题标题】:Removing JTable from content panel从内容面板中删除 JTable
【发布时间】:2013-10-27 20:07:42
【问题描述】:

我正在使用 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 中完全删除表格?

【问题讨论】:

    标签: java swing jtable jframe


    【解决方案1】:

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

    最简单的方法就是直接替换JTable的TableModel:

    table.setModel( yourNewlyCreatedTableModel );
    

    无需创建 JTable 或 JScrollPane。

    【讨论】:

      【解决方案2】:

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

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

      添加/删除组件后,您应该这样做:

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

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

      scrollPane.setViewportView( anotherComponent );
      

      【讨论】:

      • 即使它回答了这个问题,它也是一个“错误的问题”。 camickr 概述了更好的(到目前为止)方法。
      猜你喜欢
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多