2012-10-20 37 views
1

我有JTableJComboBox。當我在組合框中選擇一個項目時,我想要隱藏某些列,當我選擇組合框中的其他項目時,隱藏的列將重新出現。我寫的,如何根據JComboBox中的選擇顯示/隱藏某些JTable列

jTable1.getColumnModel().getColumn(8).setMinWidth(0) 
jTable1.getColumnModel().getColumn(8).setMaxWidth(0) 
jTable1.getColumnModel().getColumn(8).setWidth(0) 

隱藏列,但是當我再次寫

jTable1.getColumnModel().getColumn(8).setMinWidth(100) 
jTable1.getColumnModel().getColumn(8).setMaxWidth(100) 
jTable1.getColumnModel().getColumn(8).setWidth(100) 

隱藏列不可見。

+3

另請參閱此[相關示例](http://stackoverflow.com/a/10089138/230513)。 – trashgod

+0

但在上面的代碼中有什麼問題? – user1760166

回答

0
for (int i = 0; i < 2; i++) { 
    jTable1.getColumnModel().getColumn(8).setMinWidth(100) 
    jTable1.getColumnModel().getColumn(8).setMaxWidth(100) 
    jTable1.getColumnModel().getColumn(8).setWidth(100) 
} 

列將變爲可見。

1

原因是,無論setMin/SETMAX強制執行的關係

min <= width <= max 

也就是說方法調用的順序是有意義的

// hiding 
column.setMinWidth(0); 
column.setMaxWidth(0); 

// showing 
column.setMaxWidth(100); 
column.setMinWidth(100); 

請注意,您不必調用setWidth,這是內部處理。

這就是說:強制大小是..黑客。考慮使用乾淨的解決方案,f.i.一個像SwingX這樣的框架,它具有(其他細節:-)全面支持列隱藏

+0

你知道我是'SwingX'的粉絲,但是列隱藏也是JDK的一部分。 'JTable#removeColumn'只從視圖方面刪除列,而不是從模型方 – Robin

+0

@Robin是的,我知道:-)需要更多思考(而不是隱藏)的部分是在預期位置再次顯示它。當然不是火箭科學,但很好,不需要擔心無聊的細節。 – kleopatra

1

使用JTable#removeColumnJTable#addColumn。這些操作隻影響視圖方面,而不是模型方面

1

上面的代碼中出現了什麼問題

除了克列奧帕特拉樂於助人的insight,記錄here,一些L- & FS們或多或少的合作。例如,com.apple.laf.AquaLookAndFeel總是留下足夠的寬度以在setMinWidth(0)之後拖動,儘管可以手動強制將列寬度調整爲零。

相關問題