Schriftfarbe in Tabellenzellen ändern

Status
Nicht offen für weitere Antworten.

hawkeye78

Bekanntes Mitglied
Hallo,

ich versuche mich mal wieder an einem kleinen Kalender, die Oberfläche und die Funktionalitäten habe ich nun mittlerweile zusammen. Allerdings würde ich nun gerne noch die Schrift für die Sonntage in Rot darstellen, aber genau daran hakt es bei mir momentan. Ich rufe aus der Klasse in welcher ich die Oberfläche darstelle folgende Klasse auf:

Code:
import java.awt.Color;

import javax.swing.*;
import javax.swing.table.*;

public class Tabelle
extends DefaultTableCellRenderer
{
	public int AnzahlZeilen=0;
	
	Datum dat1=new Datum();        // Erzeugen eines Objekts für die Datumberechnung
	Color color;                   // Datentyp für die Farbe erzeugen
	
	public void fuellen(int iMonth, int iYear, Oberflaeche o2)
	{
		int ifirstDay=99;                // Wochentag des ersten Tages im Monat
		int ileerzellen=99;              // Anzahl der leerzellen am Monatsanfang
		int iSchaltjahr=0;               // Schaltjahr (1=ja, 0=nein)
		int iTage=1;                     // Tage des Monats
		int iRestWoche=0;
		int iDayofMonth=0;               // Anzahl der Tage im Monat
		int i=0;                         // Zählvariable
		String sTag;
		int iTagederMonate[]={31,28,31,30,31,30,31,31,30,31,30,31};
		
		JTable TabdaysofMonth1=o2.getTable();
		
		// Definition des Modells für die Tabelle
		DefaultTableModel aModel (DefaultTableModel)TabdaysofMonth1.getModel();

		Object[] Woche=new Object[7];    // Objekt für die Woche;
		
		// Löschen der vorhandenen Tabellenzeilen
		for(i=0; i<AnzahlZeilen; i++)
		{
			aModel.removeRow(0);
		}

		// Hier werden die Spaltenköpfe hinzugefügt
		
		AnzahlZeilen=0;            // Zurücksetzen der Zeilen-/Wochenanzahl

		// Bestimmung des Wochentages für den 1. im Monat (0=So, 1=Mo, 2=Di, 3=Mi,
		// 4=Do, 5=Fr, 6=Sa)
		ifirstDay=dat1.ErsterTag(iMonth, iYear);

		// Berechnung der leerzellen vor dem Monatsanfang
		if(ifirstDay==0)
		{
			ileerzellen=6;
		}
		else
		{
			ileerzellen=ifirstDay-1;
		}
		
		// Überprüfung ob der aktuelle Monat Februar ist
		if(iMonth==2)
		{
			// Bestimmung des Schaltjahres
			iSchaltjahr=dat1.schaltjahr(iYear);
			
			iDayofMonth=iTagederMonate[iMonth-1]+iSchaltjahr;
		}
		else
		{
			iDayofMonth=iTagederMonate[iMonth-1];
		}
		
		while(iTage<=iDayofMonth)
		{
			if(ileerzellen!=0)
			{
				// Auffüllen der Leerzellen für die erste Monatswoche
				for(i=0; i<ileerzellen; i++)
				{
					Woche[i]=" ";
				}
				
				// Auffüllen der angefangenen Woche
				iRestWoche=7-ileerzellen;
				
				while(i<7)
				{
					Woche[i]=String.valueOf(iTage);
					iTage++;
					i++;
				}
				ileerzellen=0;				
			}
			else
			{
				// Füllen der Woche mit den entsprechenden Tagen
				for(i=0; i<7; i++)
				{
					sTag=String.valueOf(iTage);
					
					if(i==6)
					{
						this.setValue(sTag);
					}
					
					Woche[i]=sTag;
					iTage=iTage+1;

					// Auffüllen der Felder mit leerzeichen am Monatsende
					if(iTage-1>iDayofMonth)
					{
						Woche[i]=" ";	
					}
				}					
			}

			aModel.addRow(Woche);
			AnzahlZeilen=AnzahlZeilen+1;
		}
		TabdaysofMonth1.setModel(aModel);			
                }
	
	// Schrift für den Sonntag auf rot setzen
	public void setValue(Object value)
	{
		String Sonntag=value.toString();
		setForeground(Color.red);
		setText(Sonntag);
	}
}
Ich wäre über einen Tipp geben, warum das Programm die Schriftfarbe weiterhin auf Schwarz läßt. Ich bin leider ziemlich ratlos warum das nicht funktioniert und wäre daher über einen entsprechenden Tipp sehr sehr dankbar.
Gruß
Dan
 
B

bygones

Gast
ehrlich gesagt würde ich mehr trennen. D.h. mach eine Klasse die sich um die Anzeige der Tabelle kümmert und eine die vom CellRenderer erbt....

Nichtsdestotrotz musst du der Tabelle noch den CellRenderer setzen !
 

hawkeye78

Bekanntes Mitglied
erst einmal vielen Dank für dein Posting, ich werde das wohl noch ein bißchen aufsplitten, aber ich dachte die Klasse erbt den Renderer schon wenn ich einfach extends DefaultTableCellRenderer angebe oder, muß ich auch noch
Code:
Component getTableCellRendererComponents(JTable table, Object value, boolean isSelected, boolean has Focus, int row, int column)

mit einbauen? Aber falls ja wie? Noch einmal vielen Dank für dein Posting.
 
B

bygones

Gast
das mit dem erben ist schon richtig - mehr brauchst du nicht machen.
Nichts desto trotz muss der tabellle der Renderer gesetzt werden.
Code:
table.setCellRenderer(new MyCellRenderer());
Bei dir dann:
Code:
TabdaysofMonth1.setCellRenderer(this);

PS: Variablen immer klein schreiben !
 

hawkeye78

Bekanntes Mitglied
noch einmal vielen Dank für dein Posting, aber irgendwas scheine ich immer noch falsch zu machen, wenn ich jetzt die Codezeile:

Code:
JTable TabdaysofMonth1=o2.getTable(); 
       
// Definition des Modells für die Tabelle 
DefaultTableModel aModel (DefaultTableModel)TabdaysofMonth1.getModel();

TabdaysofMonth1.setCellRenderer(this);
schreibe behauptet Eclipse die Methode setCellRenderer ist für den Typ JTable nicht definiert :cry: entschuldige bitte wenn ich dich so nerve aber ich bin noch ein ziemlicher Anfänger in Java
 

Xenophon

Aktives Mitglied
Mal ein wenig in der API Specification nachschauen würde hefen. Die richtige Methode ist "setDefaultCellRenderer(Class columnClass, TableCellRenderer renderer)".
 

hawkeye78

Bekanntes Mitglied
ok, danke für den Tipp, es gibt hin und wieder so ein paar Tage da sollte ich besser morgens im Bett bleiben das scheint einer davon zu sein :)
ich habe das nun folgendermaßen geändert
Code:
[...]
    DefaultTableRenderer ren=new Tabelle();
    TabdaysofMonth1.setDefaultRenderer(Tabelle.class,ren);
[...]

aber irgendwie hat das keinen Einfluß auf die Schrift in der Tabelle, könnst du mir vielleicht sagen was ich noch falsch mache? NOch einmal vielen Dank für eure hilfe.
 

Xenophon

Aktives Mitglied
Am besten du machst das so:
Code:
DefaultTableRenderer ren=new Tabelle();
TableColumnModel model = TabdaysofMonth1.getColumnModel();
TableColumn column = model.getColumn(int columnIndex); //den richtigen index übergeben (erste Spalte wäre 0)
column.setCellRenderer(ren)
 

hawkeye78

Bekanntes Mitglied
du verwirrst mich... :roll:
warum muß ich jetzt explizit eine spalte ansprechen? kann ich den renderer nicht für die gesamte Tabelle setzen und dann nur beliebige zellen mittels setValue editieren? oder habe ich da was bei den renderern vollkommen falsch verstanden?
 
B

bygones

Gast
der CellRenderer muss für jede Zeile gesetzt werden. Es könnte ja auch sein, dass du mehrer untersch. Renderer setzen willst.

Der Renderer hat nichts mit der setValue Methode des Models zu tun. Die kümmert sich darum, dass Daten in die Tabelle kommen - wie die Daten dann angezeigt werden wird über den Renderer gemacht
 

hawkeye78

