2016-04-15 214 views
1

如何在點擊按鈕後將數據更新爲JTable?我有代碼將數據添加到JTable,但它顯示所有行的相同數據。這裏是下面的代碼:如何在點擊按鈕後將數據更新爲JTable

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.util.Vector; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

import mygui.MainParent; 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class Test { 
    Vector<String> row; 
    DefaultTableModel DFMO; 
    Vector<Vector> rowData; 
    JFrame frame; 
    private int count = 0; 
    public static void main(String arg[]){ 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Test window = new Test(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 

    } 
public Test() { 
    frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JButton mybtn = new JButton("Click Me"); 
    frame.getContentPane().add(mybtn, BorderLayout.SOUTH); 

    row = new Vector<String>(); 
    rowData = new Vector<Vector>(); 

    Vector<String> columnNames = new Vector<String>(); 
    columnNames.addElement("Column One"); 
    columnNames.addElement("Column Two"); 
    columnNames.addElement("Column Three"); 

    DFMO = new DefaultTableModel(rowData, columnNames); 
    JTable table = new JTable(DFMO); 
    JScrollPane scrollPane = new JScrollPane(table); 
    frame.getContentPane().add(scrollPane, BorderLayout.CENTER); 
    frame.setSize(300, 150); 
    frame.setVisible(true); 

    mybtn.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      datachange(); 
     } 
    }); 

    datachange(); 

    } 
    public void datachange(){ 
     count++; 
     row.addElement("Row"+count+"-Column1"); 
     row.addElement("Row"+count+"-Column2"); 
     row.addElement("Row"+count+"-Column3"); 
     rowData.addElement(row); 
     DFMO.fireTableDataChanged(); 
    } 
} 

然而,當我執行此代碼它不顯示更新的行,即使計數值的變化。下圖顯示了代碼的輸出。

http://i.stack.imgur.com/tGem3.jpg

回答

1

試試這個。你不停地添加相同的矢量

public void datachange(){ 
    count++; 
    Vector<String> newRow = new Vector<>(); 
    newRow.addElement("Row"+count+"-Column1"); 
    newRow.addElement("Row"+count+"-Column2"); 
    newRow.addElement("Row"+count+"-Column3"); 
    DFMO.addRow(newRow); 
    //rowData.addElement(row); 
    DFMO.fireTableDataChanged(); 
} 
+0

謝謝@Norsk –

0

您將數據添加到矢量對象(rowData)。

您應該做的是將數據直接添加到DefaulTableModel對象。

datachange()方法更換

rowData.addElement(row); 

DMFO.addRow(row);