KeyListener仅适用于调试器,但不适用于运行

时间:2016-06-19 22:26:07

标签: java swing keylistener

我有一个奇怪的问题,我的应用程序不能在'run'上运行,但只能在调试时运行。

我试图按下按钮开始游戏,但随后keyListener剂量工作(它在调试时工作正常)。我有3个面板,第一个用于登录,点击按钮后它应该开始游戏并删除当前面板。第二和第三是用于得分区域和游戏区域。当我在没有LoginPanel的情况下打开游戏时它确实可以正常工作你有什么想法可能有什么不对吗?

public LoginPanel(MainFrame mainFrame)
{
    this.mainFrame = mainFrame;
    makeGIU();

}
public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // draw the image
}

private void makeGIU()
{
    this.img = new ImageIcon(SOURCE).getImage();
    setDimension();
    button = new JButton("OK");
    nickLabel = new JLabel("<html>SOKOBANA<br>TOMASZ JANIEC<br>KACPER KUSTRA</html>", JLabel.CENTER);
    nickLabel.setFont(new Font("Gloria Hallelujah",Font.PLAIN,20));
    nickLabel.setSize(100,50);
    this.setLayout(new FlowLayout());
    button.addActionListener(evt -> {
        mainFrame.remove(this);
        mainFrame.newGameStart();
        mainFrame.revalidate();
    });
    this.setPreferredSize(Size);
    this.add(button);
    this.add(nickLabel);
    this.add(nickText);
    mainFrame.getContentPane().add(this,BorderLayout.CENTER);
}
public MainFrame() {
    setTitle(TITLE);
    setVisible(true);
    setBounds(new Rectangle(DEFAULT_WIDTH, DEFAULT_HIGHT));
    makeMenu();
    this.setResizable(true);
    //newGameStart(); // this does work
    this.add(new LoginPanel(this)); // this dosent
    revalidate();
}


public void newGameStart() {
        Thread t = new Thread(new MyRunnable(this, DEFAULT_WIDTH, DEFAULT_HIGHT, mapNames) {
        });
        t.start();

}

1 个答案:

答案 0 :(得分:0)

在JPanel上添加一个键侦听器,而不是if语句,您可以设置要控制的键