我想隱藏Jtable列的數據,但不隱藏列視圖,只是它的數據。 該列包含有關利潤的數據,客戶不想顯示利潤,但在我的代碼中,我使用此列的值,並在用戶選擇指定行時獲取。如何隱藏Jtable列數據?
如何實現客戶需求,並且在隱藏其數據後選擇它時仍然能夠獲得該列的值(顯示列爲空,但仍然有其值)?
我想隱藏Jtable列的數據,但不隱藏列視圖,只是它的數據。 該列包含有關利潤的數據,客戶不想顯示利潤,但在我的代碼中,我使用此列的值,並在用戶選擇指定行時獲取。如何隱藏Jtable列數據?
如何實現客戶需求,並且在隱藏其數據後選擇它時仍然能夠獲得該列的值(顯示列爲空,但仍然有其值)?
您需要從JTable
的TableColumnModel
中刪除TableColumn
。例如:
table.removeColumn(table.getColumn(...));
現在列將不會在表格中顯示,但該數據仍處於TableModel
可用。訪問數據使用:
table.getModel().getValueAt(...);
您可以嘗試子類DefaultTableCellRenderer
,並致電setCellRenderer
。當相關列號傳遞給getTableCellRendererComponent
時,返回空白JLabel
,否則請調用默認super.getTableCellRendererComponent
。
這應該表示該列仍然可見,但每個單元格將爲空白。
如果要在選中某行時顯示數據,則需要向選擇模型中添加一個偵聽器(從getSelectionModel
)以將選定的行存儲在變量中,然後調用repaint。然後你可以在你的CellRenderer
中使用這個值。
你爲什麼不只是讓數據模型控制顯示什麼?我假設你正在使用tableModel。
您只需更改getValueAt(..)方法,以便它不會爲您不想顯示的列返回值。確保getColumnCount()方法也減少一個。
-1,爲什麼不能是不是讓數據模型控制顯示的內容?模型保存數據,視圖控制着數據的顯示方式,因此應該對視圖進行更改,而不是模型。這是Swing的MVC設計的基礎知識。'你所要做的就是改變getValueAt(..)方法,使它不返回一個值。「然後就是你試圖在表中呈現數據還是僅僅通過其他方式訪問數據代碼在您的應用程序中 – camickr 2014-09-22 18:56:58
是模型包含'what'數據,視圖控制'how'。這更多的是'如何'的問題。如果我有一個客戶實體,並且只想顯示姓名,地址而不是電話號碼,那麼我只需要getValueAt()返回'姓名'和'地址'。對我來說,渲染器處理數據的可視化表示。 – 2014-09-23 06:51:39
@Oliver Watkins同意down_voters – mKorbel 2014-09-23 08:53:12
從你說的話我斷定「table.removeColumn(table.getColumn(...));」將從視圖中刪除列,你說:「訪問您使用的數據: table.getModel()。getValueAt(...);我可以通過此代碼獲取隱藏列中單元格的值,雖然它是不可見,例如假設隱藏的列在索引3中,我想在(2,3)處得到值,但是我可以得到它,雖然這個單元格不可見,但我希望它是明確的 – 2014-09-22 20:37:26