I am creating a menu that links to my game when I click play.
package GameScreen;
import java.awt.Graphics; import java.awt.Rectangle; import
java.awt.event.MouseEvent; import java.awt.event.MouseListener; import
javax.swing.ImageIcon; import javax.swing.JComponent;
public class MainMenu extends JComponent
implements MouseListener
{
private GameScreen PlayGame; private ImageIcon bg = new
ImageIcon(getClass().getResource("bg.jpg")); private ImageIcon
ButtonPlay = new ImageIcon(getClass().getResource("button.jpg"));
private ImageIcon ButtonOptions = new
ImageIcon(getClass().getResource("button2.jpg")); private ImageIcon
ButtonHS = new ImageIcon(getClass().getResource("button3.jpg"));
private ImageIcon ButtonQuit = new
ImageIcon(getClass().getResource("button4.jpg")); private Rectangle
Boundsplay = new Rectangle (340, 250, 400, 100); private Rectangle
BoundsOptions = new Rectangle (340, 350, 400, 100); private Rectangle
BoundsHS = new Rectangle (340, 450, 400, 100); private Rectangle
BoundsQuit = new Rectangle (340, 550, 400, 100);
public MainMenu(GameScreen Play)
{
PlayGame = Play;
setSize (1024,768);
}
public void paint(Graphics g)
{
g.drawImage(bg.getImage(), 0, 0, 1024, 768, null);
g.drawImage(ButtonPlay.getImage(), 340, 250, 400, 100, null);
g.drawImage(ButtonOptions.getImage(),340, 350, 400, 100, null);
g.drawImage(ButtonHS.getImage(),340, 450, 400, 100, null);
g.drawImage(ButtonQuit.getImage(),340, 550, 400, 100, null);
addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
if(Boundsplay.contains(e.getX(), e.getY())) {
PlayGame.PlayGame();
}
if(BoundsOptions.contains(e.getX(), e.getY())) {
System.out.println("hit options"); }
if(BoundsHS.contains(e.getX(), e.getY())) {
System.out.println("hit HS"); }
if(BoundsQuit.contains(e.getX(), e.getY())) {
System.out.println("hit Quit"); }
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
As you can see hitting play will call this PlayGame.PlayGame(); and this will work however it will not refresh, so it will stay on the menu until I minimize and open or resize the panel to force it to refresh. Any ideas how I can get it to refresh? Or something that is wrong and causing it not to refresh?
Below is the class in which the play game method is called from.
package GameScreen;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class GameScreen
extends JFrame
implements Runnable, KeyListener
{
private Thread animation = new Thread(this);
private AniScreen aniscreen = new AniScreen();;
private MainMenu mainmenu = new MainMenu(this);;
private HighScores highscores = new HighScores();
public GameScreen()
{
super("Zombie defense!");
setBounds(20,20,1024,768);
setContentPane (mainmenu);
//setContentPane (highscores);
animation.start();
addKeyListener(this);
setVisible (true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void PlayGame()
{
setContentPane (aniscreen);
}
public static void main(String[] args)
{
GameScreen gs = new GameScreen();
}
@Override
public void run()
{
while (true)
{
aniscreen.repaint();
mainmenu.repaint();
highscores.repaint();
try
{
Thread.sleep(30);
}
catch(InterruptedException ex)
{
}
}
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode()==KeyEvent.VK_DOWN)
{
aniscreen.moveplayer(0,20);
}
if (e.getKeyCode()==KeyEvent.VK_UP)
{
aniscreen.moveplayer(0,-20);
}
}
@Override
public void keyReleased(KeyEvent e)
{
aniscreen.moveplayer(0,0);
}
}
As always thanks for any help or ideas put forward, Thanks!
Have you tried putting
panel.repaint();
panel.revalidate();
after you've invoked the PlayGame();
method?