Set background color in Java on a JPanel doesn't work

后端 未结 3 696
我在风中等你
我在风中等你 2020-12-21 02:42

I am working on a \"paint-like\" application (a little drawing software) to familiarize with Java 2D components. Here is my problem: I have a JFrame whose ContentPane is an

3条回答
  •  独厮守ぢ
    2020-12-21 03:04

    I also had that problem, and only that worked out is exactly what OP suggested.

    // Only this works for me
    this.setBackground(Color.blue);
    

    Whole code of example class is here (just for purpose to show where I tried to put/set setBackground();

    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.geom.Ellipse2D;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class CircleDraw extends JFrame {
        Float diameter = 150f;
    
        public CircleDraw() {
            super("Circle Draw");
            this.setSize(300, 300);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.add(new CirclePanel(diameter));
            this.setVisible(true);
    
            // Only this works for me
            this.setBackground(Color.blue);
        }
    
        public static void main(String[] args) {
            new CircleDraw();
        }
    }
    
    class CirclePanel extends JPanel {
    
        Float diameter;
    
        public CirclePanel(Float diameter) {
            super();
            // this.setOpaque(true);
            // this.setBackground(Color.WHITE);
            this.diameter = diameter;
        }
    
        @Override
        public void paintComponent(Graphics g) {
    
            int panelWidth = this.getSize().width;
            int panelHeight = this.getSize().height;
    
            setPreferredSize(new Dimension(300, 300));
            Graphics2D comp2D = (Graphics2D) g;
            comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
            comp2D.setStroke(new BasicStroke(1f));
            // comp2D.setBackground(Color.white);
            comp2D.setPaint(Color.white);
    
            Ellipse2D.Float e1 = new Ellipse2D.Float((panelWidth / 2) - (diameter / 2), (panelHeight / 2) - (diameter / 2), diameter, diameter);
            comp2D.draw(e1);
        }
    }
    

提交回复
热议问题