Мне нужно переключиться двумя способами с помощью клавишных привязок. Вот мой код, он работает в одну сторону. Может ли кто-нибудь помочь мне заставить его работать в обоих направлениях?Переключение между двумя формами с привязкой клавиш
public class MyFrame extends JFrame {
private FirstForm firstForm = new FirstForm();
private SecondForm secondForm = new SecondForm();
public MyFrame(){
setContentPane(firstForm);
setSize(800,600);
firstForm.addActionListenerForSomeAction(switcher(secondForm));
secondForm.addActionListenerForSomeAction(switcher(firstForm));
keyboardSwitcher(firstForm);
keyboardSwitcher(secondForm);
}
public void keyboardSwitcher(JPanel panel){
InputMap imap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
imap.put(KeyStroke.getKeyStroke("ctrl ENTER"),"switchAction");
ActionMap amap = getRootPane().getActionMap();
amap.put("switchAction",switcher(panel));
}
public Action switcher(JPanel panel){
Action action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
setContentPane(panel);
getContentPane().revalidate();
getContentPane().repaint();
}
};
return action;
}
}
FirstForm
и SecondForm
мои собственные классы, расширяющие JPanel
.
1) Используйте ['CardLayout'] (http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html), как показано в [этом ответе] (http://stackoverflow.com/a/5786005/418556). 2) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –
Спасибо. Это мой первый пост, я буду использовать ваши рекомендации в будущем – Arseniy
* «Я буду использовать ваше руководство в будущем» * Прохладный. В этом случае я мог бы добавить больше в ваши вопросы .. в будущем. Конечно, вы можете [изменить] вопрос * сейчас. * –