JOptionPane.showoptionpane setposition()

7 respostas
F

Olá!

Gostaria de saber se vocês conhecem alguma forma do JOptionPane que estou usando apareça aonde eu clicar.
Por exemplo, se eu clicar no canto inferior da tela, quero que o JOptionPane apareça embaixo da seta do mouse (como acontece no Windows quando se clica no desktop com o botão direito).

É possível? Há algum tipo de setPosition()? :?:

Desde já, agradeço a atenção. :wink:

7 Respostas

ViniGodoy

Você pode tentar criar o JOptionPane pelo construtor. Então, use o método createDialog e em seguida o setLocation.

JOptionPane pane = new JOptionPane("Olá enfermeira!", JOptionPane.EXCLAMATION_TYPE); JDialog paneDialog = pane.createDialog(this, "Tela de olá"); paneDialog.setLocation(200,200); paneDialog.setVisible(true);

O valor clicado no JOptionPane é retornado através do método getValue() do objeto do JOptionPane.

Object valor = pane.getValue();

Não testei aqui. Se isso não funcionar, então você terá que criar manualmente seu próprio JDialog modal (isso não é tão difícil quanto parece).

F

oh!
Obrigada!
Vou testar agora!

F

Sem querer ser chata, mas ja sendo…
Vc teria algum manual/passo a passo de como fazer um JDialog modal ?

Obrigada

ViniGodoy

Na verdade, você faz igualzinho como se faz uma janela qualquer. A única diferença é que você define:

this.setModal(true);

É importante que seja um JDialog, pois o JFrame não tem essa propriedade.

Para comunicar dados entre uma janela comum e um JDialog modal, veja o seguinte link:
http://www.guj.com.br/posts/list/55710.java#292687

F

Olá novamente!

Fiz um teste assim:

-Eu clicaria neste jpanel, em qualquer ponto.
-Este ponto seria obtido no "getMousePosition()"
-O JOptionPane ficaria visivel.

private void jPanel1MouseClicked(java.awt.event.MouseEvent evt) {

             JOptionPane pane = new JOptionPane("Testes", 1);
             JDialog paneDialog = pane.createDialog(this, "Testes_t");

             pane.setLocation(this.getMousePosition());
             pane.setVisible(true);
             
    }

Não sei se isso está certo...o fato é que o pane não está sendo mostrado...
Esqueci alguma coisa? :roll:

ViniGodoy

Você deveria dar o setVisible e o setLocation na paneDialog, não no pane.

Eu me enganei quando escrevi o código lá em cima. Já consertei.

F

Ahhhhhh siiimmmm… :slight_smile:

Funcionando perfeitamente!!! :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:

Muitíssimo obrigada!!

Criado 10 de dezembro de 2010
Ultima resposta 11 de dez. de 2010
Respostas 7
Participantes 2