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

また

テーブルの各行がObjectthenの場合、テーブルが使用しているリストを取得し、それをリストから削除して、新しいオブジェクトをリストに追加できます。

于 2013-01-19T16:42:46.367 に答える