В моем вопросе Как мне нарисовать JPanel из нескольких внешних классов? Frakcool дал мне совет использовать привязки клавиш, и одна вещь не сработала: когда JButton поставил другую JPanel напротиврамка, связка клавиш не отвечает.Это код:
private JFrame frame;
private JPanel[] statePanels;
private CardLayout layout;
private JPanel mainPanel;
private JButton button;
private String status;
void initAndShow()
{
//Init stuff
mainPanel = new JPanel(layout);
statePanels = new JPanel[2];
button = new JButton("Exit");
status = "Menu";
button.addActionListener(e -> {
status = status.equals("Menu") ? "World" : "Menu";
layout.show(mainPanel, status);
});
statePanels[0] = new OutWorldHandler();
statePanels[1] = new InWorldHandler();
mainPanel.add(statePanels[0], "Menu");
mainPanel.add(statePanels[1], "World");
mainPanel.getInputMap().put(KeyStroke.getKeyStroke('f'), "close");
mainPanel.getActionMap().put("close", this);
frame.add(mainPanel);
frame.add(button, BorderLayout.SOUTH);
}
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("hi");
}
Ожидаемый вывод: когда я все время нажимаю f
, консоль будет выводить «привет», но это продолжалось только до тех пор, пока я не нажал кнопку