2014-02-18 3 views
0

Этот код является частью моей кнопки action.Jtable содержит последнюю строку. Когда я нажимаю кнопку сохранения, выбранная строка должна удалить из строки таблицы ... !!! 'jtable checkbox checked row удалить из таблицы при нажатии кнопки?

Действие, выполняемое код

@Override 
public void actionPerformed(ActionEvent e) { 
if(e.getSource()==btnSave){ 
    for (int i = 0; i < retunTable.getRowCount(); i++) { 
     Boolean chked = Boolean.valueOf(retunTable.getValueAt(i, 4) 
       .toString()); 
     String dataCol1 = retunTable.getValueAt(i, 1).toString(); 
     if (chked) { 


      JOptionPane.showMessageDialog(null, dataCol1); 
      colVaules.add(dataCol1); 
      returnBook(); 
      DefaultTableModel dm=(DefaultTableModel) retunTable.getModel(); 


     } 
    } 
} 

} 
+1

где вы на самом деле пытаетесь удалить строку? Вы пробовали 'dm.removeRow (i)'? И что со всеми '!!!'? –

+0

нет, но мне нужно знать, проверили кнопку, проверили номер строки, чтобы попробовать этот код –

+1

_ «нет, но мне нужно знать, что кнопка проверки проверена, чтобы проверить номер строки, чтобы попробовать этот код» _ это не то, для чего нужен цикл, строк, 'i' является строкой? –

ответ

0

Попробуйте это. Вы уже должны были переопределить getColumnClass() модели, поэтому вам не нужно делать то, что вы пытаетесь сделать. getValueAt() должен возвращать объект Boolean с возможностью каста. Кроме того, если вы собираетесь циклически и динамически удалять строки в цикле, вам нужно учитывать, что количество строк в модели будет уменьшаться при каждом удалении строки, поэтому при каждом удалении строки также потребуется i--. См. Пример ниже.

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 
import javax.swing.table.DefaultTableModel; 

public class TestCheckedTable { 

    public TestCheckedTable() { 
     String[] cols = {"col 1", "col 2", "col 3"}; 
     Object[][] data = new Object[15][]; 
     for (int i = 0; i < data.length; i++) { 
      data[i] = new Object[]{"Hello", "World", false}; 
     } 

     final DefaultTableModel model = new DefaultTableModel(data, cols) { 
      @Override 
      public Class<?> getColumnClass(int col) { 
       return col == 2 ? Boolean.class : String.class; 
      } 
     }; 
     JTable table = new JTable(model); 

     JButton button = new JButton("Delete Checked Rows"); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       for (int i = 0; i < model.getRowCount(); i++) { 
        Boolean checked = (Boolean) model.getValueAt(i, 2); 
        if (checked) { 
         model.removeRow(i); 
         i--; 
        } 
       } 
      } 
     }); 

     JFrame frame = new JFrame("test"); 
     frame.add(new JScrollPane(table)); 
     frame.add(button, BorderLayout.SOUTH); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new TestCheckedTable(); 
      } 

     }); 
    } 
}