Estou tendo um problema quando removo um label onde os accelerators dos menus param de funcionar até que o menu seja clicado de novo.
Fiz essa classe como exemplo:
[code]public class Nada extends JFrame {
private static JPanel panel = new JPanel();
private static JFrame frame = new JFrame("Teste");
public static void main(String[] args) {
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Menu");
JMenuItem menuItem = new JMenuItem("Selecione");
JMenuItem removerPainel = new JMenuItem("Remove o Painel");
JTextArea textArea = new JTextArea(10, 10);
textArea.setLineWrap(true);
panel.add(textArea);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
menuItem.setAccelerator(KeyStroke.getKeyStroke("F1"));
menuBar.add(menu);
menu.add(menuItem);
menu.add(removerPainel);
frame.add(menuBar, BorderLayout.NORTH);
frame.add(panel, BorderLayout.CENTER);
frame.setVisible(true);
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Olá !");
} // actionPerformed
}); // inner class
removerPainel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.remove(panel);
panel = null;
frame.repaint();
} // actionPerformed
}); // inner class
} // main
} // class[/code]
Ela forma um menu com 2 JMenuItem, sendo que o primeiro quando acionado faz aparecer uma JOptionPanel e o segundo faz com que o label com o JTextArea seja removido.
Mas logo após remover o componente, eu não consigo acessar o menuitem de abir o JOptionPanel através do Accelerator (configurado com F1 no exemplo). Ele só volta a funcionar se eu clicar novamente no JMenuBar.
Alguém sabe me dizer o porque ? E/ou como resolver isso ?