是否可以一次更新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();
}
});
}
}
答案 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
,那么您可以获取该表正在使用的列表,然后从列表中删除该列表并将新对象添加到列表中。