如何在按钮单击后从向量更新数据到JTable

时间:2016-04-15 10:36:19

标签: java swing

如何在单击按钮后从向量更新数据到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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

You are adding the data to the Vector object (rowData).

What you should do is add the data directly to the DefaulTableModel object.

Replace

rowData.addElement(row);

with

DMFO.addRow(row);

in your datachange() method.