0
내 패널을 만들고 올바르게 키 바인딩을 설정하는 데 문제가 있습니다. 내 JFrame에 JTextField를 추가하면 키 바인딩이 작동을 멈 춥니 다. 예를 들어 여기에 SSCCE이 내 문제를 보여줍니다. JTextField가 포함 된 줄을 주석으로 지정하면 p
을 원하는대로 작동합니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까? 그냥 다음 텍스트를 표시 JLabel를 사용하려는 경우JTextField를 추가하면 키 바인딩이 손상됩니다.
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
public class Example{
Example(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setResizable(false);
JPanel panel = new JPanel(true);
panel.setBackground(Color.BLACK);
panel.setLayout(new FlowLayout());
panel.setPreferredSize(new Dimension(500, 500));
panel.setBorder(BorderFactory.createEmptyBorder());
panel.setFocusable(true);
frame.add(panel, BorderLayout.SOUTH);
KeyboardInput keyboard = new KeyboardInput(panel);
// adding JTextField corrupts key bindings
JTextField textField = new JTextField();
textField.setPreferredSize(new Dimension(500, 100));
textField.setFont(textField.getFont().deriveFont(15));
textField.setText("text");
textField.setEditable(false);
textField.setFocusable(true);
textField.setBorder(BorderFactory.createEmptyBorder());
textField.setBackground(Color.BLACK);
frame.add(textField, BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
public static void main(String[] args){
new Example();
}
}
class KeyboardInput{
KeyboardInput(JPanel panel){
InputMap inMap = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
ActionMap actMap = panel.getActionMap();
inMap.put(KeyStroke.getKeyStroke("P"), "pauseGame");
actMap.put("pauseGame", new pauseAction());
}
class pauseAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("PAUSE");
}
}
}
로 변경해야합니다. – camickr