用户更改后如何获取Jtable的列宽
How to get column width of Jtable after a user changes it
我想知道如何在用户更改后获取列宽,以便我可以保存它。
经过一番折腾,我想到了这个方法,但并不完美。如果用户实际上没有通过单击列的一行 select 列,则 selected 列为 -1 从而引发错误,因此我使用 if 语句阻止了该错误。
下一个问题是,如果我 select 一列然后更改宽度,它可以工作并在我更改列时打印出宽度,但是如果我 select 说第 3 列但是然后继续更改第 2 列的宽度,而第 2 列的行中没有 selecting,当我更改第 2 列时,它将继续吐出第 3 列的宽度。因此它按预期工作 select方法,但必须有更好的方法来获取我正在更改的列的宽度。
有什么想法吗?
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
}
});
您可以尝试将 ChangeEvent
的来源转换为 TableColumn
。
有空时,请在 TableColumnModelListener
...
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) {
Object source = e.getSource();
if (source instanceof TableColumn) {
TableColumn tableColumn = (TableColumn) source;
System.out.println(tableColumn.getWidth());
}
}
public void columnSelectionChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub
}
});
我前段时间找到了解决办法,但忘了分享。每次在 table header.
上释放鼠标时,我都会存储所有列宽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
}
}
});