我使用JTable,根据按下的按钮加载不同的数据。
问题是:当加载其中一个数据时,如果我尝试加载另一个数据,并将鼠标放在标题或单元格上,它会使用第一个输入中的数据更新标题/单元格,如果选择的标题/单元格中有数据。
关于如何解决它的任何想法?这就是我正在使用的代码。
private static void setCompromissosTable(Object[][] data, Object[] header){
try{
compromissosTable.removeAll();
} catch(Exception e){
e.printStackTrace();
}
compromissosTable = new JTable(data, header);
compromissosTable.setRowSelectionAllowed(true);
// Make the entire row selectable, but not editable
int columnMax = compromissosTable.getColumnCount();
for(int column = 0; column < columnMax; column++){
Class<?> col_class = compromissosTable.getColumnClass(column);
compromissosTable.setDefaultEditor(col_class, null);
}
scrollPane = new JScrollPane(compromissosTable);
pane.add(scrollPane);
scrollPane.setBounds(btnAddCompromisso.getX(),
btnAddCompromisso.getHeight() + btnAddCompromisso.getY() + 5
, frame1.getWidth() - 20
, frame1.getHeight() - 20);
compromissosTable.revalidate();
compromissosTable.repaint();
compromissosTable.addMouseListener(new MouseAdapter() {}
//Change mouse behavior.
);
}
答案 0 :(得分:1)
这是可疑的......
compromissosTable = new JTable(data, header);
//...
scrollPane = new JScrollPane(compromissosTable);
pane.add(scrollPane);
基本上,假设每次要切换数据集时,都在调用此方法,每次都要创建一个新的JTable
和JScrollPane
,然后将其添加到UI中。
以前的JTable
怎么样?
接下来就是这个......
scrollPane.setBounds(btnAddCompromisso.getX(),
btnAddCompromisso.getHeight() + btnAddCompromisso.getY() + 5
, frame1.getWidth() - 20
, frame1.getHeight() - 20);
这看起来像是在使用null
布局。基本上它看起来像是什么样的东西,你只是在彼此堆叠JScrollPane
s ontop,这可以部分解释图形故障,因为组件实际上是在同一个z上添加的-deepthness(基本上)并且相互竞争然后更新。
两个简单的答案......
null
布局。当然,他们“看起来”似乎是一个好主意,但他们倾向于以奇怪而奇妙的方式转身并咬你,难以诊断和修复。使用Swing围绕JTable
模型,而不是每次都创建新的JTable
/ JScrollPane
请参阅How to use tables和Laying Out Components Within a Container