2013-07-16 2 views
1

У меня проблемы с этим JTable. Я редактировать ячейку как этотОбновление строки при редактировании ячейки

editing

Затем я совершить изменения нажимая клавишу ВВОД. Здесь я надеюсь, что таблица gui обновится с новыми значениями.

commit

Но они не показывают, они только показывают, когда я изменить выбор, как этот

change selection

fireTableCellUpdated(inRow, inCol); является вызов метода, когда в tableModel, когда я изменить ячейку.

Я не уверен, что мне нужно добавить слушателя в таблицуModel, когда fireTableCellUpdated для jtable для перерисовки и повторной проверки.

Некоторые Код:

Это называется в TableModel.

@Override 
public void setValueAt(Object inValue, int inRow, int inCol) { 
    ProductRow productRow = (ProductRow)(getRowsData().get(inRow)); 

    //more code 
    productRow.setCantidad(inValue.toString()); // when this is called all properties are updated from ProductRow     
    fireTableCellUpdated(inRow, inCol); 
} 
+0

Вы можете показать нам код для этой таблицы? –

+0

мм я не совсем уверен, какой код я должен показать .. Я публикую модель таблицы, которую этот метод вызывается, когда я редактирую ячейку – nachokk

ответ

1

Я решил это добавить, наконец, но я не совсем уверен, что это лучший способ решить.

@Override 
    public void setValueAt(Object inValue, int inRow, int inCol) { 
     ProductRow productRow = (ProductRow)(getRowsData().get(inRow)); 

     //more code 
     productRow.setCantidad(inValue.toString()); // when this is called all properties of productRow are changed.     

     //fireTableCellUpdated(inRow, inCol);// this don't refresh cause i change the row also 
     //fireTableDataChanged(); - First approach. As pointed out this is wrong because it refreshes all table cells 
     fireTableRowsUpdated(inRow,inRow); // adding this 
    } 
+0

Это уведомляет таблицу о том, что все ячейки изменены. Это неправильный способ сделать это. Пожалуйста, разместите код для своей таблицы и классов вашей таблицы моделей, а также то, как они создаются. –

+1

неправильно (вы можете ожидать downvote by @kleopatra или @camickr), пожалуйста, удалите fireTableDataChanged(); эти нотификаторы воссоздают целую XxxTableModel, а не == для лучшей помощи, скорее всего, опубликуют SSCCE, короткие, выполнимые, компилируемые, точки :-) – mKorbel

+0

@ c.s. теперь я меняю .. вы правы, но я не уверен, что мне еще нужно вызвать «fireTableCellUpdated» – nachokk

2

При изменении конкретной ячейки обновляет другие ячейки в той же строке (при условии, что это то, что вы после этого), ваш last attempt in your answer использует правильный метод, только с некорректным параметром :-)

@Override 
public void setValueAt(Object inValue, int inRow, int inCol) { 
    ProductRow productRow = (ProductRow)(getRowsData().get(inRow)); 
    // when this is called all properties of productRow are changed. 
    productRow.setCantidad(inValue.toString()); 
    // note: both parameters are _row_ coordinates 
    fireTableRowsUpdated(inRow, inRow); 
} 
+0

я уже заметил, когда я тестировал его +1, я забыл редактировать здесь :), спасибо – nachokk

+0

, пожалуйста, не о fireTableRowsUpdated (inRow, inCol); ??? если они каким-то образом скованы – mKorbel

+1

@mKorbel ?????? – nachokk