java - 如何替换 JScrollPane 子组件

标签 java swing jtable jscrollpane

我有一个 JPanel,其中包含一个包含 JTable 的 JScrollPane。在我的面板构造函数中,它是这样创建的:

    //inside MyPanel extends JPanel class constructor
public void MyPanel(){
    TitledBorder border = BorderFactory.createTitledBorder("title");
    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    this.scrollTable = new JScrollPane(table);
    this.scrollTable.setBorder(border);
}

现在,用户应该能够将另一个表加载到应用程序中,因此我需要从滚动 Pane 中删除前一个表并添加一个新表。 我试过以下方法:

public void setNewTable(JTable t ) {
    this.scrollTable.removeAll();
    this.scrollTable.add(t);
    this.scrollTable.validate();

}

之前的表格被移除了,但是现在 JScrollPane 里面什么也没有发生。

我做错了什么?

公共(public)无效

最佳答案

您不能只添加到 JScrollPane,因为它由其他内部组件组成。

来自JavaDocs :

enter image description here

实际上,通过调用 scrollPane.removeAll(),您删除了标题、 View 和滚动条,并添加了滚动 Pane 无法识别的组件。

首先,您通常不应该以这种方式传递表格。传递一个 TableModel 会好得多,并通过 JTable.setModel() 更改表上的模型。

也就是说,如果你绝对想传入一个表格,你需要在滚动面板的视口(viewport)上设置 View :

scrollPane.getViewport().setView(table)

关于java - 如何替换 JScrollPane 子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617316/

相关文章:

java - 优化 BerkeleyDB JE 数据库

java - JButton 保持按下状态

java - 调用 SwingUtilities.invokeAndWait() 时创建的新线程?

java - ArrayIndexOutOfBoundsException 将 JTable 数据插入 SQL 数据库

java - 如何从主题中删除消息

java - c3p0 数据库池错误

java - JTable 卡住列对齐问题(Java 1.6)

java - 概率单元格编辑器

java - spring-security-oauth中的JdbcApprovalStore(ApprovalStore)有什么用?

java - 我认为我需要添加一个按键监听器