我已經爲JTextArea組件創建了鍵綁定。當被調用時,它會創建一個新的自己的實例並將焦點設置給它。鍵綁定並按住鍵
如果你按住enter鍵(調用鍵綁定),我的程序將開始吐出一堆JTextArea實例。
有沒有辦法強制用戶按下Enter againg來創建一個新的實例?
我是否切換到KeyListeners或者是否有鍵綁定的方式?
我已經爲JTextArea組件創建了鍵綁定。當被調用時,它會創建一個新的自己的實例並將焦點設置給它。鍵綁定並按住鍵
如果你按住enter鍵(調用鍵綁定),我的程序將開始吐出一堆JTextArea實例。
有沒有辦法強制用戶按下Enter againg來創建一個新的實例?
我是否切換到KeyListeners或者是否有鍵綁定的方式?
與按鍵組合來做到這一點是有兩個動作:
一些代碼:
// the action to create the component
public static class CreateAction extends AbstractAction {
private Container parent;
private Action enableAction;
public CreateAction(Container parent) {
this.parent = parent;
enableAction = new EnableAction(this);
}
@Override
public void actionPerformed(ActionEvent e) {
setEnabled(false);
Component field = createTextField();
parent.add(field);
parent.revalidate();
field.requestFocus();
}
int count;
private Component createTextField() {
// just for fun counting the fields we create
JTextField field = new JTextField("field: " + count++, 20);
field.getInputMap().put(KeyStroke.getKeyStroke("ENTER"),
"createComponent");
field.getActionMap().put("createComponent", this);
field.getInputMap().put(KeyStroke.getKeyStroke("released ENTER"),
"enableCreation");
field.getActionMap().put("enableCreation", enableAction);
return field;
}
}
// the action that enables another
public static class EnableAction extends AbstractAction {
Action toEnable;
public EnableAction(Action toEnable) {
this.toEnable = toEnable;
}
@Override
public void actionPerformed(ActionEvent e) {
toEnable.setEnabled(true);
}
}
// usage
final JComponent parent = new JPanel(new MigLayout("wrap"));
// here I'm lazy and let the action create the very first component as well
add.actionPerformed(null);
add.setEnabled(true);
注意,動作相同實例被註冊到所有組件,因此它並不重要的具有焦點(並最終再次使創建)
您指定一個KeyStroke
只開火鍵釋放,當你設置的輸入地圖
見的KeyStroke getKeyStroke(int keyCode, int modifiers, boolean onKeyRelease)
+1我沒有_不知道! DYM引用測試版鏈接? – trashgod
@trashgod opps,原本是Java 7 API,將會更新,謝謝 – MadProgrammer
@trashgod ps - 我不知道它,直到我在另一篇文章中閱讀它之後;) – MadProgrammer