Swing JTable, Zellen-Farbe über Koordinaten ändern

Doc

Aktives Mitglied
Hallo,
hab ein kleines Problem.

Hab eine Tabelle und möchte per Button über Zell-Koordinaten die Hintergrundfarbe dieser Zelle ändern.
Geht das einfach mit einem Befehl ohne den Cell-Renderer zu verändern?

Grüßle,
Doc
 

Doc

Aktives Mitglied
Versteh das mit dem CellRenderer leider nicht so ganz.

Sollte dieser Befehl nicht funktionieren, oder muss ich im CellRenderer noch was hinzufügen?

table.getCellRenderer(i, 1).setBackground(Color.red);

Ich hab wie gesagt die Koordinaten der Zelle und möchte dann per Button die Zelle einfärben.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Das hilft auch nicht weiter.
Du musst Dir im Zellobjekt merken, ob die Hintergrundfarbe verändert werden soll und mit einem passenden CellRenderer entsprechend darauf reagieren.
 

Michael...

Top Contributor
Letztendlich gibt es da verschiedene Möglichkeiten aus denen man die für den Zweck passende finden muss.
JTable ist doch eine sehr komplexe Komponente, Es ist empfehlenswert sich dem Thema (inkl. CellRenderer, CellEditor) ersteinmal mittels Lektüre und Beispielen Schritt für Schritt zu nähern.

Grundsätzlich brauchst Du für Dein Vorhaben eine passende Kombination aus Modell und Renderer.

