Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen

jal1976

Mitglied
Hallo,

ich habe eine JTable mit einem eigenen TableCellRenderer. Wenn ich den TableCellRenderer der JTable hinzufüge mit
Java:
table.setDefaultRenderer(Object.class, new JWebCJTableCellRenderer(this.cellBorder));
dann zeigt die Tabelle die Strings in den Zellen nicht mehr an. Wenn ich den TableCellRenderer NICHT hinzufüge, dann erscheinen die Werte in den Zellen wieder. Die Strings sind aber da, ich kann sie mir mit getValueAt(int row, int column); ausgeben lassen. Nur werden die Strings halt nicht sichtbar dargestellt in der JTable. ???:L ;(
Ich weiss im Moment einfach nicht warum... Hat jemand von euch einen Tip für mich? ;)

Hier mal die Klasse die von JTable erbt (mit inner Klasse, die JWebCTableCellRenderer):

Java:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;

public class JWebCTable extends JTable
{
	private static final long serialVersionUID = 1L;
	private TitledBorder cellBorder = BorderFactory.createTitledBorder("");
	private static boolean cellEdit = false;
	
	public JWebCTable(DefaultTableModel _model)
	{
		super(_model);
		this.initFuncs();
		this.setValueAt("HUHUHUHU", 2, 3); // Testhalber um zu prüfen ob der Wert auch angezeigt wird
        }
	
	private void initFuncs()
	{
		this.setDefaultRenderer(Object.class, new JWebCJTableCellRenderer(this.cellBorder));
		
		TableColumnModel columnModel = this.getColumnModel();
		for(int i=0; i<columnModel.getColumnCount(); i++)
		{
			columnModel.getColumn(i).setPreferredWidth(Default.ROW_WIDTH);
		}
		
		JTableHeader header = this.getTableHeader();
		header.setResizingAllowed(false);
                header.setReorderingAllowed(false);
		header.setDefaultRenderer(new JWebCJTableHeaderCellRenderer());
		
		this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		this.setCellSelectionEnabled(true);
		this.setRowHeight(Default.ROW_HEIGHT);
		this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
	}
	
	public boolean isCellEditable(int row, int col)
	{
		return this.getCellEdit();
	}
	
	public boolean getCellEdit()
	{
		return cellEdit;
	}
	
	public static void setCellEdit(boolean _cellEdit)
	{
		cellEdit = _cellEdit;
	}
	
	private class JWebCJTableCellRenderer extends JLabel implements TableCellRenderer
	{
		private static final long serialVersionUID = 1L;
		private TitledBorder cellBorder;
		
		public JWebCJTableCellRenderer(TitledBorder _cellBorder)
		{
			this.setForeground(Default.BLACKCOLOR);
			this.setFont(Default.TABLE_FONT);
			this.setOpaque(true);
			this.cellBorder = _cellBorder;
		}
		
		@Override
		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
															boolean hasFocus, int rowIndex, int colIndex)
		{
			String cellContent = (String)table.getValueAt(rowIndex, colIndex);
			if(cellContent == null || cellContent.equals(""))
			{
				this.setBackground(Default.WHITECOLOR);
			}
			else
			{
				this.setBackground(JWebCalendar.getColorFromCellWithAnEntry());
			}
			
			if(isSelected)
			{
		        this.setBackground(Default.TABLE_SELECTION_COLOR);
			}
			this.setBorder(this.cellBorder);
			return this;
		}
	}
}

Und hier ein Teilausschnitt der Klasse wo die JWebCTable erstellt wird:

Java:
private JScrollPane createWeekTableScrollPane()
	{
		DefaultTableModel weekModel = new DefaultTableModel(this.columnNames, 6);
		JWebCTable weekTable = new JWebCTable(weekModel);
		
		JScrollPane scroll = new JScrollPane(weekTable);
		
		scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		return scroll;
	}
 

eRaaaa

Top Contributor
Mhm fehlt in deinem Renderer( getTableCellRendererComponent) nicht [c]setText(cellContent);[/c] ? :D
Btw: Das Objekt bekommst du doch schon übergeben...
 

Michael...

Top Contributor
und folgendes im CellRenderer ist auch überflüssig:
[JAVA=72] String cellContent = (String)table.getValueAt(rowIndex, colIndex);
[/code]
Der Zelleninhalt steckt ja bereits in der Variable value drin, den brauch man nicht nochmal über getValueAt(...) zu holen.
 

jal1976

Mitglied
Oh mann, ich hab den Wald vor lauter Bäumen nicht gesehen... *peinlich peinlich* :lol: :oops:

Ich danke euch beiden erstmal tausendfach.
Ist mir gar nicht aufgefallen, obwohl ich den Code bestimmt schon 100mal durch geschaut habe... lach
Und das mit getValue ist natürlich auch überflüssig... logischerweise.

Vielen, vielen Dank nochmal.

Nochmal was anderes:
Ich wollte nun, das jede Zelle eine TitledBorder bekommt... das ist gar kein Problem (haben sie ja schon!).
Nur wie ich das umsetze, das auch jede Border (also jede Zelle) einen anderen Title (cellBorder.setTitle()) hat, bekomme ich im Moment nicht richtig hin.
Hab schon so einiges versucht, aber logischerweise bekommen alle Zellen (TitledBorder) denselben Wert zur Anzeige im Title....

Habt ihr vielleicht noch nen Tip für mich wie man so etwas realisieren kann? :noe::oops:

vg
jal1976
 

eRaaaa

Top Contributor
Mhm, die Frage verstehe ich nicht, du hast die richtige Methode doch schon genannt (setTitle()) ?
Welchen Titel sollen die einzelnen Zellen denn bekommen?

Also erst einmal würde ich
Code:
this.setBorder(this.cellBorder);
in den Konstruktor verschieben.
Und dann in der Methode würde doch dein von dir angesprochener Ansatz mit
Code:
cellBorder.setTitle(String s)
funktionieren?!
 

jal1976

Mitglied
Ich hab das setBorder() in den Konstruktor verschoben. Danke.

Wenn ich von aussen auf das jeweilige JLabel einer Zelle zugreifen möchte und dann dort setTitle() anwende, erscheint immer derselbe Titel in jeder Zelle!
Ich habe einen Wertebereich von 1-30 fortlaufend als Strings.
Wenn ich dies mit einer Schleife durchgehe und die Title (pro Zelle) setzen möchte, haben aber alle Zellen im TitledBorder die 30 stehen und sind nicht durchnummeriert... also von 1-30.

Ich hoffe ich konnte mich verständlich ausdrücken.

vg
jal1976
 

eRaaaa

Top Contributor
Mhm, kannst du nicht mal schnell ein kurzes Beispiel geben?
Bzw, wenn ich dich richtig verstanden habe willst du einfach jede Zelle durchnummerieren ?!
Dann würde doch wie schon gesagt
Java:
cellBorder.setTitle(String.valueOf(table.getColumnCount() * rowIndex + colIndex + 1));
in
Code:
getTableCellRendererComponent
ausreichen, oder nicht?

Ich verstehe "Wenn ich von aussen auf das jeweilige JLabel einer Zelle zugreifen möchte" noch nicht so richtig, wozu? Sorry :oops:
 

jal1976

Mitglied
Es geht darum das sich die Werte im TitledBorder in den Zellen zur Laufzeit ändern können.
Es kann auch sein das die Nummerierung nicht in der ersten Zelle (row = 0, column = 0) anfängt, sondern z.B. in der 3. Spalte der 1. Zeile (row = 0, column = 2). Und da es mehr Zellen gibt als durchnummeriert wird sollen die anderen Zellen mit setTitle(""); versehen werden...

Von aussen also denke ich mal ist es besser über table.prepareRenderer() zu gehen??!!

vg
jal1976
 

jal1976

Mitglied
Das Thema ist ja erledigt.
Damit man nicht durcheinander kommt, erstelle ich lieber mal nen neuen Thread wegen der TitledBorder Sache.
Denn das war nur eine Zusatzfrage und hat ja eigentlich mit dem Titel des Threads nichts zu tun... ;)
vg
jal1976
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Swing Falscher Wert nach eigener Sortierung (JTable) AWT, Swing, JavaFX & SWT 2
R JTable - eigener Editor - Mouse events AWT, Swing, JavaFX & SWT 2
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4
K Swing JTable updaten AWT, Swing, JavaFX & SWT 9
thet1983 Swing MySQL >> JTable AWT, Swing, JavaFX & SWT 5
J JTable bounds ändern durch resizing des Fensters AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
O JTable linksbündig drucken (nicht der Zelleninhalt) AWT, Swing, JavaFX & SWT 2
Crazynet xls Datei in JTable AWT, Swing, JavaFX & SWT 3
O JTable ohne Rahmen printen AWT, Swing, JavaFX & SWT 3
L Swing JTable refresht die Column Namen nicht AWT, Swing, JavaFX & SWT 0
K JTable komplett durch andere ersetzen AWT, Swing, JavaFX & SWT 4
S JTable übernimmt Änderungen nicht AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben