2014-04-09 2 views
0

그래서이 애플리케이션에는 JTable이있다. JTable은 JScrollPane의 내부에 있고 JScrollPane은 JFrame에 그려져 있습니다.내 JTable을 다시 칠하는 방법

이제 응용 프로그램에서 새 창을 열어 테이블에 새 행을 추가하고 단추를 클릭하여 변경 사항을 저장하면 새 창이 닫힙니다.

지금은 새로운 창을 닫은 후 다음 줄을 추가 시도 :

askTableInfo(); //a method to save the info in database to table and then save the table to variable 'table' 
table.repaint(); 
scrollPane.repaint(); 

그리고 물론 재 페인트의

(); 그것으로 자기. 하지만 여전히 JFrame에서 내 테이블을 업데이트하지 않는 것 같습니다.

여기에 어떤 문제가있을 수 있습니까? , AndmeKysija는 생각을해야 당신이 AndmeKysija의 결과에서 새 TableModel을 만드는 일을해야

public class AppWindow extends JFrame implements ActionListener { 
    String user = ""; 
    JLabel greetText = new JLabel(); 
    JPanel panel = new JPanel(); 
    JPanel panel2 = new JPanel(new GridLayout(1, 3)); 
    JScrollPane scrollPane; 
    JTable tabel; 
    JButton newBook = new JButton("Add a book"); 
    JButton deleteBook = new JButton("Remove a book"); 
    JButton changeBook = new JButton("Change a book"); 
    int ID; 

    public AppWindow(String user, int ID) { 
     this.ID = ID; 
     this.user = user; 
     setSize(500, 500); 
     setTitle("Books"); 

     setLayout(new BorderLayout()); 
     greetText.setText("Hi "+user+" here are your books:"); 
     add(greetText, BorderLayout.NORTH); 

     askData(); 
     panel.add(scrollPane); 
     add(panel, BorderLayout.CENTER); 

     panel2.add(newBook); 
     panel2.add(deleteBook); 
     panel2.add(changeBook); 
     add(paneel2, BorderLayout.SOUTH); 

     newBook.addActionListener(this); 

     setVisible(true); 
    } 

    private void askData() { 
     DataAsker asker = null; 
     try { 
      asker = new AndmeKysija(ID); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     table = asker.giveTable(); 
     scrollPane = new JScrollPane(tabel); 
    } 

    public static void main(String[] args){ 
     AppWindow window = new AppWindow("Name", 2); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource() == newBook){ 
       new BookAdded(ID); 
       panel.revalidate(); 
       panel.add(scrollPane); 
       panel.repaint(); 
       repaint(); 
     } 
    } 
} 
+0

동일한 및/또는 동일한 것은 테이블 모델에 대한 간다 ... – MadProgrammer

+0

글쎄, 내 'askTableInfo() '메소드에는'iscrollPane = new JScrollPane (table); '이있다.' 이것은 문제가 될 수 있습니까? 이 경우, 이미 작성한 Scrollpane을 새로운 정보로 업데이트하려면 어떻게해야합니까? – Veske

+0

테이블 모델 업데이트 – MadProgrammer

답변

1

아니 가장 좋은 방법,하지만 라인을 통해 당신을 얻을 것입니다 ...

public AppWindow(String user, int ID) { 
    this.ID = ID; 
    this.user = user; 
    setSize(500, 500); 
    setTitle("Books"); 

    setLayout(new BorderLayout()); 
    greetText.setText("Hi "+user+" here are your books:"); 
    add(greetText, BorderLayout.NORTH); 

    JTable table = askData(); 
    scrollPane.setViewportView(table); 
    panel.add(scrollPane); 
    add(panel, BorderLayout.CENTER); 

    panel2.add(newBook); 
    panel2.add(deleteBook); 
    panel2.add(changeBook); 
    add(paneel2, BorderLayout.SOUTH); 

    newBook.addActionListener(this); 

    setVisible(true); 
} 

private JTable askData() { 
    DataAsker asker = null; 
    try { 
     asker = new AndmeKysija(ID); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return asker.giveTable(); 
} 

public static void main(String[] args){ 
    AppWindow window = new AppWindow("Name", 2); 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == newBook){ 
     new BookAdded(ID); 
     JTable table = askData(); 
     scrollPane.setViewportView(table); 
    } 
} 

또는 UI의 개념. 당신은 단순히

스윙이 Model-View-Controller 패러다임의 세인 것을 사용 ...보기를 업데이트 할 JTable#setModel을 사용해야합니다 그것은 당신이 업데이트하려는 테이블과있는 화면에 테이블 같은 소리

+0

JTable을 선언하면 NullPointerExeption이 표시됩니다. 이상한 종류. 내가 전에도 선언했다는 것을 의미한다. ... – Veske

+0

_ 가장 좋은 방법 _ 완전 ACK ;-) 그럼 왜 그것을 보여줄 수 있느냐 ... 쓸모없는 부분에 국한된다는 것은 너무나 나쁜 일이다. (잘 알고 있듯이 :-) @ Veske - JTable에 대한 좋은 자습서를 읽고 테이블/모델의 상호 작용을 이해하십시오. 결국에는 미친 듯이 제안합니다. – kleopatra

+0

글쎄, 나는 문제를 해결하는 방법을 모른다. 표시 한 코드는 일부 포인터 제외를 만듭니다. 어쩌면 내가 창을 닫고 다시 열어야한다고 생각하면 적어도 변경 사항이 표시됩니다. – Veske

관련 문제