Nella mia applicazione ho usato una tabella java che è simile all'esempio this. Il mio problema è quando cambio un valore di una cella (anche nell'esempio sopra) il modello di dati non viene aggiornato finché non clicco su una cella diversa. Perfino clicco sull'area grigia sotto la tabella dopo aver cambiato il valore della cella che il modello non cambierà. Penso che la ragione sia che la cella rimanga focalizzata fino a quando clicco su una cella diversa. Come posso evitare questo e aggiornare il modello senza fare clic sulla cella della tabella. Grazie in anticipoJTable Cell Update non funziona
ho modificare il codice di esempio sopra per riflettere il problema
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);
}
}
Quando si esegue l'esempio è possibile visualizzare il contenuto della tabella nell'area di testo sotto la tabella. Dopo aver aggiornato una cella dovrebbe apparire nella casella di testo qui sotto. Ma il metodo 'setValueAt' non chiamerà finché non clicchi su una cella diversa.
Puoi modificare la domanda e aggiungere un [SSCCE] (http://sscce.org) che mostri il problema? –
sembra come SSCCE +1 – mKorbel