Java - בעייה עם Listeners

Metheny

Member
Java - בעייה עם 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 ובזה גורמת לתצוגה להתעדכן. אוקיי, אז במה טעיתי?
 

voguemaster

New member
אמממ תראה

עשית פה טעות קלה נדמה לי... תראה את הדוגמא שיש ב-java tutorial. שם, במתודה setValueAt )שהיא חלק מה-TableModel שהם יוצרים) הם קוראים למתודה fireTableCellUpdated. היא זו שיוצרת TME. (הקריאה ששמת פשוט לא נמצאת במקום הנכון). אם תראה את הדוגמא שלהם תחת detecting data changes תראה גם איפה בדיוק הם מממשים את tableChanged. בנוסף לא נראה לי שהוספת את ה-listener לטבלה שלך. שוב, תסתכל בדיוק על החלק שדיברתי עליו לפני רגע ושם יש את קטע הקוד שמוסיף listener לטבלה כלשהי.
 

Metheny

Member
אתה גדול!!!!

תודה רבה!!! הכל הסתדר
 
למעלה