Java 游戏主菜单
我是一个尝试创建游戏的初学者。游戏是空的,我没有开始写 我的问题是:当我点击“开始”按钮时,我想在同一帧中开始游戏,但当我点击“开始”时,程序会用菜单打开另一帧,并在原始帧中删除面板 我怎么做这个简单的菜单Java 游戏主菜单,java,swing,Java,Swing,我是一个尝试创建游戏的初学者。游戏是空的,我没有开始写 我的问题是:当我点击“开始”按钮时,我想在同一帧中开始游戏,但当我点击“开始”时,程序会用菜单打开另一帧,并在原始帧中删除面板 我怎么做这个简单的菜单 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.File; import panelimage.Image; public class Project0 extends JFr
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import panelimage.Image;
public class Project0 extends JFrame{
private static final long serialVersionUID = 1L;
private Game JPanelGame;
private Image MainMenu = new Image(new File("src/img/menu_background.jpg"));
JButton start = new JButton("START GAME"), exit = new JButton ("LEAVE GAME");
public Project0() {
super();
initFrame();
initMenu();
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
JPanelGame.keyPressed(evt);
}
public void keyReleased(KeyEvent evt) {
JPanelGame.keyReleased(evt);
}
});
}
private void initFrame() {
setResizable(false);
setBounds(new Rectangle(400, 400, 600, 400));
MainMenu.setLayout(new BorderLayout());
}
private void initMenu() {
initButtons();
MainMenu.setLayout(null);
MainMenu.add(start);
MainMenu.add(exit);
add(MainMenu);
setContentPane(MainMenu);
setTitle("Project0");
}
private void initButtons() {
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
JPanelGame = new Game();
remove(MainMenu);
add(JPanelGame, BorderLayout.CENTER);
setContentPane(JPanelGame);
invalidate(); validate();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Project0 Game = new Project0();
Game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Game.setVisible(true);
}
});
}
});
start.setLocation(225,100);
start.setSize(150,50);
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
exit.setLocation(225,200);
exit.setSize(150,50);
}
public static void main(String[] args) {
Project0 Game = new Project0();
Game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Game.setVisible(true);
}
}
这个框架将启动
import java.awt.*;
import java.awt.event.KeyEvent;
import javax.swing.*;
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import highscores.*;
public class Game extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
Thread game;
BufferedImage background;
HighscoreManager scores = new HighscoreManager();
public Game(){
super(true);
try{
background = ImageIO.read(new File(""));
}catch(Exception e) {}
game=new Thread(this);
game.start();
}
public void paintComponent(Graphics graphic2d){
setOpaque(false);
super.paintComponent(graphic2d);
graphic2d.drawImage(background, 0, 0, null);
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
}
if (key == KeyEvent.VK_RIGHT) {
}
if (key == KeyEvent.VK_UP) {
}
if (key == KeyEvent.VK_DOWN) {
}
if (key == KeyEvent.VK_A) {
}
if (key == KeyEvent.VK_D) {
}
if (key == KeyEvent.VK_W) {
}
if (key == KeyEvent.VK_S) {
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
}
if (key == KeyEvent.VK_RIGHT) {
}
if (key == KeyEvent.VK_UP) {
}
if (key == KeyEvent.VK_DOWN) {
}
if (key == KeyEvent.VK_A) {
}
if (key == KeyEvent.VK_D) {
}
if (key == KeyEvent.VK_W) {
}
if (key == KeyEvent.VK_S) {
}
}
public void run(){
try {Thread.sleep(50);}catch(InterruptedException ex){}
}
}当您在按钮的动作侦听器中调用
SwingUtilities.invokeLater()
时,您正在创建第二个Project0
对象。无论何时创建一个项目0
,都会在屏幕上绘制一个JFrame,其中包含一个主菜单。删除对SwingUtilities.invokeLater()
的调用,您应该只剩下一个框架。我看到两个选项,具体取决于您的需要。要么从框架中删除所有组件,然后添加新内容。但这样做,你就失去了“菜单框”。另一种选择(我认为这两种选择中最好的一种)是选择卡片布局
,其中一张是你的菜单,另一张是你的游戏。然后,“开始”按钮将简单地从“菜单卡”切换到“游戏卡”(如果需要,启动游戏)。在你的游戏中,你可以有一个按钮/键/。。。哪一个相反(从游戏卡切换到菜单卡)
我正在检查您的代码,但我放弃了(当然是因为@orzechowskid已经指出了您需要调整的内容)。如果您打算在此网站上发布更多代码,请提供一些提示:
panelimage.Image
类,它与java.awt.Image
类无关LayoutManager
s并摆脱null
布局。这可能是一个很好的起点线程。睡眠
使用,并结合Swing UI运行多个线程
s。确保您知道