Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TaijovuNeji

[Resolvido] Erro em JOptionPane

Recommended Posts

Meu amigo está fazendo fazendo um programa...

Quando ele clica no botão salvar... a mensagem no JOptionPane que confirma que os dados foram salvos.. aparecem por trás do formulário Oo

Isso poderia ser facilmente resolvido se desse para colocar um this na parte do parent location no JOptionPane.. mas o JOptionPane não está sendo executado na classe do formulário.. por isso ele não conseguiu usar o this..

 

tem como resolver isso? O.O

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem várias sobrecargas para os métodos estáticos de JOptionPane. Falemos do mais simples, o de dois parâmetros. O método showMessageDialog recebe dois valores como parâmetro: o objeto de referência e a mensagem.

JOptionPane.showMessageDialog(this, "mensagem");
Se você chamar JOptionPane de uma classe que não estenda JFrame ou JDialog, ou algum outro contêiner, você deve passar valor nulo como parâmetro.

JOptionPane.showMessageDialog(null, "mensagem");
Você pode também ter uma classe que não estenda JFrame e chamar a mensagem com o objeto referência. Por exemplo:

public class SalvaEntidade extends JDialog {
   // ... código aqui
}

public class Teste {
   
   public Teste(SalvaEntidade se) {
      JOptionPane.showMessageDialog(se, "mensagem");
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara.. eu e ele sabemos disso que tu falou XD..

 

O problema é que o JOptionPane é mostrado atrás do JFrame.... e ele coloca null nos JOptionPane que não está em um JFrame... por isso que é mostrado atrás do JFrame..

 

Eu queria sober um jeito de mostrar na frente.. tem como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara.. eu e ele sabemos disso que tu falou XD..

 

O problema é que o JOptionPane é mostrado atrás do JFrame.... e ele coloca null nos JOptionPane que não está em um JFrame... por isso que é mostrado atrás do JFrame..

 

Eu queria sober um jeito de mostrar na frente.. tem como?

 

A sua classe principal (classe com o método main) estende JFrame? Se sim, confesso que não vejo a possibilidade da mensagem ser jogada atrás do JFrame. Bem! Se você quiser postar o código, talvez fique mais fácil ajudá-lo. É possível que o problema esteja na estruturação dele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Suponhamos que sua classe que estende JFrame se chame JanelaPrincipal. No construtor da classe JanelaPrincipal você faz o seguinte:

public JanelaPrincipal extends JFrame {
   public JanelaPrincipal() {
      JOptionPane.setRootFrame(this);
   }

   // ... mais código aqui
}

Não acho que seja o mais indicado, porém, resolve seu problema. Cuidado com as gambiarras. http://forum.imasters.com.br/public/style_emoticons/default/coolio.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não não.. ela não extende o JFrame... esse é o problema.. pq não da para usar o this como parent location ou RootFrame ..

 

Suponha que você tem o metodo main que é o JFrame.. e outra classe simples .. na classe simples tem o Método Salvar.. que é chamado através do objeto da classe simples usado na classe JFrame... o JOptionPane aparece na classe simples... ficando atrás do JFrame Oo...

 

Não tenho nem idéia de como arrumar isso O.O

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não não.. ela não extende o JFrame... esse é o problema.. pq não da para usar o this como parent location ou RootFrame ..

 

Suponha que você tem o metodo main que é o JFrame.. e outra classe simples .. na classe simples tem o Método Salvar.. que é chamado através do objeto da classe simples usado na classe JFrame... o JOptionPane aparece na classe simples... ficando atrás do JFrame Oo...

 

Não tenho nem idéia de como arrumar isso O.O

 

Amigo, como disse anteriormente:

public JanelaPrincipal extends JFrame {
   public JanelaPrincipal() {
      JOptionPane.setRootFrame(this);
   }
   // ... mais código aqui
}
Isso resolve seu problema. Leia com calma que entenderá a mensagem. http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu to aqui na escola ...

 

Eu tentei fazer do jeito que tu falou mas não funcionou Oo

 

usar o this para definir localização não funciona :(

 

Pelo visto voce nao entendeu o que te passei. Vamos tentar mais uma vez.

De acordo com o JavaDoc de setRootFrame(Frame newRootFrame): "Sets the frame to use for class methods in which a frame is not provided". "Define a janela para serem usados por métodos de classe na qual a janela não provida". Ou seja, exatamente o seu problema.

Imagina que voce tenha uma classe JanelaPrincipal que estenda JFrame e contenha o método main. E uma classe SalvaDados com um método para salvar os dados do formulário.

public JanelaPrincipal extends JFrame {
   public JanelaPrincipal() {
      JOptionPane.setRootFrame(this);
   }

   public static void main(String[] args) { // código pra chamar a janela }
   // ... mais código aqui
}

public class SalvaDados {
   public SalvaDados() { }

   public salvaDadosNoBanco() {
      JOptionPane.showMessageDialog(null, "Aleluia! Funcionou.");
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu to tentando fazer aqui o que tu falou e não dah certo Oo

 

acho que eu realmente não entendi...

 

 

A situação é a seguinte:

 

Tenho uma classe CadastrarProduto .. nela está o método main...

E tenho outra Classe Produto...

 

É nessa classe produto que mostra os JOption atrás da janela da classe CadastrarProduto...

Eu fiz a classe Produto herdar da JFrame... e coloquei no construtor da Classe Produto o comando que tu me passou.. e mesmo assim não funcionou.. a janela continua sendo mostrada atrás do JFrame O.o

Compartilhar este post


Link para o post
Compartilhar em outros sites

O comando setRootFrame deve ser colocado na classe CadastrarProduto (classe que estende JFrame) e não em Produto. Você quer que JOptionPane apareça na frente de CadastrarProduto, por isso você deve definir CadastrarProduto como janela raiz.

 

public CadastrarProduto extends JFrame { 
   public CadastrarProduto() { 
      JOptionPane.setRootFrame(this); 
   } 
 
   public static void main(String[] args) { // código pra chamar a janela } 
   // ... mais código aqui 
}

public class Produto { 
   public Produto() { } 
 
   public salvaDadosNoBanco() { 
      JOptionPane.showMessageDialog(null, "Aleluia! Funcionou."); 
   } 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa eu tinha entendi errado.. eu achei que era pra eu colocar extends para JFrame na classe produto e fazer o que tu falou Oo

 

Hoje quando eu for para escola eu testo lah pra ver se funcionou ^^

 

Muito obrigado pela ajuda que você está me dando cara http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

 

E desculpe minha ignorancia Oo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.