Trong ứng dụng của tôi, tôi đã sử dụng bảng java tương tự ví dụ this. Vấn đề của tôi là khi tôi thay đổi một giá trị của một ô (ngay cả trong ví dụ trên) mô hình dữ liệu không được cập nhật cho đến khi tôi bấm vào một ô khác. Ngay cả khi tôi nhấp vào vùng màu xám bên dưới bảng sau khi thay đổi giá trị ô thì mô hình sẽ không thay đổi. Tôi nghĩ rằng lý do là tế bào ở lại tập trung cho đến khi tôi bấm vào một tế bào khác nhau. Làm cách nào để tránh điều này và cập nhật mô hình mà không cần nhấp vào ô bảng. Cảm ơn trướcCập nhật ô JTable không hoạt động
Tôi có chỉnh sửa các mẫu mã trên để phản ánh các vấn đề
public class JTableDemo extends JApplet {
private JTextArea txt = new JTextArea(4, 20);
// The TableModel controls all the data:
class DataModel extends AbstractTableModel {
Object[][] data = { { "one", "two", "three", "four" },
{ "five", "six", "seven", "eight" },
{ "nine", "ten", "eleven", "twelve" }, };
// Prints data when table changes:
class TML implements TableModelListener {
public void tableChanged(TableModelEvent e) {
txt.setText(""); // Clear it
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++)
txt.append(data[i][j] + " ");
txt.append("\n");
}
}
}
public DataModel() {
addTableModelListener(new TML());
fireTableDataChanged();
}
public int getColumnCount() {
return data[0].length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public void setValueAt(Object val, int row, int col) {
data[row][col] = val;
System.out.println(val);
// Indicate the change has happened:
fireTableDataChanged();
}
public boolean isCellEditable(int row, int col) {
return true;
}
}
public void init() {
Container cp = getContentPane();
JTable table = new JTable(new DataModel());
cp.add(new JScrollPane(table));
cp.add(BorderLayout.SOUTH, txt);
}
public static void main(String[] args) {
run(new JTableDemo(), 350, 200);
}
public static void run(JApplet applet, int width, int height) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(applet);
frame.setSize(width, height);
applet.init();
applet.start();
frame.setVisible(true);
}
}
Khi bạn chạy ví dụ bạn có thể xem nội dung bảng trong vùng văn bản bên dưới bảng. Sau khi bạn cập nhật một ô, nó sẽ xuất hiện trong hộp văn bản bên dưới. Nhưng phương thức 'setValueAt' sẽ không gọi cho đến khi bạn nhấp vào một ô khác.
Bạn có thể chỉnh sửa câu hỏi của mình và thêm [SSCCE] (http://sscce.org) để hiển thị sự cố không? –
giống như SSCCE +1 – mKorbel