2011-05-12 49 views
2

我無法理解爲什麼會發生這種情況。我一直在網上尋找類似的問題,但找不到一個。在JTable上調用setRowHeight立即重置int方法參數

for (int row = 0; row < getRowCount(); row++) { 
     int rowHeight = this.getRowHeight(); 
     for (int col = 0; col < this.getColumnCount(); col++) { 
      Component pRenderer = getCellRenderer(row, col); 
     // Assume this is a dimension of 120x120 
     Dimension pRendererSize = pRenderer.getPreferredSize(); 
      if (pRendererSize.height > rowHeight) 
      rowHeight = pRendererSize.height; 
     } 
    this.setRowHeight(row, rowHeight); 
} 

我的JTable中行的默認高度是16像素。如果我撥打電話:

//This returns 16 initially 
this.getRowHeight(); 

我正在逐步調試我的調試器中的代碼。在行setRowHeight中,參數rowHeight是120,因此我將行的rowHeight設置爲120像素。我根本沒有重載這個方法,這是setRowHeight的JTable實現。

接下來發生的事情真的很可怕。在遍歷這個方法之後,this.getRowHeight()不僅返回了16個像素,rowHeight的值立即變爲16個像素。

當然,表格也不正確。這似乎違反我的int值類型參數將通過傳遞給方法而改變的意義。這根本不應該改變rowHeight變量。你認爲我的調試器是在舊代碼上運行,是壞了還是這可能是時代的終結?

+0

發佈您的SSCCE(http://sscce.org),證明問題。 – camickr 2011-05-12 16:45:07

+0

多一點信息,我試圖在顯示窗口中非常簡單地執行此操作,同時仍然在調試器中的此方法內,並且此行爲沒有發生,但是我的表上的行高仍然是16像素。 – 2011-05-12 16:45:35

+0

我沒有看到你的代碼有問題,它看起來非常類似於我的。也許你有兩個JTable實例(一個在內存中,一個在幀中添加),並且你正在更新內存中不會影響幀的行高的行高。沒有SSCCE,我們不僅可以猜測。 – camickr 2011-05-12 16:55:12

回答

2

這裏是我用來設置行高度代碼:

private void updateRowHeights() 
{ 
    try 
    { 
     for (int row = 0; row < table.getRowCount(); row++) 
     { 
      int rowHeight = table.getRowHeight(); 

      for (int column = 0; column < table.getColumnCount(); column++) 
      { 
       Component comp = table.prepareRenderer(table.getCellRenderer(row, column), row, column); 
       rowHeight = Math.max(rowHeight, comp.getPreferredSize().height); 
      } 

      table.setRowHeight(row, rowHeight); 
     } 
    } 
    catch(ClassCastException e) {} 
} 

UIManager Defaults使用此代碼。點擊「按值類型」,然後選擇「圖標」,看看它的工作。

+0

(OT:在Oracle破壞它之前,你曾經在老Java論壇上幫助我解決Swing問題:)很高興再次見到你)我複製並粘貼了這段代碼,除了我刪除了獲取組件的行並且通過了直接寫入Math.max。這仍然表現出同樣的問題。 – 2011-05-12 17:02:38

+0

更新:奇怪的是,當我在循環外調用setRowHeight時,它工作正常,並且不會更改rowHeight變量@ _ @! – 2011-05-12 17:03:46

+0

你在哪裏調用'updateRowHeights()'?當我在渲染器中調用它時,它似乎重新渲染,導致一個'StackOverflowError'。 – sdasdadas 2013-02-19 22:09:53

相關問題