Java 调试非';不要被俘
由于我已经为JFrame中的每个JPanel添加了绑定,我假设在按下Java 调试非';不要被俘,java,key-bindings,Java,Key Bindings,由于我已经为JFrame中的每个JPanel添加了绑定,我假设在按下W键时至少会触发其中一个。我的击键是否不正确 SSCCE: public class TestTemp extends JFrame { public TestTemp() { setSize(1000, 800); JPanel parentPanel = new JPanel(new MigLayout("", "grow, fill", "grow
W
键时至少会触发其中一个。我的击键是否不正确
SSCCE:
public class TestTemp extends JFrame {
public TestTemp() {
setSize(1000, 800);
JPanel parentPanel = new JPanel(new MigLayout("", "grow, fill",
"grow, fill"));
parentPanel.setBackground(Color.GREEN);
setContentPane(parentPanel);
parentPanel.setSize(1000, 800);
JPanel videoPanel = new JPanel();
videoPanel.setBackground(Color.CYAN);
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new MigLayout("fillx", "[fill]", "[nogrid]"));
contentPanel.setBackground(Color.YELLOW);
parentPanel.getInputMap().put(KeyStroke.getKeyStroke("W"), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("W pressed, parent panel");
}
});
contentPanel.getInputMap().put(KeyStroke.getKeyStroke("W"), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("W pressed, content panel");
}
});
videoPanel.getInputMap().put(KeyStroke.getKeyStroke("W"), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("W pressed, video panel");
}
});
parentPanel.add(videoPanel, "wmin 200");
parentPanel.add(contentPanel);
}
public static void main(String[] args) {
JFrame frame = new TestTemp();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
编辑:
我尝试使用以下方法为父面板提供焦点:
parentPanel.setFocusable(true);
parentPanel.requestFocus();
但它似乎没有任何效果
编辑2:
为了确保不是错误的击键,我使用了文档在示例中给出的击键:
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)
但是,再次点击[code>Enter
没有效果。试试这个:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import net.miginfocom.swing.MigLayout;
public class T extends JFrame {
public T() {
setSize(1000, 800);
JPanel parentPanel = new JPanel(new MigLayout("", "grow, fill",
"grow, fill"));
parentPanel.setBackground(Color.GREEN);
getContentPane().add(parentPanel);
parentPanel.setSize(1000, 800);
JPanel videoPanel = new JPanel();
videoPanel.setBackground(Color.CYAN);
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new MigLayout("fillx", "[fill]", "[nogrid]"));
contentPanel.setBackground(Color.YELLOW);
parentPanel.getActionMap().put("enter", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Enter pressed, parent panel");
}
});
InputMap inputMap = parentPanel.getInputMap();
inputMap.put( KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "enter");
parentPanel.add(videoPanel, "wmin 200");
parentPanel.add(contentPanel);
}
public static void main(String[] args) {
JFrame frame = new T();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我不认为布局是个问题
getActionMap
而不是getInputMap
等待操作事件InputMap
以侦听击键enter
键盘事件现在写入标准输出
有关详细信息,请参见以下链接: