2012-06-21 3 views
3

나는이 테이블을 JFrame에 추가 된 JPanel에 추가했습니다.JTable에서 DefaultTableModel의 행을 업데이트하는 방법은 무엇입니까?

거기에있는 mousePressed 이벤트는 새로운 클래스 tData를 시작하고 벡터 요소에 포함 된 문자열로 데이터베이스의 데이터를 반환하는 메서드를 호출합니다.

내가 어떻게 할 게다가, BTN는이 테이블을 업데이트 누를 때마다,

은 BTN가 테이블을 갱신하지만 테이블의 끝에 같은 데이터를 추가 누를 때마다 무슨 일이 일어날 않습니다 ?

어떤 일이 발생합니까?

Object columnHeaders[] = {"Fname", "Mname", "Lname", "Age"}; 
    Object data[][] = {{}}; 
    final DefaultTableModel dtm = new DefaultTableModel(data, columnHeaders); 

    JTable tb = new JTable(dtm); 
    JScrollPane scrollPane = new JScrollPane(tb); 

    tableWrap.add(scrollPane); 

    btn.addMouseListener(new MouseAdapter() { 

     @Override 
     public void mousePressed(MouseEvent arg0) { 
      tData h = new tData(10)); 
      Vector<String> v = h.getInfo(); 
      for(int i = 0; i < v.size() ; i++) { 
       dtm.insertRow(i, new Object[]{v.get(i).split(",")[0], v.get(i).split(",")[1], v.get(i).split(",")[2], v.get(i).split(",")[3]}); 
      } 

      dtm.fireTableDataChanged(); 
      frame.repaint(); 
     } 
    }); 

답변

4

몇 가지 문제 :

당신이 버튼을 누를 때마다 전체 테이블을 업데이트해야 할 것 같습니다
  1. . 여기에는 세 가지 옵션이 있습니다 : setDataVector을 사용하여 DefaultTableModel을 업데이트하고, 새 모델을 처음부터 다시 만들고 setModel으로 JTable에 설정하고 AbstractTableModel을 기반으로 자신의 TableModel을 구현하고 적절한 TableModel 이벤트를 발생 시키십시오. addRowremoveRow을 사용하여 모델을 업데이트 할 수도 있지만 이는 많은 이벤트를 유발할 수 있으므로 매우 효과적이지 않습니다.

  2. 는 "버튼을 누르면"이벤트에 대한 사용자 오히려 ActionListener을 듣고 (그리고 addActionListener 사용하여 추가) 또는 동작을 (그리고 setAction로 설정)합니다.

  3. DefaultTableModel에서 구조를 수정할 때 fireTableDataChanged();을 호출 할 필요가 없습니다. 기본 데이터를 수정할 때마다 적절한 TableModel 이벤트를 자동으로 발생시킵니다. frame.repaint()에 전화하지 마십시오. 쓸데없고 시간이 오래 걸릴 수 있습니다. 관련없는

  4. : Java coding conventions 다음 사항을 고려하고 의미있는 변수 이름 (클래스 이름은 대문자로 시작).

1

여기에 작성한 코드에는 몇 가지 문제가 있습니다. 먼저, mousePressed 메서드에서 코드와 관련된 문제를 해결해 보겠습니다.

데이터 제공 코드에서 Vector를 가져온 다음 테이블의 0 ... n 행을 새 데이터로 설정합니다. 이를 수행하는 방법은 버튼을 누를 때 필요한 데이터를 반환하는 custom extension of AbstractTableModel을 작성하는 것입니다.

또 다른 문제는 단추 누르기를 처리하는 방법입니다. 버튼에 마우스 수신기를 추가하는 것은 올바른 처리 방법이 아닙니다. 단추에 ActionListener를 추가하려고합니다. 해당 청취자는 버튼을 눌렀다 놓을 때마다 해고됩니다. 여기

관련 문제