In meinem Bsp. verwende ich ein eigens Definiertes Objekt (ColorObject) und einen Renderer (ColorRenderer) der mit solchen Objekten umgehen kann:
Java:
package demo;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class ColorTableDemo extends JFrame {
	
	private JTable table;
	private DefaultTableModel model;
	private Color[] bgColor = new Color[] {Color.WHITE, Color.YELLOW, Color.GREEN, Color.BLUE, Color.RED};
	
	public ColorTableDemo() {
		model = new DefaultTableModel(new String[] {"Standard", "ColorObjekt"}, 0);
		for (int i=0; i<10; i++)
			model.addRow(new Object[] {"Zeile " + i, new ColorObject("Zeile " + i)});
		table = new JTable(model);
		table.getColumnModel().getColumn(1).setCellRenderer(new ColorRenderer(bgColor));
		this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
		
		JButton button;
		final JComboBox rowCombo, columnCombo, colorCombo;
		
		JPanel panel = new JPanel(new GridLayout(2, 4));
		panel.add(new JLabel("Row:"));
		panel.add(new JLabel("Column:"));
		panel.add(new JLabel("Color:"));
		panel.add(new JPanel());
		panel.add(rowCombo = new JComboBox(new Object[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
		panel.add(columnCombo = new JComboBox(new Object[] {"Standard", "ColorObject"}));
		panel.add(colorCombo = new JComboBox(bgColor));
		panel.add(button = new JButton("Paint"));
		this.getContentPane().add(panel, BorderLayout.NORTH);
		
		columnCombo.setSelectedIndex(1);
		colorCombo.setSelectedIndex(4);
		
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				Object value = model.getValueAt(rowCombo.getSelectedIndex(), columnCombo.getSelectedIndex());
				if (value instanceof ColorObject) {
					ColorObject co = (ColorObject)value;
					co.setBackground(colorCombo.getSelectedIndex());
					table.repaint();
				}
				else
					JOptionPane.showMessageDialog(ColorTableDemo.this, "Cell cannot change color!\nSelect another one!");
			}
		});
		
		table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				if (!e.getValueIsAdjusting()) {
					rowCombo.setSelectedIndex(table.getSelectedRow());
					columnCombo.setSelectedIndex(table.getSelectedColumn());
				}
			}
		});
	}
	
	class ColorRenderer extends DefaultTableCellRenderer {
		private Color[] colors;
		
		public ColorRenderer(Color[] colors) {
			this.colors = colors;
		}
		
		public Component getTableCellRendererComponent(JTable table, Object value,
                 boolean isSelected, boolean hasFocus, int row, int column) {
			super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
			ColorObject co = (ColorObject)value;
			if(!isSelected && !hasFocus) 
				this.setBackground(colors[co.getBackground()]);
			this.setText(co.getText());
			return this;
		}
	}
	
	class ColorObject {
		private String text;
		private int color;
		
		public ColorObject(String text) {
			this.text = text;
			color = 0;
		}
		
		public String getText() {
			return text;
		}
		
		public void setBackground(int colorIndex) {
			this.color = colorIndex;
		}
		
		public int getBackground() {
			return color;
		}
	}
	
	public static void main(String[] args) {
		JFrame frame = new ColorTableDemo();
		frame.setBounds(0, 0, 800, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 

Doc

Aktives Mitglied
Vielen, vielen Dank für deine Mühe.

Das ganze scheint ja sehr komplex zu sein.
Gibt es noch eine andere Möglichkeit Zellen oder auch nur ganze Zeilen hervorzuheben?

Wenn eine ganze Zeile markiert wäre, wär das auch in Ordnung. So wie wenn man in die Tabelle klickt. Also irgendwie die Zeilen als selected anwählen.
Allerdings brauche ich die Möglichkeit mehrere Zeilen gleichzeitig hervorzuheben.

Nochmals danke!

EDIT:
habs nun mit table.setRowSelectionInterval und addRowSelectionInterval hinbekommen.
 
Zuletzt bearbeitet:

Doc

Aktives Mitglied
noch ne Frage :)

Wenn ich in einer Zelle eine TextArea habe. Kann ich dann nicht einfach die Hintergrundfarbe der TextArea ändern? Als Highlight sozusagen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JTable Zellen Farbe AWT, Swing, JavaFX & SWT 13
D Im JTable bei einzelnen Zellen die Farbe ändern AWT, Swing, JavaFX & SWT 3
M JTable und Farbe von Zellen AWT, Swing, JavaFX & SWT 2
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
A Swing JTable Umgang mit Zellen AWT, Swing, JavaFX & SWT 2
S Swing Zeilenumbruch in JTable Zellen AWT, Swing, JavaFX & SWT 3
M Swing Jtable zellen zentrieren AWT, Swing, JavaFX & SWT 4
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
M JTable Zeilen und Zellen einfärben AWT, Swing, JavaFX & SWT 11
GUI-Programmer JTable - zentrierte Zellen AWT, Swing, JavaFX & SWT 2
B JTable Selektion von Zellen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing JTable Zellen intelligenter Zeilenumbruch AWT, Swing, JavaFX & SWT 4
K Swing JTable Editierfunktion für einzelne Zellen ausschalten AWT, Swing, JavaFX & SWT 3
X JTable Zellen nicht editierbar AWT, Swing, JavaFX & SWT 5
S Swing JTable - Editierung von Zellen abfangen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing jTable (bestimmte Zellen umrahmen) AWT, Swing, JavaFX & SWT 8
N Swing JTable: Zellen verbinden AWT, Swing, JavaFX & SWT 11
N Zellen einer JTable unterschiedlich formatieren AWT, Swing, JavaFX & SWT 7
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
G JTable Multiple Row Header Example - Probleme mit der Höhe der Zellen AWT, Swing, JavaFX & SWT 4
C Swing JTable: Horizontale Linie bei einzelnen Zellen ausblenden AWT, Swing, JavaFX & SWT 5
C JTable: Alle selektierten Zellen abfangen AWT, Swing, JavaFX & SWT 13
V Nur zulässige Zeichen in JTable-Zellen eintragen können AWT, Swing, JavaFX & SWT 2
F Text Vertical in Zellen von JTable AWT, Swing, JavaFX & SWT 3
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
A Flexible JTable mit editierbaren Zellen,abhängig von Data AWT, Swing, JavaFX & SWT 2
C JTable und farbige Zellen AWT, Swing, JavaFX & SWT 5
R JTable: Zellen einer Spalte unterschiedlich befüllen AWT, Swing, JavaFX & SWT 2
R JTable: Zellen einer Zeile zusammenfassen? AWT, Swing, JavaFX & SWT 3
R JTable darstellen von leeren Zellen AWT, Swing, JavaFX & SWT 12
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
R JTable updatePaint() angabe der geänderten Zellen AWT, Swing, JavaFX & SWT 3
R JTable mehrere Zellen mit Shift selektieren AWT, Swing, JavaFX & SWT 2
R JTable einzelne Zellen selektieren AWT, Swing, JavaFX & SWT 7
R JTable - Rendern der einzelnen Zellen AWT, Swing, JavaFX & SWT 3
X in JTable nur einige Zellen editierbar machen AWT, Swing, JavaFX & SWT 2
G JTable: Spalten & Zellen fixieren wie in Excel AWT, Swing, JavaFX & SWT 4
G JTable Zellen makieren AWT, Swing, JavaFX & SWT 2
M JTable Zelle ändern -> andere Zellen mit ändern AWT, Swing, JavaFX & SWT 5
J JTable Zellen und Header AWT, Swing, JavaFX & SWT 2
A Zellen in JTable auf Klick kurz markieren auf Klick AWT, Swing, JavaFX & SWT 2
E JTable; DefaultTableCellRenderer. Zellen farbig befüllen. AWT, Swing, JavaFX & SWT 5
E JTable-während der Einfügezeit der Zellen in die Table AWT, Swing, JavaFX & SWT 2
H JTable Text aus mehreren Zellen in einer Spalte kopieren? AWT, Swing, JavaFX & SWT 3
M [Swing] Kalender mit JTable / Einfärben von Zellen AWT, Swing, JavaFX & SWT 10
A JTable, mehrere Zellen markieren AWT, Swing, JavaFX & SWT 3
L Again: In JTable bestimmte Zellen färben AWT, Swing, JavaFX & SWT 12
M CellEditor für individuelle Zellen in JTable AWT, Swing, JavaFX & SWT 3
G JTable(Zellen) und JPanel AWT, Swing, JavaFX & SWT 2
G Rowspan (Zellen verbinden) in JTable? AWT, Swing, JavaFX & SWT 3
R JTable Zellen markieren AWT, Swing, JavaFX & SWT 3
R JTable, automatischer resize der Zellen nach einer Eingabe AWT, Swing, JavaFX & SWT 4
T JTable, Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 23
I einzelne Zellen bei JTable markieren AWT, Swing, JavaFX & SWT 3
G Zellen in JTable alphabetisch sortieren AWT, Swing, JavaFX & SWT 13
N JTable - Problem mit markieren von Zellen AWT, Swing, JavaFX & SWT 3
B JTable-Zellen einfärben AWT, Swing, JavaFX & SWT 6
W JTable Zellen verbinden AWT, Swing, JavaFX & SWT 2
S JTable Zellen ändern AWT, Swing, JavaFX & SWT 3
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
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
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

Ähnliche Java Themen

Neue Themen


Oben