Java中的游戏不会响应按键

时间:2013-12-31 13:25:52

标签: java swing jar

我刚刚向Runnable JAR导出了一个Java游戏。

游戏有一个开放屏幕(一个名为OpeningScreen的类,扩展了JPanel)。当你按 ENTER 时,它应该从开始屏幕进入游戏本身(创建一个新的Board实例并将其添加到JPanel。) 它在Eclipse中运行良好。

OpeningScreen的一个实例是在main()的类中创建的,名为Starter

导出时,我将Starter类设置为“Launch configuration”,并将“Library handling”设置为“将所需的库提取到生成的JAR中”。

导出后,我得到一个窗口,说它导出了编译错误,但没有告诉我哪些错误。

当从生成的JAR启动程序时,打开的屏幕会显示,但是按下ENTER将不会启动游戏,尽管它在Eclipse中可以正常工作。

以下是OpeningScreen的代码:

import javax.swing.*;

import java.awt.event.*;
import java.awt.*;

public class OpeningScreen extends JPanel implements KeyListener{

    private static final long serialVersionUID = 1L;
    public OpeningScreen(){
        setFocusable(true);
        setVisible(true);
        addKeyListener(this);
    }

    public void paint(Graphics g){

        super.paint(g);
        setBackground(Color.BLACK);

        Graphics2D g2d = (Graphics2D) g;

        // A lot of drawing Strings.

    }


    public void startGame(){

        JFrame frame = new JFrame("Pong Battle");
        frame.setSize(500,500);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Board board = new Board();
        frame.add(board);

        frame.setVisible(true);
    }

    @Override
    public void keyPressed(KeyEvent e) {

        int key = e.getKeyCode();
        if(key==KeyEvent.VK_ENTER)startGame();

    }

    public void keyReleased(KeyEvent arg0) {
    }
    public void keyTyped(KeyEvent arg0) {
    }

}

编辑:Starter课程:

import javax.swing.*;
import java.awt.*;

public class Starter extends JFrame {

    public Starter(){

        setSize(500,500);
        setResizable(false);
        setTitle("Pong Battle");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        OpeningScreen openingS = new OpeningScreen();
        add(openingS);

        setVisible(true);

    }

    public static void main(String[]args){
        Starter starter = new Starter();
    }

}

可能是什么问题?感谢

2 个答案:

答案 0 :(得分:0)

您的打开屏幕需要添加到另一个容器内,然后是另一个Jframe

  1. 创建另一个JFrame。
  2. 让它没有装饰。 f.setUndecorated(true)
  3. 将打开屏幕面板设为内容面板f.setContentPane(new OpeningPanel())
  4. 显示此框架。
  5. Enter 键后取下打开的屏幕框。 f.dispose()
  6. 然后调用startGame()

答案 1 :(得分:0)

不要使用KeyListener。你应该使用Key Bindings。

请参阅Motion Using the Keyboard了解原因和工作示例。