TableCellRenderer und setBackground

Status
Nicht offen für weitere Antworten.
U

Unregistriert

Gast
hallo und guten morgen erstmal.

ihr könnt es wahrscheinlich nicht mehr hören, aber ich hab ein problem mit dem TableCellRenderer...
ich hab schon seeeeeehr viel gegoogelt hab auch immer was gefunden nur jetzt kommt ich nicht mehr weiter.

folgendes problem: ich hab ein JTable wo ich bestimmte zeilen anders färben will.
ich hab einen tablecellrenderer geschrieben und übergib diesem auch die notwendigen werte.
das blöde ist nur das jez meine komplette tabelle in der anderen hintergrund farbe ist.
ich hatte es auch schon mal so das die entsprechenden zellen anders farbig hinterlegt wurden. aba man dann
die werte nicht sehen konnten, aber wen man dann doppel klick auf eine zelle gemacht hat konnte man den hinhalt sehen...
hoffe ihr könnt mir helfen, hier mal der code:

zuweisung des tablecellrenderer:
Java:
table.setDefaultRenderer(Object.class, (TableCellRenderer) new MyRenderer().getTableCellRendererComponent(table, ausgabe.getArticel_name(), false, false, buff, 3));

tablecellrenderer:
Java:
public class MyRenderer extends DefaultTableCellRenderer 
{
	private Color colorSelected = new Color( 184, 207, 229 );
    private Color colorFocus = new Color( 184, 207, 229 );
    private Color colorNormal = new Color( 130, 161, 212 );

   public Component getTableCellRendererComponent(JTable table, String value, boolean isSelected, 
                                                  boolean hasFocus, int row, int column) 
   {     
      setForeground(Color.BLACK);
      
      if( hasFocus )
      {
          setBackground( colorFocus );
      }
      else if( isSelected )
      {
          setBackground( colorSelected );
      }
      else
      {
          setBackground( colorNormal );
      }

      if( value == null)
      {
    	  setBackground(Color.YELLOW);
      }
      else
      {
    	  setBackground(colorNormal);
      }
      
      setValue(value);
      return this;
   }
}

gruß marcel
 

Kaffeebohn

Bekanntes Mitglied
Hi Marcel,

wird die Zelle immer in der Hintegrundfarbe "colorNormal" angezeigt?

Die letzte If-Abfrage die du machst:

Java:
if( value == null)
      {
          setBackground(Color.YELLOW);
      }
      else
      {
          setBackground(colorNormal);
      }

überschreibt wenn ich das richtig sehe alles, was du vorher belegt hast an Farben.
1. überschreibt er es mit YELLOW wenn value == null, und
2. überschreibt er es mit colorNormal, wenn value != null ist. Alternativen gibt es dazu ja gar nicht.

Wär das ne Möglichkeit?
 
Zuletzt bearbeitet von einem Moderator:
U

Unregistriert

Gast
also die zellen sollen halt yellow hinterlegt werden wenn value == null ist.

und meine tabelle wird jetzt komplett yellow angezeigt und nicht mehr mit der colorNormal ...

meines wissen nach nimmt der renderer nämlich die letzte farbe als standart farbe.
deswegen hab ich den else zweig gemacht für den fall das wen value != null ist er die hintergrunde farbe wieder auf den ursprung zurück setzten soll.

marcel
 

Kaffeebohn

Bekanntes Mitglied
Was ich nur ausdrücken wollte: Die letzte If-Abfrage wird in jedem Fall aufgerufen, und dadurch werden Farben, die du vorher gesetzt hast (also z.B. colorFocus) überschrieben. Das sorgt dafür, dass du sowieso nur zwei farben sehen wirst: YELLOW und deine normale Farbe.

Würde es nicht reichen, gleich zu Begin als erste Anweisung eine Standard-Farbe zuzuweisen (um den Standard wie du sagtest zu kompensieren) und danach nur die Farben zuzuweisen, die geändert werden sollen?
 
U

Unregistriert

Gast
also die farbzuweisung für hasfocus und hasselected stimmt. wenn meine tabelle komplett gelb ist und ich
dan eine zeile den focus gebe ist genau die angegebene farbe zu sehen ...

wenn ich jez am anfang zb unter setforegournd() setbackground() da die standart farbe setzte , passiert nichts
die tabelle bleibt komplett gelb.

leider weiß ich nicht mehr wie ich es gestern geschafft hatte das die zellen richtig makiert waren aber der inhalt nicht zu sehen war sonst könnte das jetzt vllt helfen...
 
