該類用於啓動當您按空間時創建的遊戲,然後在遊戲屏幕上按空格時重新啓動空間。這是我第一次按空格鍵並按照預期啓動遊戲,但當我通過屏幕進入遊戲並按空格鍵時,什麼都不會發生。我試圖擴展JFrame而不是JApplet,然後它工作得很好。KeyBindings在JApplet中無法正常工作
這是我的代碼:
package Game;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GameTest extends JApplet{
private PAPITest papi;
private TestPane panel;
private boolean inMenu = true;
private ImageIcon ii;
private Image image;
public void init(){
setFocusable(true);
requestFocusInWindow();
requestFocus();
ii = new ImageIcon("Ball Jump.png");
image = ii.getImage();
papi = new PAPITest();
panel = new TestPane();
add(panel);
setSize(600,600);
setVisible(true);
}
public void paint(Graphics g){
if(inMenu == true){
Graphics2D g2D = (Graphics2D) g;
g2D.drawImage(image, 0, 0, this);
repaint();
}
}
public class TestPane extends JPanel {
public TestPane() {
InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, false), "pressed");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true), "released");
am.put("pressed", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if(inMenu == true){
inMenu = false;
remove(panel);
papi.setSize(600,600);
papi.setAlive(true);
add(papi);
setVisible(true);
}
if (papi.isAlive() != true){
remove(papi);
papi = new PAPITest();
papi.setSize(600,600);
add(papi);
setVisible(true);
repaint();
}
}
});
am.put("released", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if(inMenu == true){
inMenu = false;
remove(panel);
papi.setSize(600,600);
papi.setAlive(true);
add(papi);
setVisible(true);
}
if (papi.isAlive() != true){
remove(papi);
papi = new PAPITest();
papi.setSize(600,600);
add(papi);
setVisible(true);
repaint();
}
}
});
setFocusable(true);
requestFocusInWindow();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(600, 600);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
g2D.drawImage(image, 0, 0, this);
repaint();
}
}
}
我現在使用KeyBindings,但它仍然不起作用。 – programmer