[resolvido] JInternalFrame in jMenu

1 resposta
Pasquetto

Ola Pessoal… este é meu primeiro post. :slight_smile:

Estou com uma dificuldade. Será que alguem poderia me dar uma luz?
Tenho uma aplicação MDI com JInternalFrame, abro várias instancias como na imagem:

Eu queria fazer um menu “Janelas”, onde fica a lista de frames abertos, para que o usuário possa ir direto no menu e abrir a lista de janelas a bertas. Alguem já fez isso? Ja tentei de tudo, ArrayList, List<tipo>, Vector… não consegui atualizar minha lista no Menu.

Desde já agradeço pessoal pela atenção!

1 Resposta

Pasquetto

Pessoal.

Não deu tempo de ninguem responder.
Resolvido, vou postar para quem tiver a mesma dúvida.
[IMG]http://i64.photobucket.com/albums/h196/lucasrpasquetto/janelas_zpsd50fe3e2.jpg[/IMG]

Solução: 1) Crie um menu de forma dinâmica na sua classe:
JMenu jMenuJanelas = new JMenu("Janelas");
2) No construtor adicione o menu à barra de menus:
jMenu.add(jMenuJanelas);
3) Crie um método na classe principal responsável em abrir as janelas no seu MID onde recebe como parâmetro o JInternalFrame a ser aberto, dentro dele vc cria um JMenuItem com o nome do seu frame a ser aberto e adicione uma Action para ele jogar para frente a sua janela quando clivar no item do menu:
public void abreJanela(final JInternalFrame frame)
    {
        JMenuItem itemMenu = new JMenuItem(frame.getTitle());
        itemMenu.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                jMdi.moveToFront(frame);
                frame.requestFocus();
            }
        });
        
        try
        {
            jMdi.add(frame);
            jMenuJanelas.add(itemMenu);
        }catch(Exception e){
            
        } 
    }
4) Crie um método para remover a janela na classe principal:
public void removeJanela(JInternalFrame frame)
    {
       for(int i=0;i&lt;jMenuJanelas.getItemCount();i++)
       {
           if(jMenuJanelas.getItem(i).getText().equalsIgnoreCase(frame.getTitle())){
           jMenuJanelas.remove(i);}
       }
    }
5) Adicione um evento na sua JInternalFrame para quando fechar, remover da lista a janela:
private void formInternalFrameClosing(javax.swing.event.InternalFrameEvent evt) {                                          
        // TODO add your handling code here:
        SUACLASSEPRINCIPAL.removeJanela(this);
    }

Finishhh :)

Até mais pessoal!>>>

Criado 22 de março de 2014
Ultima resposta 22 de mar. de 2014
Respostas 1
Participantes 1