目前我初始化我JTable
我JPanel
像這樣:用自定義渲染器初始化動態JTable的最佳方式是什麼?
private ArrayData data;
private JTable table;
private CustomTableModel model;
public ExtendedJPanel() {
data = ArrayData.getData();
model = new CustomTableModel(data);
table = new JTable(model);
TableColumn col = table.getColumnModel().getColumn(0);
col.setCellRenderer(new Column0Renderer());
col = table.getColumnModel().getColumn(1);
col.setCellRenderer(new Column1Renderer());
// do some other stuff
}
當我想直接通過創建一個新Object[][]
陣列,並呼籲fireTableCellUpdated(row, column)
以修改JTable
我與TableModel
交互的所有值爲我所有的細胞。
我的問題是,在我的程序的某個時候,我的JTable
失去了自定義渲染器。
我被告知這是因爲它正在更新TableColumnModel
。
什麼是初始化一個JTable
使得CellRenderers
住宿 整個JTable
的生活不斷的最佳方式?
我從來沒有真正調用過table.setModel(...);''我擁有的是'TableModel'中的一個自定義方法,它爲新的'Object [] []'換掉舊的Object [] []'。所以我的TableModel保持不變。 我最關心的是ColumnModel正在改變和失去我的渲染器。我不確定這是爲什麼,因爲我沒有_think_我在任何時候重新驗證表。 – RhetoricalQuestions
'我從來沒有真正調用過table.setModel(...);'我說「類似」。如果你沒有這樣做,那麼在調用引發TableColumnModel的fireXXX()方法時,交換代碼會被重新創建。您自定義TableModel中的代碼導致了問題。 – camickr
因此,假設調用'fire ...()'方法對於手動調用通常是不安全的,那麼我會安全嗎? – RhetoricalQuestions