I would like to change the backgroundcolor of the containing Frame, but it does not seem to work. I added debug- Messages and checked the console output, the switch is working and setting the background with
MainFrame.setBackground(
) Method.
import java.awt.*;
import java.awt.event.*;
public class StateWindow {
private Frame MainFrame;
private int bgcolor;
StateWindow() {
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int scrwidth = gd.getDisplayMode().getWidth();
int scrheight = gd.getDisplayMode().getHeight();
MainFrame = new Frame("StateWindow");
MainFrame.setSize(200, 200);
MainFrame.setLayout(new BorderLayout());
MainFrame.setLocation((scrwidth-250), (scrheight-450));
MainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
}
});
bgcolor = 1;
Panel centerPanel = new Panel(new FlowLayout());
Label titlelabel = new Label("StateWindow", Label.CENTER);
Button changeBut = new Button("Change State");
changeBut.setSize(60, 30);
centerPanel.add(changeBut);
MainFrame.add(titlelabel, BorderLayout.NORTH);
MainFrame.add(centerPanel, BorderLayout.CENTER);
MainFrame.setBackground(Color.BLUE);
changeBut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
switch(bgcolor) {
case 1: MainFrame.setBackground(Color.GREEN); MainFrame.repaint(); bgcolor = 2; break;
case 2: MainFrame.setBackground(Color.ORANGE); MainFrame.repaint(); bgcolor = 3; break;
case 3: MainFrame.setBackground(Color.RED); MainFrame.repaint(); bgcolor = 1; break;
}
}
});
MainFrame.setVisible(true);
}
public static void main(String args[]) {
StateWindow StateWindow = new StateWindow();
}
}
Use a Panel and add that into the Frame and change background of the Panel. Please check the below code. Make sure you add the child components to the Panel.