2015-11-16 102 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(); 
    } 
}