Question

I am trying to set my buttons to change the panel background color in which the buttons reside using a borderlayout manager. I have no problems when I use flowlayout but can't figure it out with the border layout. I feel like I am missing something fundamental. I have found similar threads with panels and color changing but none have been able to answer my question. Here's what I have so far:

import java.awt.*;     // Needed for BorderLayout class
import javax.swing.*;  // Needed for Swing classes
import java.awt.event.*;//Needed for Action Listener


public class BorderPanelWindow extends JFrame
{
   public BorderPanelWindow()
   { 
      // Set the title bar text.
      setTitle("Border Layout");

      // Specify an action for the close button.
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // Add a BorderLayout manager to the content pane.
      setLayout(new BorderLayout());

      // Create five panels.
      JPanel panel1 = new JPanel();
      JPanel panel2 = new JPanel();
      JPanel panel3 = new JPanel();
      JPanel panel4 = new JPanel();
      JPanel panel5 = new JPanel();

      // Create five buttons.
      JButton rbutton = new JButton("Red");
      JButton bbutton = new JButton("Blue");
      JButton gbutton = new JButton("Green");
      JButton ybutton = new JButton("Yellow");
      JButton obutton = new JButton("Orange");

      //create actions for the buttons
      ColorChanger yellowAction = new ColorChanger(Color.YELLOW); 
      ColorChanger redAction = new ColorChanger(Color.RED); 
      ColorChanger blueAction = new ColorChanger(Color.BLUE);
      ColorChanger greenAction = new ColorChanger(Color.GREEN);
      ColorChanger orangeAction = new ColorChanger(Color.ORANGE);

      //set actions for the buttons
      rbutton.addActionListener(redAction);
      bbutton.addActionListener(blueAction);
      gbutton.addActionListener(greenAction);
      ybutton.addActionListener(yellowAction);
      obutton.addActionListener(orangeAction);


      // Add the buttons to the panels.
      panel1.add(rbutton);
      panel2.add(bbutton);
      panel3.add(gbutton);
      panel4.add(ybutton);
      panel5.add(obutton);

      // Add the five panels to the content pane.
      add(panel1, BorderLayout.NORTH);
      add(panel2, BorderLayout.SOUTH);
      add(panel3, BorderLayout.EAST);
      add(panel4, BorderLayout.WEST);
      add(panel5, BorderLayout.CENTER);

      // Pack and display the window.
      pack();
      setVisible(true);
   }

   private class ColorChanger implements ActionListener 
   { 
      //fields
      private Color backgroundColor;

      //constructor
      public ColorChanger(Color c) 
      { 
         backgroundColor = c; 
      } 


      public void actionPerformed(ActionEvent e) 
      {
         setBackground(backgroundColor); 
      }  

   } 



   public static void main(String[] args)
   {
       new BorderPanelWindow();
   }
}

I've managed to get the code to compile

Was it helpful?

Solution

Try this one

    public void actionPerformed(ActionEvent e) {
        for (int i = 0; i < getContentPane().getComponentCount(); i++) {
            getContentPane().getComponent(i).setBackground(backgroundColor);
        }
    }

You are changing the color of JFrame which is parent of all JPanel that is added into it. You have to set the background color of all JPanel added into it.


--EDIT--

As per your last comment - I only want the region where the buttons reside to change color

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() instanceof JButton) {
            ((JButton) e.getSource()).getParent().setBackground(backgroundColor);
        }
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top