2012-02-24 3 views
1

У меня есть JTable и внутри столбцов у меня есть JComboBox.JComboBox вернется к исходному значению в JTable

Моя таблица имеет свою собственную модель: см ниже

package View; 

public class CustomTableModel extends AbstractTableModel { 

    ArrayList<Item> data; 

    public String[] columnNames = {"ID", "Amount", "value", "bought", "quantity"}; 

    public CustomTableModel(ArrayList<Item> data){ 
     this.data = data 
    } 

    public int getColumnCount() { 
     return columnNames.length; 
    } 


    public int getRowCount() { 
     return data.size(); 
    } 

    @Override 
    public Object getValueAt(int arg0, int arg1) { 

     if(arg1 == 0){ 
      return data.get(arg0).getID(); 
     } 

     if(arg1 == 1){ 
      return data.get(arg0).getAmount(); 
     } 

     if(arg1 == 2){ 
      return data.get(arg0).getValue(); 
     } 

    if(arg1 == 3){ 
     return data.get(arg0).isBought(); 
    } 


    else { 
     return data.get(arg0).getQuantity(); 
    } 
} 

    public String getColumnName(int index) { 

     return columnNames[index]; 

    } 

    @Override 
    public void setValueAt(Object aValue, int row, int col) { 
     if (col == 3) { 
     data.get(row).setBought((Boolean) aValue); 
      this.fireTableCellUpdated(row, col); 

     } 
    } 

public boolean isCellEditable(int row, int col){ 
    return true; 
} 

public Class<?> getColumnClass(int columnIndex) 
{ 
    if (columnIndex == 3) 
    { 
    return Boolean.class; 
    } 

    else 

    return super.getColumnClass(4); 

} 

И этот видеообработки, и редактор применяется к колонку, которая удерживает JComboBox;

public class ComboBoxRenderer extends JComboBox implements TableCellRenderer { 
public ComboBoxRenderer(String[] items) { 
    super(items); 
} 

public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
    if (isSelected) { 
     setForeground(table.getSelectionForeground()); 
     super.setBackground(table.getSelectionBackground()); 
    } else { 
     setForeground(table.getForeground()); 
     setBackground(table.getBackground()); 
    } 


    setSelectedIndex(0); 
    return this; 
} 


public class ComboBoxEditor extends DefaultCellEditor { 
public ComboBoxEditor(String[] items) { 
    super(new JComboBox(items)); 
} 

public Object getCellEditorValue() { 
    return j.getEditor().getItem(); 
} 

коробка выглядит как оно должно со всеми значениями он должен, но когда я нажимаю на поле и выберите другое значение, которое он вернется к первоначальным значениям, как только я перемещаться в другом месте на этой странице. Однако интересно то, что если я нажму на ЛЮБОЙ из JCombobox в столбце, он выделит новое значение, которое я выбрал! Но он будет отображать только оргинальный.

+0

Для более эффективной помощи следует отправить сообщение [SSCCE] (http://sscce.org/). –

ответ

1

Похоже, что эта функция задает значение в модели. Установлены только значения столбца 3 (Boolean)

public void setValueAt(Object aValue, int row, int col) { 
     if (col == 3) { 
     data.get(row).setBought((Boolean) aValue); 
      this.fireTableCellUpdated(row, col); 

     } 
    } 
+0

Я думал, что мне нужно сделать это только для col 3, поскольку это флажок, который проверяется или нет, в зависимости от истинного или ложного значения? – ntb08117

+0

@ user1230578: Стэн прав; если 'isCellEditable()' возвращает 'true' для столбца, вам нужно обработать его. – trashgod

Смежные вопросы