سؤال

أملك jTable1 مع عمودين.أريد التحكم في مظهر العمود 1، لذلك أستخدم الكود التالي لتعيين خط النص في الخلايا بالخط العريض أو لا يعتمد على ما إذا كان صف الخلايا زوجيًا أو فرديًا.

import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CustomTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable table, Object obj,
        boolean isSelected, boolean hasFocus, int row, int column) {
    Component cell = super.getTableCellRendererComponent(
        table, obj, isSelected, hasFocus, row, column );
        if (row % 2 == 0){
            cell.setFont(getFont().deriveFont(Font.BOLD));
        }
        return cell;
    }
}

أسميها باستخدام:

jTable1.getColumnModel().getColumn(1).setCellRenderer(new 
CustomTableCellRenderer());

ما أريده هو تعديل هذا TableCellRenderer بحيث يتم رسم خلفية الخلايا بناءً على قيمة العمود الآخر (العمود 0) في نفس الصف.على سبيل المثال، إذا كانت القيمة في العمود 0، فإن الصف 5 هو "كتاب"، ثم العمود 1، وستكون خلية الصف 5 باللون الأحمر، وإذا كانت قيمة العمود 0 هي "صحيفة"، فإن لون العمود 1 سيكون أخضر.مشكلتي هي أنني لا أعرف كيفية تمرير قيمة column0 إلى عارض column1 لذا سيتم استخدامه لتغيير الألوان.

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

المحلول 3

لقد وجدت كيفية الوصول إلى بيانات عمود آخر:

import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CustomTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable table, Object obj,
    boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(
    table, obj, isSelected, hasFocus, row, column );

    //I USE THIS TO ACCESS THE DATA FROM ANOTHER CELL!!!
    TableModel model = table.getModel();
    String media= (String) model.getValueAt(row, 0)


    if (row % 2 == 0){
        cell.setFont(getFont().deriveFont(Font.BOLD));
    }


   //SO I GET THE RESULT I WANT
   if ("book".equals(media)){
     cell.setBackground(Color.red)  
   }
   else{
     cell.setBackground(Color.green)
   }  



    return cell;
}
}

نصائح أخرى

التحقق من التوقيع على .getTableCellRendererComponent(...) طريقة:ستحصل على مرجع إلى JTable (الذي يمكنك من خلاله الحصول على TableModel)، وفهرس الصف والعمود الحاليين.

باستخدام تلك يمكنك البحث عن أي قيمة نسبية تريدها.

كما هو مبين هنا, ، يمكنك تجاوز prepareRenderer() للتأثير على صفوف بأكملها.

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