2013-12-13 52 views
0

我是一個應該是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; 
     } 
    }); 

回答

3
  • 答案非常簡單,不要把JComboBoxXxxTableModel或設置爲getColumClassJComboBox.class,這是錯誤(當然是可能的,但有一堆副作用),XxxTableModel(指定爲)可以直接容納只有s TANDARD Java數據類型(StringDateIcon/ImageIconIntegerDouble等)

  • XxxTableModel應該是存儲(如果你不想Java數據類型之間解析)相同的數據類型等作爲被存儲在DefaultComboBoxModel(指出清楚CONSTANS是MyPanel.XXX),例如在XxxTableModel存儲String值時DefaultComboBoxModel具有相同的數據類型,爲Date similair邏輯,Icon/ImageIconIntegerDouble

  • 更多信息閱讀甲骨文教程How to use Tables - Using a Combo Box as an Editor

+0

@meriley我這裏用SSCCE形式代碼的一些帖子,在Java +擺動標記+ JTable的JComboBox的+我 – mKorbel

+0

問題是,每一行都有不同的JComboBox (它們存儲不同的數據),而提供的示例是所有行的統一數據集。 – meriley

+0

@meriley每一行都有不同的JComboBox--這不是任何問題,有三種方法如何爲分隔的DefaultComboBoxModel保存不同的值(不需要定義是始終創建的),但是任何從他們開始都將JComboBox模型化,渲染器被指定爲列和行座標,或者存儲在Map中或者存儲在Vector , – mKorbel

相關問題