U

Unregistriert

Gast
kleine ergänzung:

hab gerade mal geguckt: also wenn value != null ist, spring er auch in den else zweig rein. nur iwie ändert er dann nicht den hintergrund...
 
U

Unregistriert

Gast
ja hab ich, trotzdem war meine ganze tabelle gelb und nicht in der colorNormale farbe :/
 

Kaffeebohn

Bekanntes Mitglied
Hm als Unterschied fällt mir jetzt nur noch auf dass du keinen super-constructor aufrufst..

Java:
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {

    	super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);

so sieht das bei mir aus...wobei ich nicht glaube dass es daran liegt. Vielleicht wartest du bis jemand kommt der mehr Ahnung davon hat ;)
 
U

Unregistriert

Gast
ja, dacht ich eben auch mal als ich so am googlen war, aber damit hat sich auch nichts geändert...

deswegen bin ich ja so verzweifelt. ich hab etliche tablecellrenderer codes mit meinem verglichen un keine wirklich großen unterschiede gefunden, un wenn ich dann die kleinen unterschiede angepasst hab, hat sich auch nichts verändert.
 

Kaffeebohn

Bekanntes Mitglied
Andere Idee..wenn du nur die Auswahl farbig ändern willst, probier es mal mit

table.setSelectionBackground(new Color(...,...,...));
 

Kaffeebohn

Bekanntes Mitglied
Mir fällt noch was auf..

Ich übergebe den Renderer immer anders als du jetzt:

Java:
table.setDefaultRenderer(Object.class, (TableCellRenderer) new MyRenderer().getTableCellRendererComponent(table, ausgabe.getArticel_name(), false, false, buff, 3));

ich mache das so:
Java:
table.setDefaultRenderer(Object.class, new MyRenderer());

Außerdem sollte die Methode getTableCellRendererComponent anstatt einem String ein Object erwarten.
 
Zuletzt bearbeitet:
U

Unregistriert

Gast
ne will ich nit, das mit dem selected hab ich nur gemacht damit die farbe , falls man ne zeile auswählt farbelich zum standartwert passt.

wie gesagt ich will NUR die zeilen farbig ändern wo value == null ist. un null kann nur in der 3. column vorkommen.
 
U

Unregistriert

Gast
ja ich muss dem die werte mitgeben da ich ja value überprüfe un anhand dessen die farbe ändern will.
 

Kaffeebohn

Bekanntes Mitglied
Er ruft ja jedes mal diese Methode auf wenn eine Änderung eingetreten ist, automatisch, und übergibt die Werte dann von selbst. Allerdings erwartet er bei der Methode

getTableCellRendererComponent

ein Object anstatt eines String wie du ihn übergibst. Du kannst dir das Object in einen String casten, aber die Signatur sollte glaube ich Stimmen.
 

Kaffeebohn

Bekanntes Mitglied
Ok also bei mir funktioniert dein CellRenderer jetzt. Hier meine Änderungen:

1. In der Methode aus "String value" -> "Object value" gemacht
2. Die letzte IF-Abfrage wie bereits gesagt entfernt.
Dann sieht das so aus: (Achtung ich habe die Farben geändert nicht erschrekchen ;) )

Java:
import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class MyRenderer extends DefaultTableCellRenderer 
{
    private Color colorSelected = Color.black;
    private Color colorFocus = Color.blue;
    private Color colorNormal =Color.green;
 
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
                                                  boolean hasFocus, int row, int column) 
   {     
	   System.out.println("-----------------------------------------------");
      setForeground(Color.BLACK);
      
      if( hasFocus )
      {
          setBackground( colorFocus );
      }
      else if( isSelected )
      {
          setBackground( colorSelected );
      }
      else
      {
          setBackground( colorNormal );
      }
 
     
      setValue(value);
      return this;
   }
}
 
U

Unregistriert

Gast
schau mal oben in meinem code. bei mir erwartet er kein objekt sondern ein string
 
U

Unregistriert

Gast
hey,

hab jetzt auch mal String zu Object gemacht.

hab die letzte if abfrage aba da gelassen un siehe da, die zellen wo null drin steht sind jetzt gelb un die datensätze stehen diesmal auch drin :)

vielen danke :)

marcel
 

Kaffeebohn

Bekanntes Mitglied
Hat es jetzt also geklappt?

