我是一個應該是2列(String,JComboBox)的JTable。當我初始化表格時,一切看起來不錯。只要我在表格中選擇一個值,JComboBox單元就會獲得所選項目的數據類型。JTable單元格編輯器改變類型
我想保留JCOmboBox並讓它觸發數據更改的事件,並且表忽略該列中的數據更改並保持組合框已填充。
我的表有此作爲一個覆蓋
@Override
public TableCellEditor getCellEditor(int row, int column) {
Object value = super.getValueAt(row, column);
if (value != null) {
if (value instanceof JComboBox) {
return new DefaultCellEditor((JComboBox) value);
}
return getDefaultEditor(value.getClass());
}
return super.getCellEditor(row, column);
}
實施
JComboBox uploadBox = new JComboBox();
uploadBox.addItem(MyPanel.UPLOAD_OPTIONS.PROMPT);
uploadBox.addItem(MyPanel.UPLOAD_OPTIONS.UPLOAD);
uploadBox.addItem(MyPanel.UPLOAD_OPTIONS.DONT_UPLOAD);
Object[][] tableData = new Object[][]{
{"Upload data on save", uploadBox}
};
table.setModel(
new DefaultTableModel(tableData, new String[]{"Description", "Options"}) {
Class[] types = new Class[]{String.class, JComboBox.class};
boolean[] canEdit = new boolean[]{false, true};
@Override
public Class getColumnClass(int columnIndex) {
return types[columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit[columnIndex];
}
});
table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable jtable, Object o, boolean bln, boolean bln1, int i, int i1) {
return (Component)o;
}
});
@meriley我這裏用SSCCE形式代碼的一些帖子,在Java +擺動標記+ JTable的JComboBox的+我 – mKorbel
問題是,每一行都有不同的JComboBox (它們存儲不同的數據),而提供的示例是所有行的統一數據集。 – meriley
@meriley每一行都有不同的JComboBox--這不是任何問題,有三種方法如何爲分隔的DefaultComboBoxModel保存不同的值(不需要定義是始終創建的),但是任何從他們開始都將JComboBox模型化,渲染器被指定爲列和行座標,或者存儲在Map中或者存儲在Vector, –
mKorbel