سؤال

انا املك JTable (الموسعة) وتنفيذ TableModel, ، حيث لدي أساليب ...

  • moveEntryUp(int rowIdx)
  • moveEntryDown(int rowIdx)

... ضمن تنفيذ نموذج الطاولة. لقد تحققت من أن هذه العمل بشكل صحيح.

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

على سبيل المثال
إذا كانت صفوفي [A, B, C(selected)], ، وأنا اضغط على زر UP،
ينبغي أن أحصل على [A, C(selected), B].

من الأساليب المختلفة التي جربتها حتى الآن تفشل إما في تحديث القيم في JTable، أو تفقد التحديد.


ملاحظة:
أنا متردد في استخدام حل يتطلب مكالمة صريحة repaint().
افترض أن جميع الخلايا في JTable نكون ليس قابل للتعديل.

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

المحلول

الإجابة على السؤال الخاص:

int row = mTable.getSelectedRow();
mTableModel.moveEntryUp(row);
mTable.getSelectionModel().setSelectionInterval(row -1, row -1);

أين mTable هو JTable، و mTableModel هو تطبيق نموذجي طاولتي، وهو ما يعادل mTable.getModel() (و typecast).

يجب أن أكون مضاعفا لفترة أطول قبل أن يسأل!

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