2016-07-06 2 views
0

한 번에 JTable에서 여러 행을 삭제하고 싶지만 한 번에 하나의 행만 삭제할 수 있습니다. JTable은 한 번에 하나의 선택 만 허용합니까? 여러 행을 선택하여 삭제하려면 java가 허용합니까? 주어진 코드는 여러 행을 선택하더라도 한 번에 한 행만 삭제할 수 있습니다.한 번에 JTable, 데이터베이스에서 여러 행을 삭제하는 방법

DBConnection은 MySql 데이터베이스에 연결하는 클래스입니다.

staffTable1

는 여기에 내가 시도하는 내 코드입니다 게터 세터 클래스

를 사용하여 MySQL의 데이터를 가져 와서 내 JTable 행과 열을 업데이트 할 수있는 기능 JTable

ShowStaffInStaffTable()의 변수 이름입니다 :

int row = staffTable1.getSelectedRow(); 
DefaultTableModel model = (DefaultTableModel) staffTable1.getModel(); 

String selected = model.getValueAt(row, 9).toString(); 

if (row >= 0) { 
    try { 
     DBConnection DB12 = new DBConnection(); 
     Connection conn = DB12.Connect(); 
     String sql = "delete from staff where Contact_No= ?"; 
     PreparedStatement stmt = conn.prepareStatement(sql); 
     stmt.setString(1, selected); 
     stmt.executeUpdate(); 
     form12.ShowStaffInStaffTable(); 
    } catch (Exception w) { 
     JOptionPane.showMessageDialog(this, "Connection Error!"+w); 
     w.printStackTrace(); 
    } 
} 
+0

[* 테이블 사용 방법 : 사용자 선택 *] (https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#selection)을 참조하십시오. – trashgod

+0

@trashgod 나는 이미 우리가 지정한 링크에있는 메서드에 의해 JTable에서 여러 행을 선택할 수 있지만 내 질문에 그들을 선택 후 JTable 및 데이터베이스에서 여러 행을 삭제하는 방법을 알고 있습니까? 주어진 코드 (위)는 여러 행을 선택하더라도 한 번에 한 행만 삭제할 수 있습니다. –

+0

'JTable ... 선택된 여러 행'-'getSelectedRows'는 선택된 행의 색인을 포함하는 배열을 반환합니다 (현재 코드는'getSelectedRow'를 사용합니다) – copeg

답변

2

다음은 JTable (및 JList)에서 선택된 여러 행을 삭제하는 방법을 보여줍니다.

import java.awt.*; 
import java.awt.event.*; 
import java.util.Arrays; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 
import javax.swing.*; 
import javax.swing.table.*; 

public class ItemDeletion extends JPanel 
{ 
    private JList<String> list; 
    private JTable table; 

    public ItemDeletion() 
    { 
     setLayout(new BorderLayout(5, 5)); 

     String[] items = 
     { 
      "One", 
      "Two", 
      "Three", 
      "Four", 
      "Five", 
      "Six", 
      "Seven", 
      "Eight", 
      "Nine", 
      "Ten" 
     }; 

     // Add the list 

     DefaultListModel<String> listModel = new DefaultListModel<String>(); 

     for (String item: items) 
      listModel.addElement(item); 

     list = new JList<String>(listModel); 


     JButton listDelete = new JButton("Delete From List"); 
     listDelete.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       DefaultListModel model = (DefaultListModel)list.getModel(); 
       int row = list.getSelectedIndex(); 

       while (row != -1) 
       { 
        model.removeElementAt(row); 
        row = list.getSelectedIndex(); 
       } 
      } 
     }); 

     JPanel listPanel = new JPanel(new BorderLayout(5, 5)); 
     listPanel.add(new JScrollPane(list), BorderLayout.CENTER); 
     listPanel.add(listDelete, BorderLayout.PAGE_END); 

     // Add the table 

     DefaultTableModel tableModel = new DefaultTableModel(0, 1); 
     List<String> tableItems = Arrays.asList(items); 
     Collections.shuffle(tableItems); 

     for (String item: tableItems) 
     { 
      System.out.println(item); 
      tableModel.addRow(new String[]{item}); 
     } 

     table = new JTable(tableModel); 

     table.setAutoCreateRowSorter(true); 
     ((DefaultRowSorter)table.getRowSorter()).toggleSortOrder(0); 

     JButton tableDelete = new JButton("Delete From Table"); 
     tableDelete.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       DefaultTableModel model = (DefaultTableModel)table.getModel(); 
       int row = table.getSelectedRow(); 

       while (row != -1) 
       { 
        int modelRow = table.convertRowIndexToModel(row); 
        model.removeRow(modelRow); 
        row = table.getSelectedRow(); 
       } 
      } 
     }); 

     JPanel tablePanel = new JPanel(new BorderLayout(5, 5)); 
     tablePanel.add(new JScrollPane(table), BorderLayout.CENTER); 
     tablePanel.add(tableDelete, BorderLayout.PAGE_END); 

     add(listPanel, BorderLayout.LINE_START); 
     add(tablePanel, BorderLayout.LINE_END); 
    } 

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("Multiple Item Deletion"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new ItemDeletion(), BorderLayout.NORTH); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

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

물론 데이터베이스에서 행을 삭제하려면 코드를 수정해야합니다.

관련 문제