Swing Hintergrund aller Komponenten verändern

Dragonfire

Bekanntes Mitglied
Hi,
ich meine es gibt mal einen leichten Weg
die Hintergrundsfarbe aller Komponenten zur Laufzeit zu ändern.

Weiß wer einen eleganteren Weg,
als rekursiv alle Komponenten aufzurufen?

Mit dem UI-Manager geht es ja nur beim Start :-(

So sieht zurzeit mein Code aus:

Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class BackgroundTest {
	public static JPanel getMainPanel() {
		final JPanel mainPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));

		JPanel panel1 = new JPanel();
		panel1.add(new JButton("A"));
		panel1.add(new JButton("B"));
		panel1.add(new JButton("C"));

		JPanel panel2 = new JPanel(new GridLayout(2, 1));
		panel2.add(new JButton("A"));
		panel2.add(new JButton("B"));
		panel2.add(new JButton("C"));

		JPanel panel3 = new JPanel();
		final JColorChooser c = new JColorChooser(Color.BLACK);
		c.getSelectionModel().addChangeListener(new ChangeListener() {

			@Override
			public void stateChanged(ChangeEvent e) {
				updateBackground(mainPanel, c.getColor());
			}
		});
		panel3.add(c);

		mainPanel.add(panel1);
		mainPanel.add(panel2);
		mainPanel.add(panel3);
		return mainPanel;
	}

	public static void updateBackground(Component component, Color backcolor) {
		component.setBackground(backcolor);

		if (component instanceof Container) {
			for (int i = 0; i < ((Container) component).getComponentCount(); i++) {
				updateBackground(((Container) component).getComponent(i),
						backcolor);
			}
		}
	}

	public static void main(String[] args) {
		UIManager.put("Panel.background", Color.WHITE);
		JFrame f = new JFrame("BackgroundTest");
		f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

		f.add(getMainPanel());
		f.pack();
		f.setVisible(true);
		f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
}

Hat wer einen anderen Lösungsansatz?
 

Dragonfire

Bekanntes Mitglied
Das ist schlau^^

Schade das

Java:
UIManager.put("Panel.background", null);

