Search code examples
javaswingpaintcomponent

Add drawing in layered plane java


i am new to swing in java. i am trying to add the drawing made by the paintComponent() method in my a frame through layeredPane but it is not showing in the JFrame

However if i place the code frame.getContentPane().add(drawing) and comment the Layered part the code works..

what i am doing wrong?

here is the code: frame class

public class FrameTest extends JFrame  {

    static JFrame frame= new JFrame("Frame");


    public static void main(String[] args) {
        FrameTest test= new FrameTest ();   
    }

    public FrameTest (){
        this.openfrane();
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
    }

    public void openframe(){
        //window properties
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setSize(1000,600);
        frame.setResizable(false);

        //changing icon of window
        ImageIcon image = new ImageIcon("assets/icon.png");
        card.setIconImage(image.getImage());

        //label picture background
        JLabel background = new JLabel();
        ImageIcon back = new ImageIcon("assets/background.jpg");
        background.setIcon(back);
        background.setLocation(0,-125);
        background.setSize(1000,700);

        //label for first 
        JLabel first = new JLabel("Sample text");
        first.setForeground(Color.RED);
        first.setSize(500,200);
        first.setLocation(31, 150);

        Draw drawing = new Draw();

        JLayeredPane layers = new JLayeredPane();
        layers.add(drawing, new Integer(3));
        layers.add(first, new Integer(2));
        layers.add(background,new Integer(1));
        frame.setLayeredPane(layers);

    }
}

draw class:

public class Draw extends JPanel {

    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

        int startX = 00;
        int startY = 00;

        // First circle
        Ellipse2D circle1 = new Ellipse2D.Double(startX, startY, 30, 30);
        g2.setColor(Color.Black);
        g2.draw(circle1);
        g2.fill(circle1);

        // Second circle
        Ellipse2D circle2 = new Ellipse2D.Double(startX+20, startY, 30, 30);
        g2.setColor(Color.Black);
        g2.draw(circle2);
        g2.fill(circle2);
     }
}

Solution

  • i am trying to add the drawing made by the paintComponent() method in my a frame through layeredPane but it is not showing in the JFrame

    Your DrawPanel does not have a size, so the size is (0, 0) and there is nothing to paint.

    However if i place the code frame.getContentPane().add(drawing) and comment the Layered part the code works..

    When you add the DrawPanel directly to the content pane then the panel is added to the "CENTER" and the panel size is automatically set to the space available in the frame by the layout manager.