2

是否可以一次更新 JTable 整行,而不是逐列?这是我下面的程序目前我只能使用

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();
            }
        });
    }

}
4

2 回答 2

3

正如文档所示,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);     
   }
}
于 2013-01-19T16:43:05.477 回答
1

是否可以一次更新 JTable 整行,而不是逐列?

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

或者

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

于 2013-01-19T16:42:46.367 回答