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:
Hat wer einen anderen Lösungsansatz?
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?