Jtable Zeilen gruppenweise einfärben

javama

Erfahrenes Mitglied
Hallo,
ich habe ein JTable und möchte die Zeilen, die den gleichen Eintrag in der 1. Spalte haben, mit einer farbe markieren.
(abwechselnd grün-rot) z.B (1. und 2. Zeile Grün, 3, und 4 Zeile Rot .... )

---------------------------------------
vorname | Name | Alter|
---------------------------------------
Max | muster | 25 |
---------------------------------------
Max | xxxxx | 33 |
---------------------------------------
Andreas | abds | 40 |
---------------------------------------
Andreas | sdf | 31 |
---------------------------------------
Sascha | abds | 40 |
---------------------------------------
Sascha | sdf | 31 |

Java:
	class ColoredTableCellRenderer extends DefaultTableCellRenderer {

		private static final long serialVersionUID = 1L;
		
		String column_0_value_Alt="";
		String column_0_value_Neu ="";

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

			Component c = super.getTableCellRendererComponent(table, value,
					isSelected, hasFocus, row, column);
		   
			
			if(column==0 )
			{
				column_0_value_Neu = value.toString();
				if(row == 0)
				{
					column_0_value_Alt = column_0_value_Neu;
				}
			}
			
			else if (column_0_value_Alt.equals(column_0_value_Neu) )
			{
				
					 c.setBackground(Color.green);
					column_0_value_Alt = column_0_value_Neu;
				
			} 
			else 
			{
						
						c.setBackground(Color.red);
						column_0_value_Alt = column_0_value_Neu;
				
					
			}
			


			
			return c;
		}
	}
 

javama

Erfahrenes Mitglied
So funkioniert schon aber es gibt einen kleinen Effekt, wenn ich die Tabelle scrolle ändern sich die Farben , wie kann ich das verhindern.
Problem ist beim Scrollen ändert sich die Zeilenfarben , wie kann ich das verhindern?
Java:
private static Color ODD3;

	class ColoredTableCellRenderer extends DefaultTableCellRenderer {
		
		private static final long serialVersionUID = 1L;
		
		String column_0_value_Alt="";
		String column_0_value_Neu ="";
		

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

			Component c = super.getTableCellRendererComponent(table, value,
					isSelected, hasFocus, row, column);
		   
			if(column==0 )
			{
				column_0_value_Neu = value.toString();
				if(row == 0)
				{
					ODD3 = new Color(206, 246, 206);
					c.setBackground(ODD3);
					column_0_value_Alt = column_0_value_Neu;
				}
			}
			
			if (column_0_value_Alt.equals(column_0_value_Neu) )
			{
				
				    
					 c.setBackground(ODD3);
					column_0_value_Alt = column_0_value_Neu;
				
			} 
			else 
			{
				 if(ODD3.equals(new Color(206, 246, 206)))
			    	 {
			    		 ODD3 = Color.white;
			    	 }
			    	 else
			    	 {
			    		 ODD3 = new Color(206, 246, 206);
			    	 }
			    
						c.setBackground(ODD3);
						column_0_value_Alt = column_0_value_Neu;
				
					
			}
			

			// Einträge Zentrieren
			if(column == 1)
			{
				this.setHorizontalAlignment(JLabel.CENTER);
			}else{
				this.setHorizontalAlignment(JLabel.LEFT);
			}
			

			 //selektierte Zeile wird lightGray-markiert
			if (isSelected) {
				c.setBackground(Color.lightGray);
			}
			
			return c;
		}
	}

hat jemand eine Idee?
 
Zuletzt bearbeitet:

Neue Beiträge