2014-02-18 76 views
0

下面的代码是我按钮action.Jtable包含最后一行的一部分是复选框。 当我点击保存按钮时,选定的行必须从表格行中删除... !!!'jtable复选框选中行从表中删除时点击按钮?

行动执行代码

@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

_“不,但我需要知道检查按钮检查行号来尝试代码”_不是那循环是为了循环通过行,'我'是行? –

回答

0

尝试了这一点。你上课应该已经覆盖了该模型的getColumnClass(),所以不需要你试图做的toString()事情。 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(); 
      } 

     }); 
    } 
} 
相关问题