使用边框布局管理器更改面板背景



我正在尝试设置我的按钮以使用边框布局管理器更改按钮所在的面板背景颜色。当我使用流布局时,我没有问题,但无法使用边框布局来弄清楚。我觉得我错过了一些基本的东西。我发现了带有面板和颜色变化的类似线程,但没有一个能够回答我的问题。这是我到目前为止所拥有的:

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

我已经设法获得了要编译的代码

试试这个

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

相关内容

  • 没有找到相关文章