Изменение фона панели с менеджером бордюров
Я пытаюсь настроить кнопки для изменения цвета фона панели, в котором находятся кнопки, с помощью диспетчера границы. У меня нет проблем, когда я использую 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 ответ
Решение
Попробуй это
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);
}
}