Java 如何通过双击正确删除JTable中的行?

Java 如何通过双击正确删除JTable中的行?,java,swing,jtable,Java,Swing,Jtable,大家下午好,我正在尝试学习java编程,但在学习JTable时遇到了一些问题,我不知道为什么我的代码会出现这些问题 所以,我要做的是,当我双击名为TableGejala的JTable中的行时,我双击的行将转移到另一个名为TableAturan的JTable中,然后我在TableGejala中双击的行将被删除。对于将行从TableGejala传输到Tableatura的部分,当我双击该行时,成功地传输了该行,但它没有删除TableGejala中正确的行。它不是删除我单击的行,而是删除它下面的行 有

大家下午好,我正在尝试学习java编程,但在学习JTable时遇到了一些问题,我不知道为什么我的代码会出现这些问题

所以,我要做的是,当我双击名为TableGejala的JTable中的行时,我双击的行将转移到另一个名为TableAturan的JTable中,然后我在TableGejala中双击的行将被删除。对于将行从TableGejala传输到Tableatura的部分,当我双击该行时,成功地传输了该行,但它没有删除TableGejala中正确的行。它不是删除我单击的行,而是删除它下面的行

有关更多详细信息,请参阅我创建Tablejala的代码:

private void getTableGejala() {
        while(tabel2.getRowCount() > 0){
            for(int i=0;i < tabel2.getRowCount();i++){
                tabel2.removeRow(i);
            }
        }

        tabel2.addColumn("ID Gejala");
        tabel2.addColumn("Nama Gejala");

        TabelGejala.setModel(tabel2);
        TabelGejala.setAutoResizeMode(TabelGejala.AUTO_RESIZE_ALL_COLUMNS);
    }
这是我转移行和删除行的代码:

    private void TabelGejalaMousePressed(java.awt.event.MouseEvent evt) {                                         

    if (evt.getClickCount()>=2){
        int col = 0;
        int row = 0;
        row = TabelGejala.rowAtPoint(evt.getPoint());
        col = TabelGejala.columnAtPoint(evt.getPoint());
        String col1 = (String)TabelGejala.getValueAt(row, 0);
        String col2 = (String)TabelGejala.getValueAt(row, 1);
        DefaultTableModel model = (DefaultTableModel) TabelAturan.getModel(); 
        DefaultTableModel old = (DefaultTableModel) TabelGejala.getModel();
        old.removeRow(row);
        model.addRow(new Object[]{col1, col2, 0});
        TabelAturan.requestFocus();
        TabelAturan.setRowSelectionInterval(TabelAturan.getRowCount()-1,TabelAturan.getRowCount()-1);        
        TabelAturan.editCellAt(TabelAturan.getRowCount()-1,2);
    }
}
这是我问题的截图:


哪个部分使我的输出得到了要删除的错误行?请帮助我,并提前感谢您提供的任何帮助,甚至感谢您阅读我的问题:

首先禁用第一个表tabelgejala中的单元格可编辑属性,以确保正确删除行。我使用以下代码实现了这一点:-

//instance table model
    DefaultTableModel tableModel = new DefaultTableModel(new Object[][]{},
            new String[]{
                "ID Gejala", "Nama Gejala"
            }) {

        @Override
        public boolean isCellEditable(int row, int column) {
            //all cells false
            return false;
        }
    };

    TabelGejala.setModel(tableModel);
然后使用jtable.getselectedrow和jtable.getselectedcolumn从表中获取值。将所需值添加到第二个表后,只需删除所选行。以下是源于您的代码的代码:-

private void TabelGejalaMousePressed(java.awt.event.MouseEvent evt) {                                         
    // TODO add your handling code here:
    if (evt.getClickCount() >= 2) {

        DefaultTableModel model = (DefaultTableModel) TabelAturan.getModel();
        DefaultTableModel old = (DefaultTableModel) TabelGejala.getModel();
        model.addRow(new Object[]{TabelGejala.getValueAt(TabelGejala.getSelectedRow(), 0), TabelGejala.getValueAt(TabelGejala.getSelectedRow(), 1), 0});
        old.removeRow(TabelGejala.getSelectedRow());

        TabelAturan.requestFocus();
        TabelAturan.setRowSelectionInterval(TabelAturan.getRowCount() - 1, TabelAturan.getRowCount() - 1);
        TabelAturan.editCellAt(TabelAturan.getRowCount() - 1, 2);
    }
}       

啊,我明白了!非常感谢您的帮助:
private void TabelGejalaMousePressed(java.awt.event.MouseEvent evt) {                                         
    // TODO add your handling code here:
    if (evt.getClickCount() >= 2) {

        DefaultTableModel model = (DefaultTableModel) TabelAturan.getModel();
        DefaultTableModel old = (DefaultTableModel) TabelGejala.getModel();
        model.addRow(new Object[]{TabelGejala.getValueAt(TabelGejala.getSelectedRow(), 0), TabelGejala.getValueAt(TabelGejala.getSelectedRow(), 1), 0});
        old.removeRow(TabelGejala.getSelectedRow());

        TabelAturan.requestFocus();
        TabelAturan.setRowSelectionInterval(TabelAturan.getRowCount() - 1, TabelAturan.getRowCount() - 1);
        TabelAturan.editCellAt(TabelAturan.getRowCount() - 1, 2);
    }
}