我正在创建一个菜单,当我单击“开始”时链接到我的游戏。
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) {
}
}
如您所见,点击播放将调用此 PlayGame.PlayGame();这将起作用,但它不会刷新,因此它将保留在菜单上,直到我最小化并打开或调整面板大小以强制其刷新。 有什么想法可以让它刷新吗?或者有什么问题导致它不刷新?
下面是调用 play 游戏方法的类。
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);
}
}
一如既往地感谢您提出的任何帮助或想法, 谢谢!
最佳答案
你试过放
panel.repaint();
panel.revalidate();
在调用 PlayGame();
方法之后?
关于java - 屏幕更改后 Jpanel 不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20128839/