2015-11-16 75 views
0

在我执行“打包所有列”调用后会发生什么情况时,我遇到了一个与JXTable(可能它甚至是JTable问题)有关的特定场景。防止JXTable自动调整列宽

'Pack All Columns'正常工作,但是当我手动使列宽变小时,在接收到下一个TableModelEvent时,我修改的列宽始终变为LARGER。我注意到JTable的private setWidthsFromPreferredWidths()最终被调用,看起来像罪魁祸首。

同样,只有在选择“打包所有列”后才会出现此问题。这是一个已知的错误还是这是“打包所有列”的预期行为?

回答

0

我居然找到了一个回答我的问题在http://www.coderanch.com/

它涉及重写columnMarginChanged(的ChangeEvent)方法,以确保的getWidth()getPreferredWidth()的列是同步:

@Override 
public void columnMarginChanged(final ChangeEvent e) 
{ 
    super.columnMarginChanged(e); 

    if (isEditing()) 
    { 
     removeEditor(); 
    } 
    TableColumn resizingColumn = null; 
    if (tableHeader != null) 
    { 
     resizingColumn = tableHeader.getResizingColumn(); 
    } 
    if (resizingColumn != null) 
    { 
     if (autoResizeMode == AUTO_RESIZE_OFF) 
     { 
      resizingColumn.setPreferredWidth(resizingColumn.getWidth()); 
     } 
     else 
     { 
      SwingUtilities.invokeLater(new Runnable() 
      { 

       @Override 
       public void run() 
       { 
        doLayout(); 
        repaint(); 
       } 
      }); 
     } 
    } 
    else 
    { 
     resizeAndRepaint(); 
    } 
}