Bekanntes Mitglied
also darf ich nun die daten nicht mehr direkt mit der schleife in die Tabelle schreiben? sondern muß über die Methode valueat gehen? ich dachte immer ich könnte die daten erst in die Tabelle schreiben und dann die entsprechenden Elemente abändern
 

Xenophon

Aktives Mitglied
hawkeye78 hat gesagt.:
kann ich den renderer nicht für die gesamte Tabelle setzen ...?

Du kannst den Renderer für die gesamte Tabelle setzen mit "setDefaultCellRenderer(Class columnClass, TableCellRenderer renderer)", wobei "Class columnClass" den Datentyp für den der Rendere genutzt wird angibt. Wenn Du also für "Class columnClass" "String.class" übergibst, werden alle Zellen die ein Value vom Typ String beinhalten mit diesem Rendere gerendert. Mit dem anderen Weg setzt Du den Renderer für eine Spalte. In Deinem Fall dürfte der es also gehen, wenn Du die Methode "setDefaultCellRenderer" nutzt, nur hast Du mit "Tabelle.class" einen völlig sinnlosen Typ übergeben. Versuch es mal mit "String.class".
 

hawkeye78

Bekanntes Mitglied
Ich wünsche allerseits einen wunderschönen guten Morgen :)

leider funktioniert das Programm immer noch nicht so wie ich mir das wünschen würde, ich habe nun folgende Codezeilen in dem Programm stehen

Code:
DefaultTableCellRenderer ren=new Tabelle();
TabdaysofMonth1.setDefaultRenderer(String.class,ren);

Wie kann ich damit nun die einzelnen Zellen ansprechen um die Schriftfarbe zu ändern? Über die setValue Methode funktioniert das irgendwie nicht richtig oder rufe ich die Methode nur falsch auf?
 

Xenophon

Aktives Mitglied
Ruf mal bei Deiner Tabelle "getValueAt(int row, int column).getClass()" auf, nachdem Du das TabelModel fertig und der Tabelle gesetzt hast. Lass Dir das Ergebniss mal ausgeben und sag mal bescheid. Wenn dort Object und nicht String rauskommt, dann nimm mal Object.class als Parameter bei setDefaultRenderer.
 

hawkeye78

Bekanntes Mitglied
Jetzt funktioniert es :D das einzige was jetzt nach wie vor nicht funktioniert ist die Definition für einzelne Zellen mittels der setValue Methode. Aber ich denke damit kann ich nun leben da ich den Renderer jetzt auf die Spalte gesetzt habe. Wenn du magst kann du mir ja noch einmal einen Tipp geben warum er bei der gesamten Tabelle die Schrift in allen Zellen einfärbt.
Aber ich möchte mich noch einmal für deine Geduld (ich weiss das ich hin und wieder ziemlich langsam begreife) und deine Erläuterungen bedanken
 

Xenophon

