Uygulamamda, this örneğine benzer bir java tablosu kullanıyorum. Sorunum, bir hücrenin değerini değiştirdiğimde (yukarıdaki örnekte bile olsa) farklı bir hücreye tıklayana kadar veri modeli güncellenmiyor. Modelin değişmeyeceği hücre değerini değiştirdikten sonra tablonun altındaki gri alana tıklıyorum bile. Sanırım farklı bir hücreye tıklayana kadar odaklanmış hücre kalması. Bunu nasıl önleyebilirim ve tablo hücresini tıklatmadan modeli güncelleyebilirim. Eğer masanın altındaki metin alanında masa içeriği görebilir örneği çalıştırdığınızda ben düzenlemek Yukarıdaki örnek kod var JTable Hücre Güncelleştirmesi çalışmıyor
peşin
teşekkürler sorunupublic 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);
}
}
yansıtacak. Bir hücreyi güncelledikten sonra aşağıdaki metin kutusunda görünmelidir. Ancak 'setValueAt' yöntemi, farklı bir hücreye tıklayana kadar çağrı yapmayacaktır. davranış beklenen
Sorunuzu düzenleyebilir ve sorunu gösteren bir [SSCCE] (http://sscce.org) ekleyebilir misiniz? –
SSCCE +1 – mKorbel