JTable & Problem, das nicht die komplette Zeile gefärbt

Status
Nicht offen für weitere Antworten.

Muecke

Mitglied
Habe bereits ein wenig rumexperimentiert allerdings werden von meinen 11 Spalten nur 5 mit meiner Wunsch-Hintergrundfarbe eingefärbt und ich weiß nicht weshalb nicht die komplette Zeile eingefärbt wird.

Hier einmal meine Codes:

KlasseMain => Erstellen der Tabelle
Code:
/* Panel für die Übersichts-Tabelle */
JTable tableOverview = new JTable(new EBayOrgaMainDTableModel());
JTableHeader header = tableOverview.getTableHeader();
header.setBackground(Color.GRAY);
header.setForeground(Color.white);
tableOverview.getModel().addTableModelListener(this);
tableOverview.setDefaultRenderer(Object.class, new RowColorRenderer());

Klasse AbstractTable Model:
Code:
public class EBayOrgaMainDTableModel extends AbstractTableModel
{
	private boolean DEBUG = false;
	
    private String[] columnNames = { "Nr.", "eBayName", "Name", "Vorname", "Ort", "Email", 
    		"Betrag", "Porto", "Bezahlt", "Verschickt", "Bewertet" };

    private Object[][] data =
    {		
    	{ new Integer(0), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
    	{ new Integer(1), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
    	{ new Integer(2), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
    	{ new Integer(3), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
    	{ new Integer(4), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
    	{ new Integer(5), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
    	{ new Integer(6), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
    	{ new Integer(7), "","","","","", new Integer(0), new Integer(0), new Boolean(false), new Boolean(false), new Boolean(false) },
    };
 
    public int getColumnCount()
    {
    	return columnNames.length;
    }

    public int getRowCount()
    {
    	return data.length;
    }

    public String getColumnName(int col)
    {
    	System.out.println(columnNames[col]);
    	return columnNames[col];
    }
    public Object getValueAt(int row, int col)
    {
    	return data[row][col];
    }

    /* Checkboxen in Spalten setzen! Funktionsweise leider noch ???? -> Es geht einfach... */
    public Class getColumnClass(int c)
    {
    	return getValueAt(0, c).getClass();
    }
    
    public boolean isCellEditable(int row, int col)
    {
    	return true;
    }
   public void setValueAt(Object value, int row, int col)
    {
      if (DEBUG)
      {
        System.out.println("Setting value at " + row + "," + col
            + " to " + value + " (an instance of "
            + value.getClass() + ")");
      }

      data[row][col] = value;
      fireTableCellUpdated(row, col);

      if (DEBUG)
      {
        System.out.println("New value of data:");
        printDebugData();
      }
    }

    private void printDebugData()
    {
      int numRows = getRowCount();
      int numCols = getColumnCount();

      for (int i = 0; i < numRows; i++)
      {
        System.out.print("    row " + i + ":");
        for (int j = 0; j < numCols; j++)
        {
          System.out.print("  " + data[i][j]);
        }
        System.out.println();
      }
      System.out.println("--------------------------");
    }
}


Deine Klasse Table-Renderer:
Code:
class RowColorRenderer implements TableCellRenderer
{
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        Border border = BorderFactory.createEmptyBorder(1, 1, 1, 1);
        JLabel label = new JLabel((String) value);
		label .setOpaque(true);
		label .setBorder(border);
		label .setFont(table.getFont());
		label .setForeground(table.getForeground());
		label .setBackground(table.getBackground());
		label .setHorizontalAlignment(SwingConstants.RIGHT);
		column = table.convertColumnIndexToModel(column);
		if (table.getColumnCount() == 0)
		{
		     System.out.println("ColumnCount ist 0 ");
		}
		else
		{
		    if (row == 0)
		    {
		    	label .setBackground(Color.RED); 
		    }
		    if (row == 1)
		    {
		    	label .setBackground(Color.RED);
		    }
		}
		return label ;
    }  
}

und auch dieser Renderer hat nicht den Erfolg gebracht:
Code:
class RowColorRenderer extends javax.swing.table.DefaultTableCellRenderer
{
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
	{
		// component will actually be this.
		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
		
		setBackground(Color.yellow);
		return this;
	}
	

}

Kann mir evt. jemand helfen und sagen weshalb nicht alle Spalten der ersten und zweiten Teile rot makiert werden???
Danke im voraus!
Gruss
Muecke
 

semi

Top Contributor
Es gibt bereits Default-Renderer für Integer und Boolean. Diese werden bevorzugt verwendet.

Siehe
Code:
System.out.println(tableOverview.getDefaultRenderer(Integer.class) instanceof RowColorRenderer);
System.out.println(tableOverview.getDefaultRenderer(Boolean.class) instanceof RowColorRenderer);

Vermeide es in Renderern Objekte jeglicher Art zu erzeugen. In deinem erster Renderer erzeugst du einen Haufen
Labels und Border. Allein schon wenn du den Mauszeiger über die Tabelle bewegst werden die Renderer zig mal
aufgerufen.

PS: Hier eine Lösung für das Problem
Code:
tableOverview.setDefaultRenderer(String.class, new RowColorRenderer(tableOverview.getDefaultRenderer(String.class)));
tableOverview.setDefaultRenderer(Integer.class, new RowColorRenderer(tableOverview.getDefaultRenderer(Integer.class)));
tableOverview.setDefaultRenderer(Boolean.class, new RowColorRenderer(tableOverview.getDefaultRenderer(Boolean.class)));
   
   
class RowColorRenderer implements TableCellRenderer
{
   private TableCellRenderer renderer; 
      
   public RowColorRenderer(TableCellRenderer renderer)
   {
      this.renderer = renderer;
   }
      
   @Override
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
   {
      Component result = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
      result.setBackground(Color.YELLOW);
      return result;
   }
}
 

Muecke

Mitglied
Klasse Sache! :)
Ich habe heute schon haufenweise Seiten durchforstet und nirgends konnte ich eine gescheite Antwort finden!
Vielen Dank!

Aber jetzt noch mal eine Frage dazu:
Ich möchte gerne abhängig von den Checkboxen (true oder false) die Zeilen unterschiedlich einfärbern.
Wo mache ich diese Überprüfung, ob bspw. eine Checkbox true oder false gesetzt ist???
Ich kann mir nicht vorstellen, daß das in der Renderer Klasse geschehen soll, oder doch??

Danke im voraus.
Gruss
Muecke
 

Muecke

Mitglied
Mhhh :?: :?:

Ich habe ja 3 Spalten mit Checkboxen, wie unterscheide ich die nun???
Möchte gerne wenn in Spalte 11 true steht eine Farbe setzen und wenn ich Spalte 10 true stehe eine andere Farbe!!
und das gleiche für Spalte 9 !!!
 

semi

Top Contributor
Du kannst im Renderer auch die Werte der anderen Spalten abfragen.
z.B.
Code:
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
   Component result = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
   TableModel model = table.getModel();
   // Wenn Model-Column 5 und Wert in Model-Column 9 TRUE
   if( 5 == table.convertColumnIndexToModel(column) 
      && Boolean.TRUE.equals(model.getValueAt(table.convertRowIndexToModel(row), 9)) )
   {
      result.setBackground(Color.PINK);
   }
   else
   {
      result.setBackground(Color.YELLOW);
   }
   return result;
}
 
G

Guest

Gast
Perfekt, danke dir!
Werde es gleich morgen ausprobieren!

Ps.: Ich glaube, da wäre ich im Leben nicht auf diesens Konstrukt gekommen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Problem/Absturz bei Zelle nicht editierbar setzen (JTable) AWT, Swing, JavaFX & SWT 6
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
I JTable,AbstractTableModel Problem AWT, Swing, JavaFX & SWT 3
K Swing JTable Problem... AWT, Swing, JavaFX & SWT 3
J JTable: Problem bei CellRenderer AWT, Swing, JavaFX & SWT 3
W jTable Scrollbar Problem AWT, Swing, JavaFX & SWT 2
GianaSisters Swing jTable Undo Problem. AWT, Swing, JavaFX & SWT 5
J Swing Problem mit JTable erweitern AWT, Swing, JavaFX & SWT 6
Draculajr Problem mit jformattedtextfields und jtable AWT, Swing, JavaFX & SWT 10
B Swing JTable custom ColumnModel Problem AWT, Swing, JavaFX & SWT 5
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
D Problem mit JFileChooser -> Daten werden mit anführungsstriche in JTable geschrieben AWT, Swing, JavaFX & SWT 8
B Problem mit Alignment in JTable AWT, Swing, JavaFX & SWT 2
N Swing JTable - Problem mit Zeilenumbruch AWT, Swing, JavaFX & SWT 6
F Swing Problem mit Drag&Drop in JTable AWT, Swing, JavaFX & SWT 4
D Swing JTable Model View Problem AWT, Swing, JavaFX & SWT 6
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
F Swing JTable: Problem beim zeile löschen AWT, Swing, JavaFX & SWT 3
C Swing Problem mit MouseEvent in JTable AWT, Swing, JavaFX & SWT 5
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
aze JTable in Popup.Problem mit DefaultTableCellRenderer AWT, Swing, JavaFX & SWT 9
N Swing Problem beim Einlesen von Jtable in Array AWT, Swing, JavaFX & SWT 5
M Problem mit funktionellem JTable Header AWT, Swing, JavaFX & SWT 5
M Problem mit Festsetzen der Anzahl ein reihen in einer JTable AWT, Swing, JavaFX & SWT 11
S JTable & TableCellEditor Problem AWT, Swing, JavaFX & SWT 5
M JTable und ListSelectionListener Problem AWT, Swing, JavaFX & SWT 3
S Sortierter JTable Problem AWT, Swing, JavaFX & SWT 2
K Problem mit JButton in JTable AWT, Swing, JavaFX & SWT 4
B Anspruchsvolles JTable Problem AWT, Swing, JavaFX & SWT 4
W Problem mit JTable und fireTableDataChanged() AWT, Swing, JavaFX & SWT 13
M Layout-Problem: JTable AWT, Swing, JavaFX & SWT 3
S JTable - Problem mit der Selection AWT, Swing, JavaFX & SWT 4
G Darstellungs Problem mit ComboBox in JTable AWT, Swing, JavaFX & SWT 15
G Problem bei JTable in JInternalFrame AWT, Swing, JavaFX & SWT 4
H JTable problem mit TableSorter AWT, Swing, JavaFX & SWT 4
M JDBC + dynamischer JTable - Spalten problem AWT, Swing, JavaFX & SWT 5
S JTable Problem AWT, Swing, JavaFX & SWT 2
E JTable: Problem mit clearSelection() AWT, Swing, JavaFX & SWT 7
R JTable auslesen Problem AWT, Swing, JavaFX & SWT 4
D GridBagLayout Problem mit JTable AWT, Swing, JavaFX & SWT 6
M Problem mit ImageIcon in einer JTable AWT, Swing, JavaFX & SWT 2
G JTable - Problem.:( AWT, Swing, JavaFX & SWT 6
Z Problem mit Icons in JTable AWT, Swing, JavaFX & SWT 3
D Jtable farbig markieren - Verständnis Problem AWT, Swing, JavaFX & SWT 5
M Problem mit JTable und DefaultTableModel AWT, Swing, JavaFX & SWT 2
G Problem mit JTable / mit dem Eintragen der Daten aus Vector AWT, Swing, JavaFX & SWT 4
S JTable + Sortieren => Problem bei Darstellung AWT, Swing, JavaFX & SWT 13
TRunKX Problem mit JTable AWT, Swing, JavaFX & SWT 3
J jtable + Textarea problem AWT, Swing, JavaFX & SWT 3
M Problem bei Verbinden v. jTable, ScrollPane u. JLabel AWT, Swing, JavaFX & SWT 5
G Problem mit Scrollpanel in JTable AWT, Swing, JavaFX & SWT 2
T Problem mit JTable - Renderer AWT, Swing, JavaFX & SWT 3
N JTable - Problem mit markieren von Zellen AWT, Swing, JavaFX & SWT 3
M JTable Problem AWT, Swing, JavaFX & SWT 9
EagleEye Problem mit ObjectOutputStream / JTable AWT, Swing, JavaFX & SWT 5
G JTable CellRenderer-Problem AWT, Swing, JavaFX & SWT 4
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben