2012-02-07 66 views
0
  1. 我有一個將數據加載到JTable中
  2. 我能夠加載新數據的JTable負載按鈕。
  3. 但是當我重新加載數據並點擊jcheckbox時,舊數據出現了。 我正在使用defaulttablemodel選項。 請運行編,並幫助我在哪裏出錯了。JTable中刷新了新的數據

    import java.awt.BorderLayout; 
    import java.awt.EventQueue; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import javax.swing.JButton; 
    import javax.swing.JComponent; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.JScrollPane; 
    import javax.swing.JTable; 
    import javax.swing.table.DefaultTableModel; 
    
    public class MainWindow extends JFrame { 
    JTable table; 
    private static final int CHECK_COL = 3; 
        String[] columnNames = { 
        "Country", "Capital", "Population in Millions", "Democracy"}; 
        Object[][] data = { 
        {"USA", "Washington DC", 280, false}, 
        {"Canada", "Ottawa", 32, false}, 
        {"United Kingdom", "London", 60, false}, 
        {"Germany", "Berlin", 83, false}, 
        {"France", "Paris", 60, false}, 
        {"Norway", "Oslo", 4.5, false}, 
        {"India", "New Deli", 1046, false} 
        }; 
        DefaultTableModel dtm ; 
        // static JScrollPane scrollpane= new JScrollPane(); 
        public MainWindow() { 
        setTitle("Marking of data"); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        JButton button1 = new JButton("load"); 
        button1.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         if(dtm!=null){ 
          System .out .println("NOT EMPTY"); 
          int c = dtm.getRowCount(); 
         // for (int i=c-1; i>=0; i--) 
         // { 
          // dtm.removeRow(i); 
          // table.revalidate(); 
         // } 
          loadtable(); 
          } 
         if(dtm==null){ 
          System .out .println("EMPTY"); 
          loadtable(); 
         } 
         } 
         }); 
    
         JButton button = new JButton("check"); 
         button.addActionListener(new ActionListener() { 
         @Override 
         public void actionPerformed(ActionEvent e) { 
         for (int row = 0; row < table.getRowCount(); row++) { 
          Boolean b = ((Boolean) table.getValueAt(row, CHECK_COL)); 
          if (b.booleanValue()) { 
           System.out.print("row " + row + " is " + b + ": "); 
           for (int col = 0; col < table.getColumnCount(); col++) { 
            System.out.print(table.getValueAt(row, col) + " "); 
           } 
           System.out.println(); 
          } 
         } 
         } 
         }); 
         JPanel buttonpanel1 = new JPanel(); 
         buttonpanel1.add(button1); 
         JPanel buttonpanel = new JPanel(); 
         buttonpanel.add(button); 
         add(buttonpanel, BorderLayout.SOUTH); 
         add(buttonpanel1, BorderLayout.NORTH); 
         pack(); 
         setLocationByPlatform(true); 
         setVisible(true); 
         } 
         public void loadtable(){ 
        dtm = new DefaultTableModel(data, columnNames) { 
         @Override 
         public Class getColumnClass(int col) { 
          return getValueAt(0, col).getClass(); 
         } 
         @Override 
         public boolean isCellEditable(int rowIndex, int colIndex) { 
          return (colIndex == CHECK_COL); 
         } 
         }; 
         table = new JTable(dtm); 
         JScrollPane scrollpane = new JScrollPane(table); 
         add(scrollpane, BorderLayout.CENTER); 
         pack(); 
         setVisible(true); 
         } 
    
    
        public static void main(String args[]) { 
        EventQueue.invokeLater(new Runnable() { 
        @Override 
        public void run() { 
         new MainWindow(); 
         } 
        }); 
        } 
         } 
    

需要幫助。請參考

回答

0

默認表模型將數據從二維數組複製到它自己的向量中。

每次按下加載按鈕時,都會使用相同的數據創建一個新的默認表模型,並向新的表模型的向量創建一個新副本。

您的代碼會在每次按下加載按鈕時重置表格模型,因此當然會出現舊數據。