nicht geht,
dann mache ich das eben manuell^^

Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class BackgroundTest {
	public static JPanel getMainPanel() {
		final JPanel mainPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));

		JPanel panel1 = new JPanel();
		panel1.setBackground(null);
		panel1.add(new JButton("A"));
		panel1.add(new JButton("B"));
		panel1.add(new JButton("C"));

		JPanel panel2 = new JPanel(new GridLayout(2, 1));
		panel2.setBackground(null);
		panel2.add(new JButton("A"));
		panel2.add(new JButton("B"));
		panel2.add(new JButton("C"));

		JPanel panel3 = new JPanel();
		panel3.setBackground(null);
		final JColorChooser c = new JColorChooser(Color.BLACK);
		updateBackground(c);
		c.getSelectionModel().addChangeListener(new ChangeListener() {

			@Override
			public void stateChanged(ChangeEvent e) {
				mainPanel.setBackground(c.getColor());
			}
		});
		panel3.add(c);

		mainPanel.add(panel1);
		mainPanel.add(panel2);
		mainPanel.add(panel3);
		return mainPanel;
	}

	public static void updateBackground(Component component) {
		component.setBackground(null);

		if (component instanceof Container) {
			for (int i = 0; i < ((Container) component).getComponentCount(); i++) {
				updateBackground(((Container) component).getComponent(i));
			}
		}
	}

	public static void main(String[] args) {
		JFrame f = new JFrame("BackgroundTest");
		f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

		f.add(getMainPanel());
		f.pack();
		f.setVisible(true);
		f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
1 2D-Grafik Flackerndes Hintergrund AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX HTTP Download task im Hintergrund innerhalb GUI AWT, Swing, JavaFX & SWT 70
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
C Java Hintergrund funktioniert nicht AWT, Swing, JavaFX & SWT 9
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
T Hintergrund für GUI AWT, Swing, JavaFX & SWT 1
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
H Textfield bleibt im Hintergrund AWT, Swing, JavaFX & SWT 2
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
F 2D-Grafik Den Hintergrund loopen AWT, Swing, JavaFX & SWT 3
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
O Hintergrund von AffineTransfom (rotation) ändern AWT, Swing, JavaFX & SWT 0
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
S Swing, Button benutzen zum Hintergrund wechseln AWT, Swing, JavaFX & SWT 3
N Swing microba - DatePicker: Feld-Hintergrund anpassen AWT, Swing, JavaFX & SWT 2
M Tastatureingabe im Hintergrund (JTable) AWT, Swing, JavaFX & SWT 2
B Hintergrund laden AWT, Swing, JavaFX & SWT 3
B Swing Zähler im Hintergrund falsch berechnet - Warum? AWT, Swing, JavaFX & SWT 3
J JButton Hintergrund AWT, Swing, JavaFX & SWT 5
L Gradient Hintergrund malen und durchscheinen lassen AWT, Swing, JavaFX & SWT 8
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
L Beim Neuzeichnen einer Swing GUI kurz Schwarzer Hintergrund AWT, Swing, JavaFX & SWT 8
D Swing Probleme bei transparenten Hintergrund im JTextField AWT, Swing, JavaFX & SWT 6
J Swing Malen auf JPanel mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 21
S 2D-Grafik Bild bleibt im Hintergrund bei Diashow AWT, Swing, JavaFX & SWT 3
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
B JList transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
E Swing JPanel mit Hintergrund AWT, Swing, JavaFX & SWT 3
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
kniffel GUI-Applet JTable füllt Hintergrund völlig aus AWT, Swing, JavaFX & SWT 4
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
A Hintergrund von einem Frame ändern AWT, Swing, JavaFX & SWT 3
T Hintergrund AWT, Swing, JavaFX & SWT 4
T Hintergrund für 3D Erde AWT, Swing, JavaFX & SWT 4
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
P Swing Zeichnung auf Tab im Hintergrund wird nicht gezeichnet AWT, Swing, JavaFX & SWT 3
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
R Bedeckter Hintergrund AWT, Swing, JavaFX & SWT 17
D Komponenten um weitere Hintergrund- bzw. Vordergrundfarbe erweitern AWT, Swing, JavaFX & SWT 11
M JFrame (Mausrad, Hintergrund) AWT, Swing, JavaFX & SWT 13
DStrohma Swing JPanel mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
N GridBagLayout, leere grids (Hintergrund) transparent? AWT, Swing, JavaFX & SWT 3
J Swing JPanel mit Hintergrund zeigt componente nicht AWT, Swing, JavaFX & SWT 6
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
algorismi JCompnent mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 4
T Schließen eines JDialogs setzen den JFrame in den Hintergrund AWT, Swing, JavaFX & SWT 2
J CellRenderer einzelne zellen Hintergrund AWT, Swing, JavaFX & SWT 9
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
E Progress Bar mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
N Swing Hintergrund Bild in JAR Datei AWT, Swing, JavaFX & SWT 2
N im fenster ein hintergrund bild einfügen AWT, Swing, JavaFX & SWT 18
A Swing Mit Graphics2D auf transparentem Hintergrund zeichnen AWT, Swing, JavaFX & SWT 7
A Hintergrund erstellen AWT, Swing, JavaFX & SWT 13
J Layer von JLayeredPane unsichtbar durchsichtig in den Hintergrund AWT, Swing, JavaFX & SWT 5
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
P Swing JComboBox beschädigt hintergrund AWT, Swing, JavaFX & SWT 4
S JButton - Hintergrund verändern AWT, Swing, JavaFX & SWT 7
J Fensterrand überdeckt Hintergrund AWT, Swing, JavaFX & SWT 9
K JTable hintergrund AWT, Swing, JavaFX & SWT 12
SebSnake Animiertes GIF auf JPG Hintergrund darstellen? AWT, Swing, JavaFX & SWT 3
G Label auf Panel auf Panel mit Grafiken als Hintergrund (awt) AWT, Swing, JavaFX & SWT 7
G TextField im Hintergrund AWT, Swing, JavaFX & SWT 2
O Zweifarbiger Hintergrund in einer TableCell? AWT, Swing, JavaFX & SWT 4
R Bilder als Hintergrund für Swing - Komponenten AWT, Swing, JavaFX & SWT 3
R HTML Hintergrund für Swing - Componenten AWT, Swing, JavaFX & SWT 2
0 JTable - Hintergrund Tabellen statt Grau AWT, Swing, JavaFX & SWT 5
V JButton in Hintergrund zwingen? AWT, Swing, JavaFX & SWT 14
G Hintergrund AWT, Swing, JavaFX & SWT 5
M Hintergrund Transparent machen? AWT, Swing, JavaFX & SWT 3
F Farbe für den Hintergrund eine BorderLayout-Teils AWT, Swing, JavaFX & SWT 5
C Fenster rücken beim Drucken in den Hintergrund AWT, Swing, JavaFX & SWT 6
B Programm im Hintergrund - JFrame AWT, Swing, JavaFX & SWT 5
D Robot: Screenshot vom Desktop Hintergrund möglich ? AWT, Swing, JavaFX & SWT 3
F JDialog im Hintergrund lassen AWT, Swing, JavaFX & SWT 2
G schwarzen hintergrund von png transparent machen AWT, Swing, JavaFX & SWT 2
J jlabels überlappen / vorder-hintergrund AWT, Swing, JavaFX & SWT 2
G hintergrund farbe vom flow layout ändern AWT, Swing, JavaFX & SWT 2
S Button im Hintergrund AWT, Swing, JavaFX & SWT 12
foobar JTable im Hintergrund drucken AWT, Swing, JavaFX & SWT 2
B Hintergrund eines JPanels AWT, Swing, JavaFX & SWT 16
M Bild als Hintergrund anzeigen? AWT, Swing, JavaFX & SWT 12
S Hintergrund JTable AWT, Swing, JavaFX & SWT 9
G hintergrund von JFrame/Container transparent machen AWT, Swing, JavaFX & SWT 2
R JMenu + Farbe von Hintergrund AWT, Swing, JavaFX & SWT 2
K icons sauber anzeigen (an hintergrund angepasst) AWT, Swing, JavaFX & SWT 4
RoliMG png datein mit transparentem hintergrund darstellen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben