Swing + Foco

2 respostas
C

Olá,

Tenho duas perguntas sobre Swing e foco:

1 - Como faço para jogar o foco para minha aplicação Swing? Tenho uma aplicação Swing que fica rodando e, de vez em quando, precisa abrir uma janela para o usuário. O usuário pode estar trabalhando em outra aplicação, e eu preciso que essa janela apareça por cima de todas as outras de todos os programas abertos, só que não pode ser modal.

2 - É possível trocar o foco entre aplicações (swing ou nativas) a partir da minha aplicação Swing? Preciso, a partir de minha aplicação, jogar o foco para uma determinada aplicação que está aberta (tipo ALT+TAB). É possível?

obs: não sei se faz diferença, mas só preciso que isso funcione no Windows.

Alguém tem idéia?

Obrigado!

2 Respostas

C

Pois é, com exceção do alwaysOnTop, todos esses métodos funcionam para alternar entre as janelas da mesma JVM. Mas o que eu preciso é alternar entre as janelas do SO.

O melhor que eu consegui até agora foi:

frame.setAlwaysOnTop(true);

frame.setVisible(true);

frame.setVisible(false);

frame.setAlwaysOnTop(false);

frame.setVisible(true);

Isto faz a minha janela saltar sobre todas as outras do SO, sem ser modal e sem impedir que o usuário alterne para outra janela depois que ela aparecer. Mas ainda não tenho resposta para a pergunta 2 :frowning:

Luiz_Rocha

Saudações. :slight_smile:

Eu conheço uma maneira de deixar uma janela “sempre no topo”, dessas que aparece dizendo “cheguei!”.

Use o método setAlwaysOnTop(boolean ) , original da classe Window.

Existe, sim, uma maneira de permutar entre as janelas: acabei de ver que a classe Window também possui dois métodos chamados toFront() e toBack() , que, respectivamente, jogam a sua janela para a frente e para trás de todas as outras (o nome do método já diz tudo). Usá-los com sabedoria pode garantir o resultado que você deseja.

Consulte a API Java e procure esses métodos.

[[ obs: não encare isso como uma ofensa; mas, caso não saiba, a classe Window é superclasse de JFrame. Logo, esses métodos também funcionam num JFrame. ]]

Boa sorte.

Criado 28 de fevereiro de 2007
Ultima resposta 1 de mar. de 2007
Respostas 2
Participantes 2