Java - בעייה עם Listeners
כתבתי תוכנית שאמורה לייצג טבלה מעודכנת (JTable), כלומר כל פעם שמשנים ערך ב- TableModel שלה, אז גם תצוגת בערכים שבטבלה מתעדכנים בהתאם. הבעייה היא שמשום מה הנתונים לא מתעדכנים מעצמם, אלא אם כן אני בוחר שורה מסויימת בטבלה, ואז הערכים מתעדכנים. מזה אני מסיק שפספסתי משהו בקשר ל-Listeners. עשיתי משהו כזה:
כתבתי תוכנית שאמורה לייצג טבלה מעודכנת (JTable), כלומר כל פעם שמשנים ערך ב- TableModel שלה, אז גם תצוגת בערכים שבטבלה מתעדכנים בהתאם. הבעייה היא שמשום מה הנתונים לא מתעדכנים מעצמם, אלא אם כן אני בוחר שורה מסויימת בטבלה, ואז הערכים מתעדכנים. מזה אני מסיק שפספסתי משהו בקשר ל-Listeners. עשיתי משהו כזה:
class DataTable extends AbstractTableModel implements TableModelListener { Matrix myMatrix ; // this is the matrix that includes all the data ... public void setValueAt(Object newObj, int row, int col) { myMatrix.setElementAt(newObj, row, col) ; } public void tableChanged (TableModelEvent tme) { fireTableChanged(tme); } } public class TableApp { DataTable data = new DataTable () ; JTable table = new JTable (data) ; table.setValueAt (new Integer(5), 0, 1); // sets the value at (0,1) to 5 }
לפי מה שהבנתי (וכנראה יש לי טעות) ה- setValueAt של JTable קורא לפונקציה עם אותו שם ב- TableModel שלו, וזה אמור להפעיל את הפונקציה tableChanged של ה-Listener, שהיא עושה fire ובזה גורמת לתצוגה להתעדכן. אוקיי, אז במה טעיתי?