سؤال

لقد قمت بإنشاء فئة عارض خلايا مخصصة لتحقيق ذلك.

public class MatchTableCellRenderer extends DefaultTableCellRenderer{


    public Component getTableCellRendererComponent (JTable table,
                                                    Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
        Component cell;
        cell = super.getTableCellRendererComponent(
                table, obj, isSelected, hasFocus, row, column);
        if( ((String[]) ((MatchTableModel) table.getModel()).getRow(row)).length==7 ){
            System.out.println(((String[]) ((MatchTableModel) table.getModel()).getRow(row))[0]+" "+((String[]) ((MatchTableModel) table.getModel()).getRow(row))[6]);

            cell.setForeground(Color.green);

        }
        return cell;
    }


}

وقمت بتعيين هذا العارض ليتم استخدامه بواسطة أعمدة الجدول الخاص بي:

    tempColumn = table.getColumnModel().getColumn(0);
    tempColumn.setCellEditor(new MacColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(1);
    tempColumn.setCellEditor(new IpColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(2);
    DefaultCellEditor dfEditor=new DefaultCellEditor(new JTextField());
    dfEditor.setClickCountToStart(2);
    tempColumn.setCellEditor(dfEditor);
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

أريد الصفوف التي تحتوي على سلسلة [] بطول = 7 باللون الأخضر والصفوف الأخرى باللون الافتراضي.لكن من المثير للاهتمام أن كل صفوفي أصبحت خضراء.لدي خط الطباعة كما ترون.تمت طباعته 4 مرات (يحتوي الجدول الخاص بي على 12 صفًا)، ولكن تم جعل جميع الصفوف باللون الأخضر، بدلاً من 4.ما الخطأ الذي افعله؟

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

المحلول

السبب هو ذاكرة اللون السمعة (TM) DefaultTableCeLreditor: عليك تعيين الألوان دائما ، بدلا من فرع واحد فقط. giveacodicetagpre.

يتم شرح التفاصيل الدقيقة في مؤشر الترابط الأخير

نصائح أخرى

يمكنك استخدام XxxCellRenderer, ولكن الأفضل والأسهل هو الاستخدام prepareRenderer()

للحصول على الكود الصحيح، يجب عليك تجاوزه أو اختباره داخل if-else يتبع patmeters

  • تم الإختيار

  • hasFocus

  • عمود

  • صف

أكثر في إجابات و سؤال حول قضية مماثلة

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