Prima :) Dann klick bitte unten noch auf den Button "Frage offen" damit das Thema geschlossen wird!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B TableCellRenderer rendert Integer/Boolean Felder nicht AWT, Swing, JavaFX & SWT 4
M Swing TableCellRenderer elegant anpassen AWT, Swing, JavaFX & SWT 3
D Swing Mit TableCellRenderer einzelne Zellen markieren AWT, Swing, JavaFX & SWT 3
O Swing TableCellRenderer und JComboBox AWT, Swing, JavaFX & SWT 4
C Swing TableCellRenderer: setText() vs. setIcon() AWT, Swing, JavaFX & SWT 5
E Swing TableCellRenderer für alle Splaten setzen?! AWT, Swing, JavaFX & SWT 3
M gleicher TableCellRenderer für mehrere unterschiedliche Tabellen AWT, Swing, JavaFX & SWT 5
A Swing TableCellRenderer ändert die Zeilenfarbe zu spät AWT, Swing, JavaFX & SWT 3
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
J NullPointerException bei Benutzung vom TableCellRenderer AWT, Swing, JavaFX & SWT 3
U TableCellRenderer: Problem mit Timestamp/Date AWT, Swing, JavaFX & SWT 2
U TableCellRenderer UND prepareRenderer AWT, Swing, JavaFX & SWT 12
C Swing TableCellRenderer AWT, Swing, JavaFX & SWT 10
H Swing TableCellRenderer für verschiedene Spalten AWT, Swing, JavaFX & SWT 11
C Swing Problem mit TableCellRenderer in Verbindung mit TableRowSorter AWT, Swing, JavaFX & SWT 2
R JTable - TableCellRenderer AWT, Swing, JavaFX & SWT 3
R JTable - TableCellRenderer - BufferedImage AWT, Swing, JavaFX & SWT 9
S TableCellRenderer: JLabel-Background in JPanel AWT, Swing, JavaFX & SWT 7
R JTable mit TableCellRenderer AWT, Swing, JavaFX & SWT 10
R JTable - TableCellRenderer AWT, Swing, JavaFX & SWT 2
D TableCellRenderer rendert einfach nicht! AWT, Swing, JavaFX & SWT 4
S TableCellRenderer setForeground AWT, Swing, JavaFX & SWT 5
I Problem mit TableCellRenderer AWT, Swing, JavaFX & SWT 3
K TableCellRenderer Problem AWT, Swing, JavaFX & SWT 3
F TableCellRenderer wie umsetzen? AWT, Swing, JavaFX & SWT 2
D JTable TableCellRenderer AWT, Swing, JavaFX & SWT 2
J JTable und TableCellRenderer AWT, Swing, JavaFX & SWT 2
G TableCellRenderer Background variiert darstellen AWT, Swing, JavaFX & SWT 3
P TableCellRenderer mit einem TableRowSorter AWT, Swing, JavaFX & SWT 4
D TableCellRenderer PRoblem AWT, Swing, JavaFX & SWT 3
G TableCellRenderer soll ganze ausgewählte Zeile markieren AWT, Swing, JavaFX & SWT 2
S TableCellRenderer deaktivieren AWT, Swing, JavaFX & SWT 13
J TableCellRenderer AWT, Swing, JavaFX & SWT 5
S JTree mal anders (TableCellRenderer) AWT, Swing, JavaFX & SWT 6
S TableCellRenderer, Performance AWT, Swing, JavaFX & SWT 9
M Objekt in TableCellRenderer packen, warum ein Fehler? AWT, Swing, JavaFX & SWT 2
T TableCellRenderer Problem AWT, Swing, JavaFX & SWT 6
B TableCellRenderer + JComboBoxen AWT, Swing, JavaFX & SWT 2
J AWT setBackground(Color.orange) ist unter Win7 Aero nicht orange AWT, Swing, JavaFX & SWT 3
M Swing JTextArea größe anpassen & setBackground liefer Nullpointer AWT, Swing, JavaFX & SWT 4
M SetBackground() funktioniert nicht AWT, Swing, JavaFX & SWT 2
K JTextField.setBackground ohne auswirkung AWT, Swing, JavaFX & SWT 9
G JFrame setBackground? AWT, Swing, JavaFX & SWT 6
T setBackground(Color) funktioniert nicht mit HTML? AWT, Swing, JavaFX & SWT 2
G Endlosschleife bei paint() + setBackground() AWT, Swing, JavaFX & SWT 2
H BorderLayout.setBackground AWT, Swing, JavaFX & SWT 2
R JTextField - setBackground - kein Effekt AWT, Swing, JavaFX & SWT 5
M SWT Frage zu Button.setBackground AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben