В моем назначении графики я не могу установить цвет фона панели. Если я поместил ColorPanel в другую панель, цвет фона панели изменится, однако круг не перемещается, если я изменю размер панели. В моем назначении требуется, если изменить размер рамки, круг должен находиться в центре кадране удалось установить Цвет фона панели
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ColorMenuFrame extends JFrame {
private JMenu colorMenu = new JMenu("Colors");
private ColorPanel p = new ColorPanel();
public ColorMenuFrame(){
p.setPreferredSize(new Dimension(100, 100));
this.add(p);
}
// Main Method
public static void main(String[] args) {
ColorMenuFrame frame = new ColorMenuFrame();
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
//ColoRpanel class
public class ColorPanel extends JPanel {
private int diameter;
public ColorPanel() {
// Creating Colors JMEnuBar
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu colorMenu = new JMenu("Colors");
menuBar.add(colorMenu);
// Creating Background and Foreground menus
JMenu backGroundMenu = new JMenu("BackGround");
JMenu foreGroundMenu = new JMenu("ForeGround");
// Items inside the Background and Foreground menus
JMenuItem redItem = new JMenuItem("Red");
JMenuItem greenItem = new JMenuItem("Green");
JMenuItem blueItem = new JMenuItem("Blue");
JMenuItem redItem1 = new JMenuItem("Red");
JMenuItem greenItem1 = new JMenuItem("Green");
JMenuItem blueItem1 = new JMenuItem("Blue");
// Adding Red, Green and Blue Items to backGround menu
backGroundMenu.add(redItem);
backGroundMenu.add(greenItem);
backGroundMenu.add(blueItem);
// Adding Red, Green and Blue Items to ForeGround menu
foreGroundMenu.add(redItem1);
foreGroundMenu.add(greenItem1);
foreGroundMenu.add(blueItem1);
// Adding backGround and foreground sub menus to main Menu Bar Colors
colorMenu.add(backGroundMenu);
colorMenu.add(foreGroundMenu);
//Calling ActionListeners
// Calling ActionListner after clicking on Red button
redItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setBackground(Color.RED);
repaint();
}
});
// Calling ActionListner after clicking on Green button
greenItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setBackground(Color.GREEN);
repaint();
}
});
// Calling ActionListner after clicking on blue button
blueItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setBackground(Color.BLUE);
repaint();
}
});
// Calling ActionListner after clicking on Red button
redItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setForeground(Color.RED);
repaint();
}
});
// Calling ActionListner after clicking on Green button
greenItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setForeground(Color.GREEN);
repaint();
}
});
// Calling ActionListner after clicking on Green button
blueItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setForeground(Color.BLUE);
repaint();
}
});
}
//Paint Component Method, to create circle at the center of panel
protected void paintComponent(Graphics g){
int width = getSize().width;
int height =getSize().height;
if (width <= height){
diameter = width/2;
}
else if (height <= width){
diameter = height/2;
}
int r = diameter/2;
int x = (width/2) - r;
int y = (height/2)- r;
//Drawing Circle
g.fillOval(x, y, diameter, diameter);
}
}
}
Большое спасибо. Я добавил super.paintComponent (g); в методе paintComponent, и это сработало – Minal