2013-07-29 3 views
0

MySql에 데이터를 삽입 한 후 JTable을 새로 고치려고했으나 제대로 작동하지 않습니다.mysql 데이터베이스에 데이터를 삽입 한 후 JTable 새로 고침

데이터가 누락 된 JPanel로 채워지고 단추를 클릭하고 mysql 콘솔을 체크인하면 데이터가 데이터베이스에 추가되지만 테이블을 열면 프로그램을 다시 시작하지 않으면 업데이트되지 않습니다.

public class verTodos extends JPanel { 

    contactoDAO dao = new contactoDAO(); 
    List<contacto> contactos = dao.getAll(); 
    private JTable table; 

    public verTodos() {   
      String[] colName = { "Id", "Nombre", "Apellido", "Telefono", 
       "Direccion", "Email", "Rubro1", "Rubro2", "Rubro3" }; 
     Object[][] obj = new Object[contactos.size()][10];   
     for (int i = 0; i < contactos.size(); i++) { 
      contacto c = contactos.get(i);  
      obj[i][0] = c.getId(); 
      bj[i][1] = c.getNombre(); 
      obj[i][2] = c.getApellido(); 
      obj[i][3] = c.getTelefono(); 
      obj[i][4] = c.getDireccion(); 
      obj[i][5] = c.getEmail(); 
      obj[i][6] = c.getRubro1(); 
      obj[i][7] = c.getRubro2(); 
      obj[i][8] = c.getRubro3();  
      setBounds(100, 100, 800, 300);       
     } 
     DefaultTableModel contactTableModel = new DefaultTableModel(obj,colName);   
     table = new JTable(contactTableModel);   
     setLayout(new BorderLayout(0, 0));  
     contactTableModel.fireTableDataChanged(); 
     contactTableModel.setColumnIdentifiers(colName);    
      add(table.getTableHeader(), BorderLayout.NORTH); 
     JScrollPane scrollPane = new JScrollPane(); 
     add(scrollPane, BorderLayout.CENTER); 
     scrollPane.setViewportView(table); 
     repaint();  
    }  
} 

이가 JPanel의 들어있는 메인 화면입니다 :

내 코드입니다

public class principal extends JFrame { 

JFrame frame = new JFrame(); 
JPanel container = new JPanel(); 
CardLayout cl = new CardLayout(); 
private final JMenuBar menuBar = new JMenuBar(); 

/..... 
..... 

private final JMenuItem mntmVerTodos = new JMenuItem("Ver todos"); 
    private final JMenuItem mntmAgregar = new JMenuItem("Agregar"); 
agregar ag = new agregar(); 
verTodos ver = new verTodos(); 
... 
    ... 


public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      new principal(); 

     } 
    }); 

} 


public principal() { 

    textField.setMaximumSize(new Dimension(300, 500)); 
    textField.setBounds(new Rectangle(0, 0, 30, 0)); 
    textField.setColumns(10); 

    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 
    int X = (screen.width/2) - (1366/2); 
    int Y = (screen.height/2) - (720/2); 

    frame.setBounds(X, Y, 1363, 720); 

    container.setLayout(cl); 
    ver.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); 

    container.add(ver, "ver"); 
      container.add(ag, "ag"); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 

    frame.getContentPane().add(container); 

    frame.setJMenuBar(menuBar); 

    menuBar.add(mnNewMenu); 
      cl.show(container, "ver"); 

    mntmVerTodos.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

      cl.show(container, "ver"); 


     } 
    }); 

    mnContactos.add(mntmVerTodos); 





    mnContactos.add(mntmAgregar); 
    mntmModificar.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      cl.show(container, "mod"); 

     } 
    }); 



    menuBar.add(btn); 

    frame.setVisible(true); 

} 

가}

데이터베이스가 업데이트되면 당신은 당신의 모델을 다시 채울 필요가
+0

Java 명명 규칙을 배우고 준수하십시오. – kleopatra

답변

0

. 클릭하면 새로 고침 버튼이 추가되어 contactTableModel이 업데이트됩니다.

+0

다른 JPanel에 추가 된 데이터가 데이터베이스에 추가 될 때 자동으로 새로 고침하고 싶습니다. 따라서 verTodos JPanel로 돌아 왔을 때 이미 업데이트되었습니다. 내가 그걸 보았을 때 나는 문제가 있다는 것을 깨닫고 있었다. 다시 돌아올 때 JPanel은 새로 고침되지 않는다. – user2623908

+0

자동으로 새로 고치려면 데이터베이스를 모니터링하는 스레드를 만들어서 어떤 것이 있는지 찾는다. 변경되면 테이블을 갱신하십시오. 전체 프로젝트를 어딘가에 업로드하면 더 도움이 될 수 있습니다. – JBuenoJr

+0

이렇게 빨리 응답 해 주셔서 감사합니다. 패널의 컨테이너로 포스트를 편집했습니다. JMenuItem mntmVerTodos를 클릭하면 verTodos 패널을 다시로드 할 수있는 방법이 있습니까? – user2623908

관련 문제