我想让我的键绑定看起来更加优雅,所以我做了一个键绑定课程,虽然它没有工作......任何人都知道为什么? 我最近做了一个从键盘绑定到键绑定的转换,只是了解它们是如何工作的,虽然也许我不理解它100% 很高兴得到一个解释为什么类不能正常工作以及inputmap和actionmap与绑定有什么关系以及它们如何组合在一起以使代码响应击键[有在线解释虽然不够透彻]的解释 谢谢!
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
public class movement {
private JComponent jt;
private InputMap ip;
private ActionMap ap;
private String comm;
private KeyStroke key;
private int movement;
public movement(JComponent jt, InputMap ip,ActionMap ap, String comm,KeyStroke key,int movement){
this.jt = jt;
this.ip = ip;
this.ap= ap;
this.comm = comm;
this.key = key;
this.movement = movement;
}
public void newAction(){
this.ip = this.jt.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
this.ip.put(key, comm);
this.ap = this.jt.getActionMap();
this.ap.put(this.comm, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
jt.setBounds(jt.getX()+movement,jt.getY() , 50, 50);
}
});
}
}
This is the main method:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.beans.PropertyChangeListener;
import java.net.MalformedURLException;
import java.net.URL;
import javax.management.openmbean.KeyAlreadyExistsException;
import javax.swing.*;
import java.util.concurrent.TimeUnit;
public class Malario {
public static void main(String[] args) {
JFrame frame = new JFrame("malario");
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(700, 700);
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.blue);
JLabel malario = new JLabel("Malario");
malario.setOpaque(true);
malario.setBackground(Color.green);
panel.add(malario);
malario.setBounds(100, 550, 50, 50);
JLabel platform = new JLabel();
platform.setOpaque(true);
platform.setBounds(0,600,700,50);
panel.add(platform);
frame.setContentPane(panel);
final int originalx = 100;
final int originaly = 550;
int currentlocx = originalx;
int currentlocy = originaly;
movement moveRight = new movement(malario, new InputMap(), new ActionMap(), "move Right",KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0) , 10);