我正在制作一个游戏而且我正在使用它,以便当用户在游戏中按下"我"时,游戏面板被设置为不可见,同时它将库存面板添加到JFrame.然后,当用户退出库存时,它将删除库存JPanel,然后将游戏JPanel设置为可见.
现在这听起来不错,但每当它删除Inventory JPanel并返回游戏JPanel时,KeyListener就会停止工作.我删除了Inventory JPanel后,甚至在游戏JPanel上重新设置了setFocusable(true)属性,但它仍然没有使KeyListener工作.
这是我的游戏Jpanel的代码:
package javavideogame;
public class Game extends JPanel implements ActionListener, Runnable
{
public Game(MainCharacter character)
{
TAdapter a = new TAdapter();
addKeyListener(a);
setFocusable(true);
setDoubleBuffered(true);
setFocusTraversalKeysEnabled(false);
}
public void getInventoryScreen()
{
Main.inv = new Inventory();
Main.inv.sayHello();
Main.mainGame.getContentPane().add(Main.inv);
Main.game.setVisible(false);
Main.mainGame.validate();
}
public void closeInventory()
{
Main.inv.setFocusable(false);
Main.mainGame.remove(Main.inv);
Main.game.setVisible(true);
Main.game.setFocusable(true);
}
public class TAdapter extends KeyAdapter
{
public void keyPressed(KeyEvent e)
{
character.keyPressed(e);
}
public void keyReleased(KeyEvent e)
{
character.keyReleased(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是库存代码:
package javavideogame;
public class Inventory …Run Code Online (Sandbox Code Playgroud)