JTable#setValue
का उपयोग न करें JTable
. को अपडेट करते समय , इसके बजाय, नई पंक्तियाँ जोड़ें या मॉडल के माध्यम से मौजूदा पंक्तियों को संशोधित करें।
साथ ही, आप rowNum
. में वृद्धि नहीं कर रहे हैं मान, इसलिए आप हमेशा तालिका की पहली पंक्ति के साथ इंटरैक्ट कर रहे हैं
सरल उदाहरण
एक साधारण उदाहरण जो स्विंग Timer
. का उपयोग करता है मॉडल में एक नई पंक्ति जोड़ने के लिए...
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
public class TestTableModel01 {
public static void main(String[] args) {
new TestTableModel01();
}
public TestTableModel01() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
final DefaultTableModel model = new DefaultTableModel(new Object[]{"A", "B", "C", "D", "E"}, 0);
JTable table = new JTable(model);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Timer timer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (model.getRowCount() < 100) {
int row = model.getRowCount();
model.addRow(new Object[]{
row + "x" + 0,
row + "x" + 1,
row + "x" + 2,
row + "x" + 3,
row + "x" + 4
});
} else {
((Timer)(e.getSource())).stop();
}
}
});
timer.start();
}
});
}
}