Java 以比使用TableModel或fireRowValueChanged()方法更简单的方式添加记录后刷新JTable

Java 以比使用TableModel或fireRowValueChanged()方法更简单的方式添加记录后刷新JTable,java,swing,user-interface,jtable,awt,Java,Swing,User Interface,Jtable,Awt,我正在做一个简单的JTable程序,它没有任何严肃的代码。只是基本的。这是我的代码片段 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTable; public class Sampl

我正在做一个简单的JTable程序,它没有任何严肃的代码。只是基本的。这是我的代码片段

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTable;


public class SampleClass implements ActionListener{
JFrame frame;
JTable table;
JButton button;

String columnName[] = {"Science"};
String rowName[][] = new String[10][1];

int i;

public static void main(String args[])
{
    SampleClass obj = new SampleClass();
    obj.setRowValues();
    obj.build();
}
public void build() //Constructing GUI
{
    frame = new JFrame();
    frame.setSize(400, 400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    table = new JTable(rowName, columnName);
    table.setFillsViewportHeight(true);

    button = new JButton("New Value");

    frame.getContentPane().add(table, BorderLayout.NORTH);
    frame.getContentPane().add(button, BorderLayout.SOUTH);

    frame.setVisible(true);

}
public void setRowValues() //Setting initial row values
{
    for (i = 0 ; i < 5 ; i++)
    {
        rowName[i][0] = i + "           First";
    }
}
public void actionPerformed(ActionEvent arg0) { //Incrementing rowValues and repainting with no effect
    rowName[i][0] = "New Value";
    i++;
    table.repaint();
}
导入java.awt.BorderLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JTable;
公共类SampleClass实现ActionListener{
JFrame框架;
JTable表;
按钮;
字符串columnName[]={“科学”};
字符串rowName[][]=新字符串[10][1];
int i;
公共静态void main(字符串参数[])
{
SampleClass obj=新的SampleClass();
obj.setRowValues();
obj.build();
}
public void build()//正在构建GUI
{
frame=新的JFrame();
框架。设置尺寸(400400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
table=新的JTable(rowName、columnName);
表.setFillsViewPerthweight(真);
按钮=新按钮(“新值”);
frame.getContentPane().add(表,BorderLayout.NORTH);
frame.getContentPane().add(按钮,BorderLayout.SOUTH);
frame.setVisible(true);
}
public void setRowValues()//设置初始行值
{
对于(i=0;i<5;i++)
{
rowName[i][0]=i+“First”;
}
}
public void actionPerformed(ActionEvent arg0){//增加行值并重新绘制,但不起作用
rowName[i][0]=“新值”;
i++;
表1.repaint();
}
}

这里我的问题是,当我单击按钮时,会在rowName[]数组中添加一个额外的值。我希望这能反映到JTable表中。我尝试了重新绘制(),但没有效果。请告诉我更新或刷新JTable的最简单方法

我见过其他使用AbstractTableModel并调用fireRowValueChanged()方法的stackoverflow条目。在这里,我只使用基本的

以比使用TableModel或fireRowValueChanged()方法更简单的方式添加记录后刷新JTable

唯一正确的方法是更新TableModel。然后,TableModel将调用适当的fireXXX(…)方法来通知JTable数据的更改,以便表可以重新绘制自己。您永远不需要手动调用repaint()


要向
DefaultTableModel
添加一行新数据,您可以使用
addRow(…)
方法。

您能帮我更新答案吗。我试过这个模型,但没有work@4k3R,
我尝试了DefaultTableModel,但没有成功
-在哪里?我看不到您使用的代码,因此我如何提出建议。如果你以前从未使用过这种方法,那么你可以在论坛/网站上搜索示例。没关系。。我实现了DefaultTableModel,ann使用addRow(int arg)方法在底部放置一个新行(尽管这不是我想要的)。@4k3R,你应该“接受”答案,这样人们就知道问题已经解决了
虽然它不是我想要的
addRow()方法是您问题的正确答案。您需要了解Swing组件是如何工作的。永远不要直接更新阵列。事实上,在创建DefaultTableModel时,它会将数组中的数据复制到DefaultTableModel用来保存数据的向量。