Override
paintComponent
instead ofpaint
and callsuper.paintComponent(g)
@Override protected void paintComponent(Graphics g) { super.paintComponent(g); ... }
Override
getPreferredSize()
for yourJPanel
@Override public Dimension getPreferredSize() { return new Dimension(800, 600); }
Don't create your image inside the
paintComponent
method. Do it in the constructor.public class GameBoard extends JPanel { ImageIcon img; public GameBoard() { img = new ImageIcon(...); }
pack()
your frame, don'tsetSize()
, and the preferred size of theJPanel
will be respected (by your overridegetPreferredSize()
).You can just use
getWidth()
andgetHeight()
after overridegetPreferredSize()
drawImage(bg.getImage(), 0, 0, getWidth(), getHeight(), this);
Work on all these things, if it doesn't help, post a runnable example we can test out.