Java Jframe需要先切换窗口才能使用控件

时间:2013-09-14 01:14:07

标签: java swing

很抱歉搞砸了标题'因为我真的不知道我应该使用什么标题xD无论如何这里是问题所在。所以我得到了这个简单的游戏,它以包含单个按钮的Jframe开头,如果按下该按钮,则将其内容更改为包含游戏本身的另一个类的内容。问题是控件无法立即生效。 (控制,我的意思是当你按空格时,游戏中的角色必须射击,但他不会因为这个问题)它不能正常工作我的意思是你需要切换到另一个窗口然后回到你的游戏窗口和控件将工作。 我可以对游戏做些什么,这样我就不需要切换窗口让控件工作了吗?

以下是Jframe的代码:

package rtype;

import javax.swing.JButton;
import javax.swing.JFrame;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Rtype extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
public Rtype() {
    setSize(1020, 440);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setTitle("PROJECT JAEGER");
    setResizable(false);
    JButton startButton = new JButton("START GAME");//The JButton name.
    add(startButton);//Add the button to the JFrame.
    startButton.addActionListener(this);//Reads the action.
    setVisible(true);
}

public static void main(String[] args) {
    new Rtype();
}
public void actionPerformed(ActionEvent i) {
    getContentPane().removeAll();
    add(new Board());   
    System.out.println("The Button Works!");//what the button says when clicked.
    revalidate();
    setVisible(true); 
}

}

董事会中的补充(新董事会());是游戏的一类。

1 个答案:

答案 0 :(得分:1)

由于您未提供Board课程,我会从您的说明中假设您使用的是一个或多个KeyListener

这是KeyListener的常见问题。它注册的组件不仅必须是可聚焦的,而且必须具有当前焦点。

您应该使用具有克服这些限制的机制的Key Bindings API,而不是使用KeyListener