如何在点击按钮后将数据更新为JTable

问题描述:

如何在点击按钮后将数据更新为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

试试这个。你不停地添加相同的矢量

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 –

您将数据添加到矢量对象(rowData)。

您应该做的是将数据直接添加到DefaulTableModel对象。

datachange()方法更换

rowData.addElement(row); 

DMFO.addRow(row);