Java 动态重置JTable的内容;设置列标题一次

Java 动态重置JTable的内容;设置列标题一次,java,swing,jtable,Java,Swing,Jtable,在java代码中,我使用JTable。它不可编辑,它显示了一些内容 我必须: 设置列标题一次 动态设置内容 到目前为止,我有: public class MyClass { final JTable table; public MyClass(List<List> changingContent, String[] columnHeaders) { table = new JTable(new DefaultTableModel()); initTable(colu

在java代码中,我使用
JTable
。它不可编辑,它显示了一些内容

我必须:

  • 设置列标题一次
  • 动态设置内容
到目前为止,我有:

public class MyClass {
 final JTable table;

 public MyClass(List<List> changingContent, String[] columnHeaders) {
  table = new JTable(new DefaultTableModel());
  initTable(columnHeaders); //only done once
  redrawTable(changingContent); //happens always when content changed
 }

 public void initTable(String[] columnHeaders) {
  //???? 1)
 }

 public void redrawTable(List<List> content) {
  int index = 0;
    for(Object o:content) {
        String[] rowData = presentAsStringArray(o);

        for(int i=0; i<rowData.length; i++) {
            int row = index;
            int column = i;

            //this produces an error since the rows don't exist yet
            table.getModel().setValueAt(rowData[i], row, column);
        }
        index++;
    }
 }
}
公共类MyClass{
最终JTable表;
公共MyClass(列表更改内容,字符串[]列标题){
table=新的JTable(新的DefaultTableModel());
initTable(columnHeaders);//只执行一次
重画表(更改内容);//总是在内容更改时发生
}
public void initTable(字符串[]列标题){
//???? 1)
}
公共作废重绘表(列表内容){
int指数=0;
for(对象o:内容){
字符串[]rowData=presentAsStringArray(o);

对于(int i=0;i不确定我是否理解您的意思。当您需要更改行数时,只需使用方法
DefaultTableModel.setRowCount(int)
。如下所示:

public class MyClass {
     final JTable table;
     final DefaultTableModel model;

     public MyClass(List<List> changingContent, String[] columnHeaders) {
          model = new DefaultTableModel(columnHeaders, 0); // init model with 0 rows
          table = new JTable(model);
          redrawTable(changingContent); //happens always when content changed
     }


     public void redrawTable(List<List> content) {
        model.setRowCount(content.size()); // set the correct row count here
        int index = 0;
        for(Object o:content) {
            String[] rowData = presentAsStringArray(o);

            for(int i=0; i<rowData.length; i++) {
                int row = index;
                int column = i;

                //this produces an error since the rows don't exist yet
                model.setValueAt(rowData[i], row, column);
            }
            index++;
        }
     }
}
公共类MyClass{
最终JTable表;
最终模型;
公共MyClass(列表更改内容,字符串[]列标题){
model=新的DefaultTableModel(columnHeaders,0);//具有0行的初始模型
表=新JTable(型号);
重画表(更改内容);//总是在内容更改时发生
}
公共作废重绘表(列表内容){
model.setRowCount(content.size());//在此处设置正确的行数
int指数=0;
for(对象o:内容){
字符串[]rowData=presentAsStringArray(o);
对于(int i=0;i
使用DefaultTableModel构造函数`DefaultTableModel(String[]columnHeaders,int rows)。它坏了,因为我不知道此时的行数(我也不知道,因为这可能会更改)

这是正确的方法。您只需将行设置为0。只有在第一次创建表/模型时才能执行此操作

动态设置内容

然后可以使用setRowCount(0)清除所有数据

然后使用DefaultTableModel的
addRow(…)
方法动态添加行

所以你的基本逻辑是:

DefaultTableModel model = (DefaultTableModel)table.getModel();
model.setRowCount(0);

for(Object o:content) 
{
    String[] rowData = presentAsStringArray(o);
    model.addRow( rowData );
}