سؤال

وعند تحديد صف في JTable يا JTable لا الحصول على تحديث بعد الآن. عندما لا تحديد صف، رمز تحت يعمل المتوقع كما. يتم إضافة صف إلى JTable.

    @Override
public void update (Observable arg0, Object arg1)
{
    if (arg0 instanceof Logger)
    {
        LogItem last = systemController.logController.getLog().getLastLogItem();
        this.history.add(last);
        this.logTableModel.addItem(last);

        this.logTable.tableChanged(new TableModelEvent(this.logTableModel));
        ((DefaultTableModel)this.logTable.getModel()).fireTableStructureChanged();
        this.logTable.repaint();
        this.logTable.doLayout();
    }

}

وعندما أغلق النافذة وفتحه، أستطيع أن أرى صف جديد.

ويمكن للشخص أن يفسر لي لماذا، بعد تحديد صف واحد، وأنا لا أرى أي تحديثات في JTable بعد الآن؟

هل كانت مفيدة؟

المحلول

هل التحديث) دعوة (يحدث في موضوع الحدث سوينغ؟ إذا سوف لا تحتاج رمز لتكون ملفوفة مع شيء من هذا القبيل:

SwingUtilities.invokeLater(new Runnable() { public void run() {
  logTableModel.addItem(last);
}});

نصائح أخرى

وهناك عدد من القضايا مع التعليمات البرمجية. يجب أن لا تكون الدعوة fireTableStructureChanged لأن ذلك يرتبط بنية الجدول (أي من الأعمدة الخ) تغيير لا بيانات الجدول نفسه (إضافة صف، تغيير قيمة الخلية الخ). أيضا، يجب أن لا تحتاج إلى استدعاء إعادة رسم وdoLayout على الطاولة نفسها وهذا ينبغي أن يكون سببها التغييرات نموذج.

وأعتقد أن عليك أن إلقاء نظرة على كيفية استخدام الجداول من البرنامج التعليمي جافا، تبدو على وجه التحديد باستخدام نماذج الجدول، والاستماع لتغيير البيانات وإطلاق أحداث تغيير البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top