Aktives Mitglied
Du setzt ja bei Deinem Renderer auch immer die Farbe rot.
Code:
// Schrift für den Sonntag auf rot setzen
//diese Methode wird immer bei "getTableCellRendererComponent" aufgerufen
public void setValue(Object value) 
{ 
    String Sonntag=value.toString(); 
    //hier wird !!! immer !!! die Farbe auf rot gesetzt
    setForeground(Color.red); 
    setText(Sonntag); 
}
Deine Wert (also der Text) ist bei Dir ja nur der Tag des Monats (1, 2, ...) oder?Du müsstest also in Deiner Methode setValue überprüfen, ob es sich um einen Sonntag handelt und nur dann die Farbe auf rot setzen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Interface Schriftfarbe von Benutzer anders als vun Computer/Code Java Basics - Anfänger-Themen 6
M Schriftfarbe in JFrame Java Basics - Anfänger-Themen 24
W Eine Zelle einer Tabelle die Schriftfarbe ändern Java Basics - Anfänger-Themen 5
F Label Schriftfarbe Java Basics - Anfänger-Themen 4
J JLabel gleich in einer Schriftfarbe anzeigen Java Basics - Anfänger-Themen 4
H Die Schriftfarbe des JRadioButton festlegen Java Basics - Anfänger-Themen 2
A Swing Schriftfarbe für komplettes Panel ändern Java Basics - Anfänger-Themen 2
W Schriftfarbe ändern Java Basics - Anfänger-Themen 4
J schriftfarbe als methode Java Basics - Anfänger-Themen 2
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
B Variablen Int Variabel in JTextField ändern Java Basics - Anfänger-Themen 2
W Methode ändern Java Basics - Anfänger-Themen 65
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
javapingu Variablenwerte ändern ohne return Statement? Java Basics - Anfänger-Themen 7
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
B Filepath "ändern"? Java Basics - Anfänger-Themen 5
t2im Java Array-Länge ändern? Java Basics - Anfänger-Themen 22
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
amelie123456 Geschwindigkeit der Methode bewegeDich eines Objekts ändern Java Basics - Anfänger-Themen 2
P Standard resources-Verzeichnis ändern Java Basics - Anfänger-Themen 9
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
J Itext-Paragraph Position ändern Java Basics - Anfänger-Themen 13
Z Attribut ändern ohne Kontrollstruktur Java Basics - Anfänger-Themen 2
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
V Umgebungsvariable Genutzte Javaversion in der Konsole ändern Java Basics - Anfänger-Themen 5
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
M Programm per Nutzereingabe ändern Java Basics - Anfänger-Themen 3
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
L Java Date Format ändern Java Basics - Anfänger-Themen 5
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
F Schriftgröße ändern Java Basics - Anfänger-Themen 2
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
J Kapselung Array in Set ändern und in Main ausgeben lassen Java Basics - Anfänger-Themen 4
D scheduledAtFixedRate speed ändern Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
Henri Erste Schritte Iteration ändern Java Basics - Anfänger-Themen 12
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Cursor ändern Java Basics - Anfänger-Themen 8
B Eclipse Tabellen Farbe ändern? Java Basics - Anfänger-Themen 2
I Ordnung JLayeredPane mit Button ändern Java Basics - Anfänger-Themen 5
S Array Eintrag ändern Java Basics - Anfänger-Themen 6
J variablePathPart ändern nach dem Ordner abgearbeitet worden ist Java Basics - Anfänger-Themen 1
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
M im String Alphabet ändern Java Basics - Anfänger-Themen 3
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
T Parameter das übergeben wurde ändern? Java Basics - Anfänger-Themen 1
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
Hijo2006 Eclipse: Java Icon ändern Java Basics - Anfänger-Themen 9
S Schriftart/Farbe im Grafikfenster ändern Java Basics - Anfänger-Themen 8
G BenutzerDaten teilweise ändern in txt Datei Java Basics - Anfänger-Themen 10
J Button in anderer Klasse ändern Java Basics - Anfänger-Themen 3
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
R Vererbung Variable in einem übergeordneten Objekt ändern Java Basics - Anfänger-Themen 4
R JTextArea final Status ändern Java Basics - Anfänger-Themen 11
W Methoden Methode auf Array aufrufen, und dieses Array dabei ändern? Java Basics - Anfänger-Themen 10
A Variablen Variable soll ihren Wert nach Initialisierung nicht mehr ändern Java Basics - Anfänger-Themen 2
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
J Klassen Klassenmethode um Variable zu ändern Java Basics - Anfänger-Themen 7
L zweidimensionales char array reihenfolge ändern ? Java Basics - Anfänger-Themen 2
D Eigenschaften eines Objektes ändern Java Basics - Anfänger-Themen 1
D Opencsv-3.5 DEFAULT_DATE_FORMAT ändern Java Basics - Anfänger-Themen 8
M Erste Schritte Code zur Laufzeit ändern lassen Java Basics - Anfänger-Themen 3
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
U Tabelle ändern und die Inhalte speichern Java Basics - Anfänger-Themen 9
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
Z JLabel Icon ändern Java Basics - Anfänger-Themen 2
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
N Variablen ändern wenn eine andere geändert wird Java Basics - Anfänger-Themen 7
U Farbe meines Würfels jede sekunde ändern! Java Basics - Anfänger-Themen 5
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
Z System(einstellungen) per Java ändern/Steuern | Betriebssystembezogen Java Basics - Anfänger-Themen 7
W Klassen Variable einer anderen Klasse ändern (Threads) Java Basics - Anfänger-Themen 3
E Systemzeit ändern Java Basics - Anfänger-Themen 7
W Konsolenprograamm in GUI-Programm ändern Java Basics - Anfänger-Themen 1
D JLabel ändern in actionperformed Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben