Como criar janela que fique acima do JFrame Principal [Resolvido]

Alguém sabe como não deixar as janelas irem para trás da janela principal da aplicação?

Por exemplo, quando eu abro a aplicação eu terei uma janela principal que conterá os botões e menus para chamar as outras janelas. Quando eu chamo uma nova janela(JFrame ou JDialog) a partir do JFrame principal se eu clicar no JFrame principal a nova janela se esconde atrás. Eu preciso que ela sempre fica acima do principal e se caso eu minimize o JFrame principal essa janela também minimize junto.

Um exemplo desse tipo de janela é a janela de propriedades do NetBeans. Quando agente clica com o botão direito do mouse em um componente e vai em propriedades, a janela que abre ela sem fica acima da janela principal do NetBeans e se agente minimizar o NetBeans ela minimiza junto.

Bem quanto a janela você pode usar o método .setAlwaysOnTop(true); no seu JFrame ou JDialog(modal=false). Quanto a minimizar você terá que adicionar um evento para capturar a ação de minimizar e então minimizar as janelas adicionais.

Ivan Alves, eu também preciso fazer a mesma coisa que o j_jose. Coloquei o método que você disse .setAlwaysOnTop(true), só que tive um problema.

Eu também criei uma JFrame principal onde chamo os outros frames, com esse método, o foco fica no frame chamado atravez do principal, só que se dentro desse frame eu precisar chamar outro frame não dá, ele fica por cima.

Será que existe outro método pra fazer isso?

[quote=ThiagoHonorato]Ivan Alves, eu também preciso fazer a mesma coisa que o j_jose. Coloquei o método que você disse .setAlwaysOnTop(true), só que tive um problema.

Eu também criei uma JFrame principal onde chamo os outros frames, com esse método, o foco fica no frame chamado atravez do principal, só que se dentro desse frame eu precisar chamar outro frame não dá, ele fica por cima.

Será que existe outro método pra fazer isso?[/quote]

ThiagoHonorato se eu entendi direito o seu caso acho que esse método já resolve isso, já que você pode inseri-lo nas outras janelas que seu frame principal chamar.
Quando você inseri essa propriedade em 2 janelas, por exemplo, ele se sobrepõe a qualquer frame que você não tenha aplicado-o porém quando existe outro frame que tenha a mesma propriedade setada um se sobrepõe ao outro, dependendo do último frame focado.

É isso mesmo Ivan Alves, você tem razão, esse método já resolve meu problema, foi falta de fazer alguns testes…

Para sobrepor um JFrame que utilize o método .setAlwaysOnTop(true) é só acrescentar o mesmo método no novo JFrame.

j_jose se isso resolveu seu problema também, coloca ae como [RESOLVIDO]

Vlw, muito obrigado !

Se eu setar .setAlwaysOnTop(true) esse JFrame vai ficar acima de todos os outros programas. Tipo se eu abrir um editor de texto por exemplo o Frame vai ficar por cima também. O que não acontece com a janela de propriedades do NetBenas como falei

Não ele só vai sobrepor as janelas do seu aplicativo, não interferindo nos demais aplicativos abertos.

Infelizmente não. Setando setAlwaysOnTop(true) a janela fica acima de todos os aplicativos abertos. Eu já havia testado

j_jose verdade, esse método sobreboe até as janelas de outros programas dependendo do sistema(no meu caso windows 7). Caso você não queira isso use um JFrame como janela principal e JDialog(modal = false) como janela segundária e não precisa usar o método setAlwaysOnTop(true) já que o padrão é false.

Ivan, o problema é que, com a janela secundária aberta, se eu clicar na janela principal a janela secundária se esconde atrás da principal

Não se você instanciar seu JDialog corretamente confira o exemplo rápido que fiz abaixo e veja os parametros que passo para abrir meu JDialog:

[code]
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;

/**
*

  • @author Ivan
    */
    public class TesteAbrirJDialog {
    JFrame frame;

    public static void main(String [] args){
    new TesteAbrirJDialog().iniciar();
    }

    private void iniciar() {
    //cria um JFrame para janela principal
    frame = new JFrame(“Janela Principal”);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     //adiciona um JButton para abrir JDialog
     JButton buttonDialog = new JButton("Abrir Dialog");
     buttonDialog.addActionListener(new ActionListener() {
    
         @Override
         public void actionPerformed(ActionEvent e) {
             abrirJDialog();
         }
     });
     frame.add(buttonDialog); //adiciona JButton
     
     frame.setSize(300, 200);
     frame.setVisible(true);
    

    }

    private void abrirJDialog(){
    /* Observação: o JFrame deve ser atribuido ao
    * seu JDialog assim como o parametro modal
    * todos esses foram passados no construtor
    * da classe JDialog
    */
    JDialog dialog = new JDialog(frame, “Dialog Teste”, false);
    dialog.setSize(250, 150);
    dialog.setVisible(true);
    }
    }[/code]

Ivan era exatamente isso que eu estava procurando.

Realmente, passando o JFrame principal no construtor do JDialog, da certo.

Obrigado!!!