2009-12-13 3 views
-1

이 프레임이 있는데 그 테이블 데이터를 삭제 한 다음 일부 데이터를 입력하고 싶습니다. 하지만이 예외가 있습니까? 도와주세요.GUI 테이블에서 데이터를 삭제하려면 어떻게해야합니까?

내 BirthList 프레임 :

public class BirthList extends javax.swing.JFrame { 

private Admin admin; 
List<Birth> list; 

/** Creates new form BirthList */ 
public BirthList(Admin admin) { 
    initComponents(); 
    this.admin = admin; 
    Manager.admin = admin; 

    try { 
     Manager.addToBirthListFromMySQL(); 
    } catch (SQLException ex) { 
     Logger.getLogger(BirthList.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    getDataFromGUITable(); 

    fillTable(); 

} 

private void getDataFromGUITable() { 
    list = new ArrayList<Birth>(); 
    for (int i = 0; i < jTable1.getRowCount(); i++) { 
     deleteAllRows(i); 

    } 
    admin.setCheckBirth(list); 
} 

private void deleteAllRows(int row) { 
    jTable1.remove(row); 

} 
public void fillTable() { 

    String[] columNames = {"name", "family", "father's name", "mother's name", "date of birth", "place of birth"}; 
    List<Birth> birth = admin.getBirthList(); 
    if (birth.isEmpty()) { 
     JOptionPane.showMessageDialog(this, "Death list is empty! at first ,add a person.", "Error", JOptionPane.ERROR_MESSAGE); 
    } 


    else{ 

    Object[][] data = new Object[birth.size()][columNames.length]; 
    for (int i = 0; i < data.length; i++) { 
     Birth birth1 = birth.get(i); 

     data[i][0] = birth1.getName(); 
     data[i][1] = birth1.getFamily(); 
     data[i][2] = birth1.getFatherName(); 
     data[i][3] = birth1.getMotherName(); 
     data[i][4] = birth1.getDateOfBirth(); 
     data[i][5] = birth1.getPlaceOfBirth(); 


    } 
    DefaultTableModel model = new DefaultTableModel(data, columNames); 
    jTable1.setModel(model); 
} 
} 
public boolean isCellEditable(int row, int col) { 
    return true; 
}} 

스택 트레이스 :

run: 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1 
     at java.awt.Container.remove(Container.java:1132) 
     at AdminGUI.BirthList.deleteAllRows(BirthList.java:61) 
     at AdminGUI.BirthList.getDataFromGUITable(BirthList.java:54) 
     at AdminGUI.BirthList.<init>(BirthList.java:45) 
     at AdminGUI.BirthFrame.newButton1ActionPerformed(BirthFrame.java:127) 
     at AdminGUI.BirthFrame.access$000(BirthFrame.java:21) 
     at AdminGUI.BirthFrame$1.actionPerformed(BirthFrame.java:58) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
     at java.awt.Component.processMouseEvent(Component.java:6038) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) 
     at java.awt.Component.processEvent(Component.java:5803) 
     at java.awt.Container.processEvent(Container.java:2058) 
     at java.awt.Component.dispatchEventImpl(Component.java:4410) 
     at java.awt.Container.dispatchEventImpl(Container.java:2116) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) 
     at java.awt.Container.dispatchEventImpl(Container.java:2102) 
     at java.awt.Window.dispatchEventImpl(Window.java:2429) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) 
+0

이 내용은 http://stackoverflow.com/questions/1896211/database-and-mysql 및 http://stackoverflow.com/questions/1896339/how-can-delete-one-row-from과 관련이 있다고 가정합니다. -mysql –

답변

2

내가 기본 TableModel에서 데이터를 제거하고 fireTableDataChanged() 메소드를 호출합니다. 테이블 모델의 작동 방식에 대한 자습서는 here을 참조하십시오.

행이 삭제되었거나 이야기 구조가 변경되었다는 경고를하기위한 다른 방법이 있으며, 상황에 따라 이러한 정보를 사용하는 것이 더 적절할 수 있습니다. AdminGUI.BirthList.deleteAllRows에서

(BirthList.java:61를)

을 당신은 '아무튼 인덱스에 전달되고 있습니다

0

스택 추적 당신이 알아야 할 모든 것을 알려줍니다 jtable1 컬렉션에 존재하지 않습니다. 디버거를 빠르게 돌리면 바로 정렬됩니다.

jtable1은 (는) 어디에 선언되어 있습니까? 나는 그것을 놓쳤는가?

0

코드에 차이가 하나 더 있습니다 (예외는 아니지만). 그래서,


public boolean isCellEditable(int row, int col) { return true; }

하지만 당신의 클래스가 자신의 TableModel를 만들 수 (가 AbstractTableModel 또는 DefaultTableModel를 중 하나) 스윙 프레임 워크에서 제공하는 TableModel 클래스 중 하나를 확장하지 않습니다

당신은 무언가 같이가 이 방법은 어떤 목적으로도 사용되지 않는 것 같습니다. 또한 위 메서드 (Swing 클래스)의 기본 구현은 항상 true를 반환하는 것입니다.
및 코드도 동일하게 수행합니다. 아마 위의 방법은 필요하지 않습니다.

관련 문제