2012-05-14 2 views
1

Пожалуйста, помогите. У меня две ячейки из jtable, один ID и один Описание. Идентификатор и описание являются обычным полем со списком. То, что я пытаюсь сделать, - это когда идентификатор теряет фокус или меняет его значение, описание будет обновляться в зависимости от значения идентификатора. Как мне это сделать?Как сделать ячейку jtable слушать изменения из другой ячейки

Вот мой код для реализации обеих клеток:

TableColumn subAccountCol = jTable1.getColumnModel().getColumn(table.findColumn("SubAccount")); 

    javax.swing.JComboBox accountCbx = new javax.swing.JComboBox(Account.toArray()); 
    javax.swing.JComboBox accountDescCbx = new javax.swing.JComboBox(AccountDesc.toArray()); 

    CompleteText.enable(accountCbx); 
    CompleteText.enable(accountDescCbx); 

    jTable1.getColumnModel().getColumn(table.findColumn("Account")).setCellEditor(new ComboBoxCellEditor(accountCbx)); 
    jTable1.getColumnModel().getColumn(table.findColumn("Account Description")).setCellEditor(new ComboBoxCellEditor(accountDescCbx)); 

ответ

2

Редактор ячейки будет ultmately вызов метода setValueAt() на вашей модели таблицы. В этой модели таблицы просто обновите связанное значение ячейки в дополнение к отредактированному значению celle и запустите соответствующее событие изменения для обеих ячеек.

public MyTableModel extends AbstractTableModel() { 
    // ... 

    // modifies the value for the given cell 
    @Override 
    public void setValueAt(Object value, int row, int column) { 
     Foo foo = this.list.get(row); 
     if (column == INDEX_OF_ID_COLUMN) { 
      foo.setId(value); // change the ID 
      fireTableCellUpdated(row, column); // signal the the ID has changed 
      // and now also change the description 
      String newDescription = createNewDescription(value); 
      foo.setDescription(newDescription); 
      fireTableCellUpdated(row, INDEX_OF_DESCRIPTION_COLUMN); // signal the the description has changed 
     } 
     // ... 
    } 
} 
+0

Умм .. Я не получил это. Сожалею! Можете ли вы объяснить это дальше или, возможно, псевдокод? Спасибо, кстати. – John

+0

Просмотреть мои обновления. –

+0

Я смог придумать свое решение. Я использовал tableChanged из TableModelListener. В любом случае, спасибо! – John

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