JTable Spezielle Zeilen einfärben.

Shidan

Grünschnabel
Hallöchen,

Immer dieses JTable.
Also meine Frage bezieht sich darauf das ich eine Tabelle mit Namen und z.B Akitivtäten besitzte.
Diese ist auch soweit es geht funktionierend fertig nur soll ich jetzt. Spezielle Zeilen Einfärben.
Damit meine ich z.B

Meier
Meier
Gerd
Gerd

Juergen
Meier

Das sich halt jeder Name ( auch die neu hinzugefügt werden) einfärbt um eine bessere Übersicht zu erhalten.
Ich weiß zwar wie ich Tabellen einfärbe habe auch schon eine ColoredTableCellRenderer Class.
Doch weiß ich wirklich 0 wie ich das anstellen soll.
(Die Namen sollen ihre Farbe wieder ändern wenn sie sich sortieren damit es einheitlich ist)
Dazu das Problem ist das die ersten beiden Spalten der Tabelle ComboBoxen sind und ich diese nicht über den Renderer färben kann(bzw nicht weiß wie)


Für etwas mehr verständniss Ungefähr so:
2zdxg0w.jpg


Das ist jetzt nur so dahin geklatscht, da sich die comboboxen leider nicht mitfärben.


Mit freundlichen Grüßen
Shidan
 
Zuletzt bearbeitet:
Erstmal herzlich willkommen im Tutorials.de-Forum

Hui ... das klingt kompliziert.
Dein Beispiel oben mit GRAU ist vielleicht nicht ganz so gut gewählt da man sich auf dem weißen Untergrund sehr anstrengen muss um es überhaupt zu sehen. Ändere es am besten in grün oder rot ... das hebt sich schön ab.
Was dann die JTable angeht : willst du immer die Einträge in der selben Farbe haben die gleich sind oder hast du ein bestimmtes Muster *z.B. abwechselnd weis und farbig* ?

Du hast uns ein bisschen wenig Infos gegeben um daraus ableiten zu können was genau du vorhast. Weil so wie du es beschrieben hast bleiben noch einige Möglichkeiten offen.
 
Die Farbe habe ich geändert.
Das Muster soll sich im sortierten Modus dann jeweils immer so erstecken:

Weiß
Grau
Weiß
Grau

Dabei wechselt die Farbe immer wenn ein neuer Name auftaucht
Gleiche Namen sollen natürlich immer die gleiche Farbe besitzen.
Es würde schon ersteinmal das soweit hinzubekommen da zuviel Arbeit nur überfordert und man ja immer weiter ausbauen kann wann man Lust hat.
 
Zuletzt bearbeitet:
Push ?
Ich habe hier mal ein wenig rumgebastelt und bin jetzt an das Ergebnis gekommen:
10xvs0m.jpg


Ich wollte das aber halt so wie im ersten Bild.
Jemand eine Idee wo der Fehler liegt ?
Hier mein ColorRender :


Java:
	public class CustomTableCellRenderer  extends
	    DefaultTableCellRenderer {			

		private static final long serialVersionUID = 1L;		
		  private Color colorSelected = new Color(94, 129, 188 );
		  private Color colorFocus = new Color( 94, 129, 188 );
		  private Color colorNormal =Color.WHITE;
		  
		  public Component getTableCellRendererComponent (JTable table, 
		  Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
			  super.getTableCellRendererComponent(
			   table, obj, isSelected, hasFocus, row, column);	        


				setForeground(Color.black);				
		        
		        if( isSelected ){
		        	setBackground( colorSelected );
		        	setForeground(Color.white);	
		        }		       
		        else{
		        	setBackground(Color.WHITE);
		        	if(row > 0){
		        		if(table.getValueAt(row-1, 0).equals(table.getValueAt(row,0))){			        			
		        			if(getBackground().equals(Color.WHITE)){		        				
		        				setBackground(Color.LIGHT_GRAY);
		        			}else if (getBackground().equals(Color.LIGHT_GRAY)){
		        				setBackground(Color.WHITE);
		        			}
		        		}
		        		
		        	}else{
		        		setBackground(Color.WHITE);
		        	}
		        }	
		        
		     return this;
		  }
	}
 
Zuletzt bearbeitet:
Hallo,

also wenn ich es richtig verstanden habe möchtest du, dass eine Zeile genau so wie die Zeile drüber eingefärbt wird, wenn der Wert der ersten Spalte gleich ist (gleicher Name), sonst wird die Farbe gewechselt. Ist das so korrekt?

