是否可以一次更新JTable Entire行

时间:2013-01-19 15:45:49

标签: java swing

是否可以一次更新JTable Entire行,而不是列式? 这是我的计划如下 目前我只能修改列 使用

model.setValueAt("1111", 0, 0)

我可以使用

吗?
model.setValueAt(new Object[]{"1111","Pavan","Developer"}, 0, 0);


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
public class Preethi {
    protected void initUI() {
        final DefaultTableModel model = new DefaultTableModel(new String[] {
                "Id", "Name", "Desg" }, 0);
        final JTable table = new JTable(model);
        // table.setFillsViewportHeight(true);
        JFrame frame = new JFrame(Preethi.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane scrollpane = new JScrollPane(table);
        frame.add(scrollpane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        Vector vec = new Vector();
        vec.add("1122");
        vec.add("Iraneee");
        vec.add("Dev");
        model.insertRow(0, vec);
        model.setValueAt("1111", 0, 0);
        //model.setValueAt(new Object[]{"1111","Pavan","Developer"}, 0, 0);

    }

    public static void main(String[] args) throws ClassNotFoundException,
            InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Preethi().initUI();
            }
        });
    }

}

2 个答案:

答案 0 :(得分:3)

docs所示,setValueAt设置单个单元格值。

  

在列和行设置单元格的对象值。 aValue是新值。

但是,您可以重载处理Object数组的方法:

class MyTableModel extends DefaultTableModel {

   public MyTableModel(Object[] columnNames, int rowCount) {
      super(columnNames, rowCount);
   }

   public void setValueAt(Object[] valueArray, int row) {
      int column = 0;
      for (Object cellValue: valueArray) {
         setValueAt(cellValue, row, column);
         column++;
      }
   }
}

使用此模型,您就可以设置给定行的值:

model.setValueAt(new Object[] { "1111", "Pavan", "Developer" }, 0);

略微缩短版本:

class MyTableModel extends DefaultTableModel {

   public MyTableModel(Object[] columnNames, int rowCount) {
      super(columnNames, rowCount);
   }

   public void setValueAt(Object[] valueArray, int row) {

      getDataVector().setElementAt(new Vector(Arrays.asList(valueArray)), row);     
   }
}

答案 1 :(得分:1)

  

是否可以一次更新JTable Entire行,而不是   列明智吗?

因为您不想遍历整行。我建议您删除该特定行,然后使用addRow方法添加包含更新值的新行。

OR

如果表中的每一行都是Object,那么您可以获取该表正在使用的列表,然后从列表中删除该列表并将新对象添加到列表中。