問題
我一直在擺弄,以使鍵綁定在我編寫的應用程序中正常工作。Java:JPanel不拿起鍵盤綁定
此前,我一直在使用以下的變體; panel.registerKeyboardAction(this, "createNewFood", KeyStroke.getKeyStroke(KeyEvent.VK_I, KeyEvent.CTRL_DOWN_MASK), JComponent.WHEN_IN_FOCUSED_WINDOW);
但是由於我在文檔中看到registerKeyboardAction被標記爲廢棄,我嘗試切換到首選方法,這種方式就像這樣; panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("control I"), new NewFoodAction());
不幸的是,這似乎並沒有工作。
我已經試過
我在網上搜索,我已經嘗試了一堆失敗不同的方法;
- 不是將鍵綁定到面板上,而是嘗試將它附加到
getRootPane()
的結果中。沒有工作。 - 我試過所有不同的「條件」;
WHEN_IN_FOCUSED_WINDOW
,WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
,WHEN_FOCUSED
,沒有工作。 - 我試過設置
panel.setFocusable(true)
;沒有工作。 - 我嘗試使用
panel.requestFocusInWindow()
只是爲了看看它是否可以有條件工作;沒有工作。
如果我將鍵綁定連接到另一個組件,例如JTextField,那麼它就像它應該的那樣工作。
可能與相關的一些其他信息(但我並不真正認爲它是這樣)。
- 我正在使用MigLayout作爲面板。不要以爲這會影響任何東西,但誰知道。
- 我現在其他的按鍵組合(也就是被綁定到其他組件其他按鍵)
下面是一些示例代碼:
public FoodFrame() {
super("MealTrack");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(1400, 600));
setLocation(300, 100);
setVisible(true);
panel = new JPanel(new MigLayout("fill", "[grow][]", "[][][][grow][][]"));
add(panel);
panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("control I"), new NewFoodAction());
pack();
filter.requestFocusInWindow();
}
private class NewFoodAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("called");
}
}
}
有誰知道這個問題似乎什麼是?
*「我使用MigLayout的面板不認爲這會影響什麼,但誰知道」 *如果你換出來爲你將'FlowLayout'和問題仍然存在。爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –