我可以给你一种可能的方法。我试图解决相同的问题,因为我想将有关列宽的信息序列化到磁盘上,以便下次在应用程序中打开表时,可以适当地恢复列宽。开始:
第1步-覆盖您的JTable并向其中添加一个布尔属性
class MyTable extends JTable { private boolean isColumnWidthChanged; public boolean getColumnWidthChanged() { return isColumnWidthChanged; } public void setColumnWidthChanged(boolean widthChanged) { isColumnWidthChanged = widthChanged; }}第2步-将TableColumnModelListener()添加到表中
private class TableColumnWidthListener implements TableColumnModelListener{ @Override public void columnMarginChanged(ChangeEvent e) { if(!tableObj.hasColumnWidthChanged()) { if(tableObj.getTableHeader.getResizingColumn() != null) { // User must have dragged column and changed width tableObj.setColumnWidthChanged(true); } } } @Override public void columnMoved(TableColumnModelEvent e) { } @Override public void columnAdded(TableColumnModelEvent e) { } @Override public void columnRemoved(TableColumnModelEvent e) { } @Override public void columnSelectionChanged(ListSelectionEvent e) { }}步骤3-将鼠标侦听器添加到表头
private class TableHeaderMouseListener extends MouseAdapter{ @Override public void mouseReleased(MouseEvent e) { if(tableObj.getColumnWidthChanged()) { // Do whatever you need to do here // Reset the flag on the table. tableObj.setColumnWidthChanged(false); } }}注意:
在我的应用程序中,TableHeaderMouseListener和TableColumnWidthListener类是我的主应用程序类的私有内部类。我的主要应用程序类坚持观察的表的引用。因此,这些内部类可以访问表实例。显然,根据您的设置,您需要做适当的事情以使表实例可用于这些其他类。希望这可以帮助!



