我可以给你一个可能的方法.我试图解决同样的问题,因为我想将有关列宽的信息序列化到磁盘,以便下次在我的应用程序中打开表时,我可以适当地恢复列宽.开始:
第1步 - 覆盖JTable并为其添加布尔属性
class MyTable extends JTable {
private boolean isColumnWidthChanged;
public boolean getColumnWidthChanged() {
return isColumnWidthChanged;
}
public void setColumnWidthChanged(boolean widthChanged) {
isColumnWidthChanged = widthChanged;
}
}
Run Code Online (Sandbox Code Playgroud)
第2步 - 向表中添加TableColumnModelListener()
private class TableColumnWidthListener implements TableColumnModelListener
{
@Override
public void columnMarginChanged(ChangeEvent e)
{
/* columnMarginChanged is called continuously as the column width is changed
by dragging. Therefore, execute code below ONLY if we are not already
aware of the column width having changed */
if(!tableObj.hasColumnWidthChanged())
{
/* the condition below will NOT be true if
the column width is being changed by code. */
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) { }
}
Run Code Online (Sandbox Code Playgroud)
第3步 - 向表头添加鼠标侦听器
private class TableHeaderMouseListener extends MouseAdapter
{
@Override
public void mouseReleased(MouseEvent e)
{
/* On mouse release, check if column width has changed */
if(tableObj.getColumnWidthChanged())
{
// Do whatever you need to do here
// Reset the flag on the table.
tableObj.setColumnWidthChanged(false);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:在我的应用程序中,TableHeaderMouseListener和TableColumnWidthListener类是我的主应用程序类的私有内部类.我的主要应用程序类保持对正在观察的表的引用.因此,这些内部类可以访问表实例.显然,根据您的设置,您需要执行适当的操作以使表实例可用于这些其他类.希望这可以帮助!
归档时间: |
|
查看次数: |
8695 次 |
最近记录: |