JTable: bestimmte Zeilen ändern

anfer

Grünschnabel
Das Programm ist zwar noch nicht fertig, aber bis hier sollte es funktionieren.

Mein Proplem ist, dass ich nur die letzte Zeile mit Farbe haben möchte. Aber leider werden alle Zeilen farbig. Das Programm sieht so aus:

Code:
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) 
	
{        
		
JLabel label = (JLabel)super.getTableCellRendererComponent(table, obj, isSelected,hasFocus, row, column);               
		
		
for (int i = 0; i <= table.getRowCount(); i++)
		
   {
		
	if(table.getRowCount() == i)
	{            
	label.setFont(new Font("Dialog", Font.BOLD, 11));
	setBackground(color);   
		
	}  
			              
   }
return label;   
	}    
}

Was könnte hier das Problem sein? Sieht doch richtig aus, oder?
 
Moin!

Was könnte hier das Problem sein? Sieht doch richtig aus, oder?

Nee, sieht eher ziemlich falsch aus.
Du lässt ne Schleife durchlaufen, und sobald die schleife am Ende ist, setzt du den Hintergrund des Labels aus Schwarz
Code:
for (int i = 0; i <= table.getRowCount(); i++)
        
   {
        
    if(table.getRowCount() == i) //<- wird auf jeden fall im letzten iterationsschritt erfüllt

Ohne irgendeine Schleife solltest du eher das abfragen:
Code:
if(table.getRowCount()-1 == row) {

Weiterhin heist es statt:
Code:
setBackground(color);

richtig
Code:
label.setBackground(color);
label.setOpaque(true);


*grüssle*
MeinerEiner
 
Dadurch werden aber alle Zeilen farbig. Das Problem ist nur, dass ich nur eine Zeile mit Farbe haben möchte und nicht alle.
Aber vielen Dank für die Antwort!
 
Zuletzt bearbeitet:
Dadurch werden aber alle Zeilen farbig. Das Problem ist nur, dass ich nur eine Zeile mit Farbe haben möchte und nicht alle.
Aber vielen Dank für die Antwort!

Dann hast du einen Fehler gemacht und meinen Vorschalg nicht korrekt umgesetzt.
Bei mir wird nämlich nur die letzte Zeile farbig markiert..

Zeig mal die den neuen Code!

*grüssle*
MeinerEiner
 
ok

Code:
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) 

{        
	
JLabel label = (JLabel)super.getTableCellRendererComponent(table, obj, isSelected,hasFocus, row, column);               
		
	
    for (int i = 0; i <= table.getRowCount(); i++)
	{
		
	if(table.getRowCount()-1 == i)
		{            
		label.setBackground(color);  
		label.setForeground(Color.BLUE); 
		label.setOpaque(true);
		
		}  
			              
	}
	return label;   
}    
}

Ich finds auch komisch, dass es nicht klappt. Hab überall nachgeschaut..
 
i habe deshalb geschrieben, weil wenn i beispielsweise 24 => letzte zeile ist, in die if einweisung kommen soll. habs schon mit row probiert, geht nicht. aber es könnte vielleicht mit row was zu tun haben. ich experimentiere mal noch weiter. aber danke für die mühe. es sollte eigentlich klappen, aber ich weiß nicht, was da das problem sein kann.

Code:
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) 

{        
	
JLabel label = (JLabel)super.getTableCellRendererComponent(table, obj, isSelected,hasFocus, row, column);               
		
	
    for (int i = 0; i <= table.getRowCount(); i++)
	{
		
	if(table.getRowCount()-1 == row)
		{            
		label.setBackground(color);  
		label.setForeground(Color.BLUE); 
		label.setOpaque(true);
		
		}  
			              
	}
	return label;   
}    
}
 
Okay, zum Teil mein Fehler.
Es muss natürlich noch die anderen Zellen, welche nicht verändert werden sollen, beachtet werden..
Code:
if(table.getRowCount()-1 != row){
            return super.getTableCellRendererComponent(table, obj, isSelected,hasFocus, row, column);               
        }
        else{
                JLabel label = new JLabel(obj.toString());
                label.setFont(new Font("Dialog", Font.BOLD, 11));
                label.setBackground(Color.GRAY);
                label.setOpaque(true);
                label.setText(obj.toString());
                return label;
        }

Kannst du mir aber erklären, wieso du immer noch in deinem letzten Post die Schleife drin hattest

*grüssle*
MeinerEiner
 
Weil, vielleicht, dass ich die Schleife später brauchen kann. Ich habs nicht gelöscht.

Aber vielmals vielmals danke. Es hat endlich funktioniert;)
 
Zurück