JMenu 当被点击时创建一个新游戏
JMenu when is clicked create a new Game
我有一个主要 class 负责框架和 JMenu,另一个 class 用于从 JPanel 扩展的游戏。当单击 jMenu 中的一个选项时如何创建一个新游戏?
目前,我有这个
class Application {
private static Game game;
private static TheFrame frame;
private static JMenuBar menu;
public Application(){
frame = new TheFrame();
menu = new JMenuBar();
JMenu file = new JMenu("File");
menu.add(file);
frame.setJMenuBar(menu);
JMenuItem newGame = new JMenuItem("New Game");
newGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
newGame();
}
});
file.add(newGame);
JMenuItem scores = new JMenuItem("Show Scores");
scores.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Score();
}
});
file.add(scores);
JMenuItem exit = new JMenuItem("Exit!");
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
file.add(exit);
}
private void newGame(){
// frame.getContentPane().removeAll();
frame.getContentPane().setBackground(Color.pink);
game = new Game();
frame.addGameToCanvas(game);
game.runMenu();
}
/**
* Main method
* @param args
*/
public static void main(String args[]) {
Application app = new Application();
}
}
但是当我点击新游戏时,框架变黑并且不显示任何内容。我之前在命令行上使用过,并且一切正常,但是当我尝试使用菜单执行此操作时,它不起作用。有什么建议吗?
编辑
frame.addGametoCanva() 的代码。它的作用是将游戏对象添加到 canvas。
public void addGameToCanvas(游戏 g){
canvas = g;
添加(canvas,BorderLayout.CENTER);
无效();
证实();
重绘();
}
是的,游戏对象有一个有限循环,用于用户输入(来自控制台)
the game object, have a finite loop, for the user inputs (from console)
Event-Dispatch 线程 (EDT) 是单线程的 - 它负责绘制、事件处理等...如果试图在此线程上执行较长的 运行 任务,例如等待来自不同来源(如控制台)的用户输入,EDT 可能会锁定(换句话说,无响应 UI)。
任何长 运行 任务都应该放在它自己的 Thread or ran via a SwingWorker. Further, most calls on a non-EDT thread should be dispatched to the EDT using SwingUtilities.invokeLater
或 SwingUtilities.invokeAndWait
中(这包括 UI 的构造 - 注意main 方法在非 EDT 线程上运行)。
不过,我不完全确定为什么混合使用 UI(例如 Console 和 Swing)- 您可以考虑只选择一个 UI.
我有一个主要 class 负责框架和 JMenu,另一个 class 用于从 JPanel 扩展的游戏。当单击 jMenu 中的一个选项时如何创建一个新游戏?
目前,我有这个
class Application {
private static Game game;
private static TheFrame frame;
private static JMenuBar menu;
public Application(){
frame = new TheFrame();
menu = new JMenuBar();
JMenu file = new JMenu("File");
menu.add(file);
frame.setJMenuBar(menu);
JMenuItem newGame = new JMenuItem("New Game");
newGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
newGame();
}
});
file.add(newGame);
JMenuItem scores = new JMenuItem("Show Scores");
scores.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Score();
}
});
file.add(scores);
JMenuItem exit = new JMenuItem("Exit!");
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
file.add(exit);
}
private void newGame(){
// frame.getContentPane().removeAll();
frame.getContentPane().setBackground(Color.pink);
game = new Game();
frame.addGameToCanvas(game);
game.runMenu();
}
/**
* Main method
* @param args
*/
public static void main(String args[]) {
Application app = new Application();
}
}
但是当我点击新游戏时,框架变黑并且不显示任何内容。我之前在命令行上使用过,并且一切正常,但是当我尝试使用菜单执行此操作时,它不起作用。有什么建议吗?
编辑
frame.addGametoCanva() 的代码。它的作用是将游戏对象添加到 canvas。 public void addGameToCanvas(游戏 g){ canvas = g; 添加(canvas,BorderLayout.CENTER); 无效(); 证实(); 重绘(); }
是的,游戏对象有一个有限循环,用于用户输入(来自控制台)
the game object, have a finite loop, for the user inputs (from console)
Event-Dispatch 线程 (EDT) 是单线程的 - 它负责绘制、事件处理等...如果试图在此线程上执行较长的 运行 任务,例如等待来自不同来源(如控制台)的用户输入,EDT 可能会锁定(换句话说,无响应 UI)。
任何长 运行 任务都应该放在它自己的 Thread or ran via a SwingWorker. Further, most calls on a non-EDT thread should be dispatched to the EDT using SwingUtilities.invokeLater
或 SwingUtilities.invokeAndWait
中(这包括 UI 的构造 - 注意main 方法在非 EDT 线程上运行)。
不过,我不完全确定为什么混合使用 UI(例如 Console 和 Swing)- 您可以考虑只选择一个 UI.