Frage

Ich habe jTable1 mit 2 Spalten.Ich möchte das Aussehen von Spalte 1 steuern, daher verwende ich den folgenden Code, um die Textschriftart in Zellen fett oder nicht fett einzustellen, basierend darauf, ob die Zellenzeile gerade oder ungerade ist.

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;
    }
}

Ich nenne es mit:

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

Was ich will, ist das zu ändern TableCellRenderer damit wird der Zellenhintergrund basierend auf dem anderen Spaltenwert (Spalte 0) in derselben Zeile gezeichnet.Wenn beispielsweise der Wert in Spalte 0, Zeile 5 "Buch" ist, dann ist Spalte 1, Zeile 5 Zelle rot, und wenn Spalte 0 Wert "Zeitung" ist, dann ist Spalte 1 Farbe grün.Mein Problem ist, dass ich nicht weiß, wie ich den Spalten0-Wert an den Spalten1-Renderer übergeben soll, damit er zum Ändern der Farben verwendet wird.

War es hilfreich?

Lösung 3

Ich habe herausgefunden, wie ich auf andere Spaltendaten zugreifen kann:

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;
}
}

Andere Tipps

Überprüfen Sie die Signatur des .getTableCellRendererComponent(...) Methode:sie erhalten einen Verweis auf die JTable (von der Sie das TableModel abrufen können) und den Index der aktuellen Zeile und Spalte.

Mit diesen können Sie jeden gewünschten relativen Wert nachschlagen.

Wie gezeigt hier, können Sie überschreiben prepareRenderer() um ganze Zeilen zu beeinflussen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top