Janela na frente sem foco [Resolvido]

E ae pessoal, tudo blz?
Entao, eu tava querendo fazer uma aplicação q abre uma janela, dakelas tipo popup sem barra, q abrisse na tela na frente das outras aplicações q estejam rodando, mas q o foco nao ficasse na minha aplicação e sim continuasse nas aplicações q ja estão abertas!

Exemplo,
estou digitando algum texto no word e quando alguem fica online no msn abre akele popup no canto inferior direito sem q tire o foco do word! Eh isso q eu to querendo!

Vlw! T+!

Aquela janela vc faz com JWindow, e o foco é o método setModal, se não me engano.

Mas esse JWindows permite-me fazer oq eu quero? pq o importante eh q ela apareça na frente da janela de alguma outra aplicação q estava rodando antes, sem q essa aplicação, mesmo estando atras, perca o foco!

Me mostra o código de como fazer isso pq nao consegui!
Vlw! T+!

Eu poderia escrever um exemplo de codigo completo (q me tomaria um tempinho precioso e te deixaria mal acostumado), mas não é necessário, os exemplos já estão escritos:

http://www.j2ee.me/docs/books/tutorial/uiswing/misc/focus.html

O que eles descrevem como “o problema de não ter foco”, é a solução que voce procura. :wink:

uhahauuhah… :lol:

mas acho q esse texto q vc me passou na resolve o meu problema! ele fala de tratar o focus system entre os componentes dentro de um JWindow e nao entre as janelas abertas na tela! mas lendo o texto acho q consigo descrever o problema com maior clareza!
Eu quero q quando minha aplicação for iniciada a sua janela fique prominente mas q o programa q estava rodando antes continue com o keyboard focus! ae se o kra ta com o word aberto e digitando o texto e minha aplicação inicia, abrirá uma tela prominente mas se o kra continuar digitando o texto ainda continuara sendo digitado no word mesmo estando atras!

espero q alguem tenha alguma solução pra isso! t+ pessoal!

Se você quer só mostrar um popup no canto inferior direito, tente um balão, como o que o mostrado por setTooltip da classe TrayIcon:

setTooltip

[quote=thingol]Se você quer só mostrar um popup no canto inferior direito, tente um balão, como o que o mostrado por setTooltip da classe TrayIcon:

setTooltip[/quote]
Eu não quero soh mostrar um popup no canto inferior direito! =S
Eu quero mostrar uma janela mesmo do tamanho da tela, mas q ela se comporte como o popup do msn! sem interferir nos programas rodando atras! entende?

Se alguem puder me ajudar!

Vamos lá… você nem tentou com a JWindow…
Quer de bandeja mesmo? Tá aí então, mas não se acostume…


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JWindow;

public class WindowSemFoco extends javax.swing.JWindow {
    
    /** Creates new form NewJPanel */
    public WindowSemFoco() {        
        setSize(400, 300);
        setAlwaysOnTop(true);
        add(new JLabel("Este JWindow não rouba o foco!! :)"));
        
        JButton btn = new JButton("Fechar");
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.exit(0);
            }});
        btn.setSize(20, 10);
        add(btn);
    }
    
    public static void main(String... kbum) {
        JWindow window = new WindowSemFoco();
        window.setVisible(true);
    }

}

[quote=wellington7]Vamos lá… você nem tentou com a JWindow…
Quer de bandeja mesmo? Tá aí então, mas não se acostume…[/quote]
huauau… :lol:
mas eu ja tinha implementado assim e nao tinha dado certo! agora tentei implementar denovo desse jeito q vc fez e continua dando errado! funciona mas não como eu to querendo, continua roubando o foco da janela q ja estava aberta! :frowning:
Se tiverem alguma idéia do q possa estar acontecendo aki, me avisem!
T+ pessoal!

Alguém poderia dar uma terceira opinião?
Aqui o código roda sem roubar o foco.
Estou rodando em Windows XP, com Java 6.

Q estranho! :?
Mas de acordo com a documentação, a JWindow não deveria roubar o foco mesmo! :?
Vou desinstalar tudo e instalar denovo atualizado pra ver se funciona! T+!

[quote=wellington7]Alguém poderia dar uma terceira opinião?
Aqui o código roda sem roubar o foco.
Estou rodando em Windows XP, com Java 6.

[/quote]

Aqui o código roda sem roubar o foco. [2]
Windows XP, Java 1.6.0_10.

Também não sabia que o JWindow servia pra isso, mas agora essa informação vai ser útil :stuck_out_tongue: Valeu pelo código wellington.

Valeu pelo código Wellington7…
aqui funcionou sem foco mesmo
do jeito que o henriqueers queria

linux debian4.0 etch / java 1.6.0_10.

[quote=henriqueers][quote=wellington7]Vamos lá… você nem tentou com a JWindow…
Quer de bandeja mesmo? Tá aí então, mas não se acostume…[/quote]
huauau… :lol:
mas eu ja tinha implementado assim e nao tinha dado certo! agora tentei implementar denovo desse jeito q vc fez e continua dando errado! funciona mas não como eu to querendo, continua roubando o foco da janela q ja estava aberta! :frowning:
Se tiverem alguma idéia do q possa estar acontecendo aki, me avisem!
T+ pessoal![/quote]
Kra, desinstalei tudo e instalei denovo! Agora sim funcionou! :lol:
Da primeira vez q vc me falou pra usar JWindow eu ja tinha feito uma implementação semelhante a essa sua, mas nao tinha rodado, ae pensei q tinha implementado errado! :-o

Vlw wellington7! T+!

Uma coisa relativamente simples… o problema é saber o caminho das pedras…

Entao vamos la, para outros que como eu bateram um pouco de cabeça…

Para um JFrame abrir sem receber o foco, antes do setVisible, invoque o metodo setFocusableWindowState(false);
Este método faz com que a JFrame nao receba o foco
Invoque o metodo setVisible(true);
Novamente, invoque o metodo setFocusableWindowState(true), caso como eu, voce precise interagir com a janela, como mover ou clicar em botoes;

Use o JWindow, caso a mensagem seja estatica, e a janela oculte automaticamente depois de um tempo…
Use o JFrame, para mover ou interagir com a janela

entao fica ai a dica:

        JFrame frm = new JFrame();
        frm.setPreferredSize(new Dimension(200, 100));
        frm.setFocusableWindowState(false);
        frm.setVisible(true);
        frm.setFocusableWindowState(true); // Caso o Frame necessite receber o foco com um clique do mouse, por exemplo...