JComboBox возвращается к исходному значению в JTable - PullRequest
1 голос
/ 24 февраля 2012

У меня есть JTable и внутри столбцов у меня есть JComboBox.

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

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);  

} 

И этот Renderer и Editor применяются к столбцу, который содержит 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'ов в столбце, он выделит новое значение, которое я выбрал! Но он будет отображать только оригинал.

1 Ответ

1 голос
/ 24 февраля 2012

Похоже, проблема заключается в установке значения в модели.Устанавливаются только значения столбца 3 (логическое значение)

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

      } 
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...