Search code examples
javaswinggraphicsjpanelpaintcomponent

How to make a paint class that doesn't get called twice?


I wrote a paint class, and added the jpanel to the frame, but it's getting called twice for some reason, as I put a print statement inside the graphics method, and it printed it twice. The codes below are all the codes I have in my package.

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Paint extends JPanel {

static Paint paint = new Paint();

@Override
public Dimension getPreferredSize() {
    return new Dimension(500, 500);
}

public void paintComponent(Graphics g) {

    super.paintComponent(g);

    System.out.println("Hello");

}

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.add(paint);

    frame.pack();
    frame.setLocation(300, 300);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

} 

Solution

  • I tried your code and paintComponent it's not called twice every time. I don't think you have the control on when the JFrame is calling pack() when you call setVisible. It may depends on how your OS manage the windows.