Удалить строку из jtable

Я хочу удалить строку из jtable в форме свинга

Jtable >> автоматически перетаскивается из свинга Netbeans ( Netbeans 8)

private javax.persistence.EntityManager entityManager;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private java.util.List<javaapplication1.Orders> ordersList;
private javax.persistence.Query ordersQuery;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;

Данные Jtable >> связываются автоматически из базы данных MySQL

я хочу удалить строку из jtable только не из базы данных

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:

    int selectedRow =  jTable1.getSelectedRow();
    if(selectedRow!=-1)
    {
        try {
            jTable1.remove(selectedRow);
            jTable1.revalidate();
        } catch (Exception e) {
            e.getMessage();
        }

    }
} 

2 ответа

Решение

На этой линии:

jTable1.remove(selectedRow);

Этот метод удаления (int index) не делает то, что вы думаете, он делает. Он унаследован от класса Container и предназначен для удаления компонентов из данного контейнера.

Вместо этого вам нужно поработать с TableModel и удалить из него выбранную строку. Поскольку вы используете matisse (GUI Builder NetBeans), тогда модель таблицы, присоединенная к вашей таблице, будет экземпляром DefaultTableModel, поэтому вы можете сделать следующее:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    int viewIndex = jTable1.getSelectedRow();
    if(viewIndex != -1) {
        int modelIndex = jTable1.convertRowIndexToModel(viewIndex); // converts the row index in the view to the appropriate index in the model
        DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
        model.removeRow(modelIndex);
    }
}

Пожалуйста, посмотрите на:

Работа с JTableBinding:

private JTableBinding<LpDetail, LpMaster, JTable> lpDetailListTableBinding;

Вы можете выполнить это над pojos напрямую:

protected void btnEliminarItemActionPerformed(ActionEvent e) {

        int sustract = tb_DetLP.getSelectedRow();

        if (sustract >= 0) {
            selectedItem.setLpDetailList(org.jdesktop.observablecollections.ObservableCollections
                    .observableList(selectedItem.getLpDetailList()));
            selectedItem.getLpDetalleList().remove(sustract);                       
        }

    }
Другие вопросы по тегам