2014-02-18 1 views
0

아래 코드는 내 버튼 동작의 일부입니다. 마지막 행을 포함하는 테이블은 확인란입니다. 저장 버튼을 클릭하면 선택한 행이 테이블 행에서 삭제되어야합니다 ... !!! '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

_ "아니요,하지만 체크 코드를 확인하기 위해 행 번호를 확인해야합니다"_ 무엇을 루프 할 것인가는 무엇입니까? 행,'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(); 
      } 

     }); 
    } 
}