使用borderlayout Manager更改面板背景

时间:2014-03-21 22:32:03

标签: java swing background-color panels border-layout

我正在设置我的按钮,使用borderlayout管理器更改按钮所在的面板背景颜色。我使用flowlayout时没有问题但是无法用边框布局来解决它。我觉得我错过了一些基本的东西。我找到了类似的面板和颜色变化的线程,但没有一个能够回答我的问题。这就是我到目前为止所拥有的:

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();
   }
}

我设法获得编译代码

1 个答案:

答案 0 :(得分:0)

试试这个

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

您正在更改JFrame的颜色,该颜色是添加到其中的所有JPanel的父级。您必须设置添加到其中的所有JPanel的背景颜色。


- 编辑 -

根据您的上一条评论 - 我只希望按钮所在的区域改变颜色

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() instanceof JButton) {
            ((JButton) e.getSource()).getParent().setBackground(backgroundColor);
        }
    }