我想知道在用户更改列宽后如何获取它,以便我可以将其保存下来。
在搞乱之后,我想出了这种方法,但这并不完美。如果用户实际上没有通过单击列中的某一行来选择列,则所选列为-1,因此会引发错误,因此我使用if语句来防止这种情况。
下一个问题是,如果我选择一列然后更改宽度,它会在我更改列时起作用并打印出宽度,但是如果我选择说第3列,然后继续更改第2列宽度而不在行中选择在第2列中,当我更改第2列时,它将继续吐出第3列的宽度。因此,使用select方法可以按预期方式工作,但是必须有一种更好的方法来获得第i列的宽度改变。
有什么想法吗?
jt.getColumnModel().addColumnModelListener(new TableColumnModelListener() {
public void columnAdded(TableColumnModelEvent e) {
// TODO Auto-generated method stub
}
public void columnRemoved(TableColumnModelEvent e) {
// TODO Auto-generated method stub
}
public void columnMoved(TableColumnModelEvent e) {
// TODO Auto-generated method stub
}
public void columnMarginChanged(ChangeEvent e) {
int col = jt.getSelectedColumn();
if (col >= 0) {
TableColumn tc = jt.getColumnModel().getColumn(col);
System.out.println(tc.getWidth());
}
}
public void columnSelectionChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub
}
});
答案 0 :(得分:0)
您可以尝试将[0.99 , 0.67, 0.54]
的源转换为ChangeEvent
。
有空的时候,在TableColumn
中尝试以下操作...
TableColumnModelListener
答案 1 :(得分:0)
一段时间后,我设法找到了解决方案,但忘了分享。每次释放鼠标以调整表头大小时,我都会存储所有列宽。
jt.getTableHeader().addMouseListener( new MouseAdapter() {
public void mouseReleased(MouseEvent arg0){
for(int i=0;i<jt.getColumnModel().getColumnCount();i++ ) {
TableColumn column = jt.getColumnModel().getColumn(i);
int tableColWidth = column.getWidth();
String colHeader = (String) column.getHeaderValue();
//Store the column Header with the column width
}
}
});