Java:
    public class CustomTableCellRenderer  extends
        DefaultTableCellRenderer {          
 
        private static final long serialVersionUID = 1L;        
          private Color colorSelected = new Color(94, 129, 188 );
          private Color colorFocus = new Color( 94, 129, 188 );
          private Color colorNormal =Color.WHITE;
          
          public Component getTableCellRendererComponent (JTable table, 
          Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
              super.getTableCellRendererComponent(
               table, obj, isSelected, hasFocus, row, column);          
 
 
                setForeground(Color.black);             
                
                if( isSelected ){
                    setBackground( colorSelected );
                    setForeground(Color.white); 
                }              
                else{
                    if(row > 0){
                        if(!table.getValueAt(row-1, 0).equals(table.getValueAt(row,0))){                             
                            if(getBackground().equals(Color.WHITE)){                                
                                setBackground(Color.LIGHT_GRAY);
                            }else if (getBackground().equals(Color.LIGHT_GRAY)){
                                setBackground(Color.WHITE);
                            }
                        }
                        
                    }else{
                        setBackground(Color.WHITE);
                    }
                }   
                
             return this;
          }

Getestet hab ich es jetzt nicht, könnte so aber passen.

Gruß

Sascha
 
Hallo,

also wenn ich es richtig verstanden habe möchtest du, dass eine Zeile genau so wie die Zeile drüber eingefärbt wird, wenn der Wert der ersten Spalte gleich ist (gleicher Name), sonst wird die Farbe gewechselt. Ist das so korrekt?

Java:
    public class CustomTableCellRenderer  extends
        DefaultTableCellRenderer {         

        private static final long serialVersionUID = 1L;       
          private Color colorSelected = new Color(94, 129, 188 );
          private Color colorFocus = new Color( 94, 129, 188 );
          private Color colorNormal =Color.WHITE;
         
          public Component getTableCellRendererComponent (JTable table,
          Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
              super.getTableCellRendererComponent(
               table, obj, isSelected, hasFocus, row, column);         


                setForeground(Color.black);            
               
                if( isSelected ){
                    setBackground( colorSelected );
                    setForeground(Color.white);
                }             
                else{
                    if(row > 0){
                        if(!table.getValueAt(row-1, 0).equals(table.getValueAt(row,0))){                            
                            if(getBackground().equals(Color.WHITE)){                               
                                setBackground(Color.LIGHT_GRAY);
                            }else if (getBackground().equals(Color.LIGHT_GRAY)){
                                setBackground(Color.WHITE);
                            }
                        }
                       
                    }else{
                        setBackground(Color.WHITE);
                    }
                }  
               
             return this;
          }

Getestet hab ich es jetzt nicht, könnte so aber passen.

Gruß

Sascha
Richtig verstanden hast du es ja & Danke für die Antwort ,
leider sieht diese zwar sehr schön aus ,funktioniert aber nicht wie gewollt :(
Er färbt alle Einträge direkt Selectiert vor (Blau) (Ich denke mal weil vorher garkeine Farbe gewählt wird).
Dazu färbt er nicht jede Column sondern nur die erste und dann jede zweite.
Die Farbe wechselt zwar beim Namen aber die Einträge dannach färben sich wieder weiß.


Die Farbe soll sich ändern sobald der Name sich verändert und solange diese Farbe beibehalten bis der Name sich wieder ändern dann wieder zurück zu der Orginalen Farbe. Damit der überblick über die Namen leichter wird.
 
Zuletzt bearbeitet von einem Moderator:
Oh hab die Selektion übersehen. Schaue gleich nochmal wenn ich am Rechner bin.

Gruß

Sascha
 
Okay ich habe das Problem jetzt folgendermaßen gelöst:

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

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

	/**
	 * ColoredTableRender um die Tabelle einzufärben.
	 */
	public class CustomTableCellRenderer  extends
	    DefaultTableCellRenderer {			

		private static final long serialVersionUID = 1L;		
		  private Color colorSelected = new Color(94, 129, 188 );
	//	  private Color colorFocus = new Color( 94, 129, 188 );
		  private Color colorNormal =Color.WHITE;
		  private Color lightgray = new Color(210,210,210);
		  boolean isWhite;
		

		public Component getTableCellRendererComponent (JTable table, 
		  Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
			  super.getTableCellRendererComponent(
			   table, obj, isSelected, hasFocus, row, column);	
                setForeground(Color.black);

                if(column == 0 && row == 0){
                	isWhite = true;
                }
                if(isWhite){
                	setBackground(colorNormal);
                }else if(!isWhite){
                	setBackground(lightgray);
                }        
                if( isSelected){            
                	setBackground(colorSelected);
                    setForeground(colorNormal); 
                }
     
                else{  
                	if(column == 0){
	                    if(row > 0){                    	
	                       if(!table.getValueAt(row, 0).equals(table.getValueAt(row-1, 0))){
	                    	  if(isWhite){
	                    		  setBackground(lightgray);	                    	
	                    		  isWhite = false;
	                    	  }else{
	                    	
	                    		  setBackground(colorNormal);
	                    		  isWhite = true;
	                    	  }
	                       }
	                    }
                	}                
                }  
		     return this;
		  }
	}

Es sieht ganz gut aus solange ich nichts mache. Scrolle ich aber mit dem Table oder Klicke auf Zeilen springen die Farben nur so umher. Weiß jemand woran das liegt ?
 

Neue Beiträge

Zurück