我有一个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);
}
现在,用户应该能够将另一个表加载到应用程序中,因此我需要从滚动窗格中删除前一个表并添加一个新表。 我尝试了以下内容:
public void setNewTable(JTable t ) {
this.scrollTable.removeAll();
this.scrollTable.add(t);
this.scrollTable.validate();
}
删除了上一个表,但现在JScrollPane中没有任何内容发生。
我做错了什么?
public void
答案 0 :(得分:5)
您不能只添加到JScrollPane,因为它包含其他内部组件。
来自JavaDocs:
通过调用scrollPane.removeAll()实际上,删除标题,视图和滚动条,并添加滚动窗格不理解的组件。
首先,您通常不应该以这种方式传递表格。最好传入TableModel,并通过JTable.setModel()更改表上的模型。
那就是说,如果你绝对想传入一个表,你需要在滚动窗格中的视口上设置视图:
scrollPane.getViewport().setView(table)