[PARCIALMENTE RESPONDIDO]Problema com JOptionPane

7 respostas
daniel.lopes

Galera, tenho esse JOptionPane que aparece em eventos de botão da aplicação. Porém, se eu clicar 100 vezes no votão da aplicação, abre 100 novos JOptionPane… Como faço para que esse JOptionPane receba o foco e só libere a aplicação para uso quando for clicado em seu botão ou quando for fechado? Segue o código…

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class WarningMessage01 extends JPanel implements ActionListener{
    
    JPanel painel;
    JButton ok, cancel;
    
    public void inicializa(){

	painel = new JPanel();
	
	ok = new JButton("OK");
	ok.addActionListener(this);
	cancel = new JButton("CANCEL");
	cancel.addActionListener(this);
	
	painel.add(ok);
	painel.add(cancel);
	add(painel);
    }
    
    public static void main(String[] args){
	
	JFrame frame = new JFrame("Testando o foco no warning message");
	WarningMessage01 master = new WarningMessage01();
	master.inicializa();
	frame.setContentPane(master);
	frame.setSize(600, 600);
	frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
	
	String event = e.getActionCommand();
	if (event == "OK"){
	    JOptionPane.showInternalOptionDialog(this,
		    "Você apertou o botão OK", 
		    "Testando focus na mensagem interna", 
		    JOptionPane.OK_CANCEL_OPTION, 
		    JOptionPane.WARNING_MESSAGE, 
		    null, null, null);
	} else if (event == "CANCEL"){
	    JOptionPane.showInternalOptionDialog(this,
		    "Você apertou o botão CANCELAR", 
		    "Testando focus na mensagem interna", 
		    JOptionPane.OK_CANCEL_OPTION, 
		    JOptionPane.WARNING_MESSAGE, 
		    null, null, null);
	}
    }
}

7 Respostas

RenataFA

Bem amigo, eu entendi a descrição do seu problema. Mas qdo fui executar o código que vc colocou, comigo não aconteceu como vc disse que ocorre, ou seja, se eu tentar clicar várias vezes nos botões, ele não abre várias mensagens.

Vc tem certeza q tá acontecendo como vc falou?!

H

Está tecnica de manter a tela travada até uma ação ser efetuada se chama modal. um dos componentes que controlam isso se chama JDialog.

daniel.lopes

RenataFA:
Bem amigo, eu entendi a descrição do seu problema. Mas qdo fui executar o código que vc colocou, comigo não aconteceu como vc disse que ocorre, ou seja, se eu tentar clicar várias vezes nos botões, ele não abre várias mensagens.

Vc tem certeza q tá acontecendo como vc falou?!

Bem, as janelas se abrem exatamente um sobre a outra. Por exemplo, eu clicando várias vezes nos botões OK e CANCELAR, as janelas se sobrepõem no mesmo lugar, não em cascata ou de outro modo. Para fechá-las só com vários cliques, um para cada janela.

Será que é por causa da versão que estou rodando? 1.4.2.14???

Mas que acontece, acontece… rssss…

daniel.lopes

Uma solução seria então eu passar a utilizar JDialog???

RenataFA

daniel.lopes:
RenataFA:
Bem amigo, eu entendi a descrição do seu problema. Mas qdo fui executar o código que vc colocou, comigo não aconteceu como vc disse que ocorre, ou seja, se eu tentar clicar várias vezes nos botões, ele não abre várias mensagens.

Vc tem certeza q tá acontecendo como vc falou?!

Bem, as janelas se abrem exatamente um sobre a outra. Por exemplo, eu clicando várias vezes nos botões OK e CANCELAR, as janelas se sobrepõem no mesmo lugar, não em cascata ou de outro modo. Para fechá-las só com vários cliques, um para cada janela.

Será que é por causa da versão que estou rodando? 1.4.2.14???

Mas que acontece, acontece… rssss…

Então, eu imaginei que estivessem abrindo uma sobre a outra, tentei arrastar, mudar de posição, etc… aqui não acontece. Sinceramente não sei o que te dizer. Mas de fato, eu uso java 5.

feltraco

Se o problema é as telas inferiores nao poderem ser acessadas em quanto a superior se manter aberta

assim como no Delphi essa opção se chama modal, como o “hugov” citou, e realmente o JOptionPane, nem o JFrame
tem essa opção… tb usei o JDialog.setModal()

FLwS

daniel.lopes

Caras, instalei o Java 5 e o 6. O código funcionou perfeitamente utilizando o JOptionPane.showInternalOptionPane.

Porém ainda paira a dúvida: Qual a utilidade do JOptionPane até a versão 1.4 já que não funciona corretamente? Ou melhor ainda, qual a melhor solução para esse problema sem ter que deixar de utilizá-lo e utilizar o JDialog???

[]s

Criado 28 de janeiro de 2008
Ultima resposta 29 de jan. de 2008
Respostas 7
Participantes 4