سؤال

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

وهكذا فكرتي هي استخدام MouseListener للتحقق من الصفوف والأعمدة على JTable وتعيين رئيس تحرير جديد في كل مرة.

ولكن، داعيا setCellEditor() للمرة الثانية لا يكون لها أي تأثير. يبقى محرر ليكون أول واحد التي تم تعيينها. فكيف يمكنني أن أجعل "setCellEditor" العمل للمرة الثانية لنفس العمود؟

وهنا هو رمز في MouseListener.

public void mouseClicked(MouseEvent e) {
    int cols = resultTable.columnAtPoint(new Point(e.getX(), e.getY()));
    int rows = resultTable.rowAtPoint(new Point(e.getX(), e.getY()));
    StorageObject item = (StorageObject) resultTable.getModel().getValueAt(rows, cols);
    TableColumn col = resultTable.getColumnModel().getColumn(cols);
    col.setCellEditor(new MyComboBoxEditor(item.list));
}
هل كانت مفيدة؟

المحلول

وأنا لست متأكدا من السبب في التعليمات البرمجية لا يعمل (انها كانت منذ بعض الوقت لقد فعلت سوينغ)، ولكن لماذا لا مجرد تجاوز

public TableCellEditor getCellEditor(int row, int column)

في JTable الخاصة بك؟ الحفاظ على خريطة مربعات التحرير والسرد الذي تريد استخدامه لكل صف وفي طريقة طغت الخاص بك العودة واحدة صحيحة.

نصائح أخرى

ونظريتي هي أنه عندما / يتم استدعاء TableCell جميع المستمعين الماوس المسجلين في الجدول، ومنها تثبيت الطبقات API افتراضيا سيتم الاحتكام أولا، قبل المستمع الماوس. وهذا يعني أن الحدث تسبب المحرر أن يكون المنال ستحدث قبل تعيينها إلى آخر. وكأنه نوع من حالة تعارض، إلا انها محددة في الواقع في مكان ما في التعليمات البرمجية المصدر API ... هذا نظريتي ساذجة وأستطيع أن أرى بالفعل بعض الثقوب فيها، وبالتالي إلى حل بي:

JTable.getCellEditor (الصف الباحث، الباحث العقيد) . وهذا يسمح لك بالعودة مهما محرر تريد لأي خلية.

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