Dúvidas sobre JOptionPane

Olá.
Estava lendo alguns manuais e vi que a maioria usa o JOptionPane.
Tenho algumas dúvidas a seu respeito:

  1. O JOptionPane é uma classe?
  2. Vi alguns exemplos do tipo:
String valor;
double numero;

valor = JOptionPane.showInputDialog ("Digite o número");
...

Quando vou executar o programa, vai abrir uma janelinha do “Digite o número”, certo? Gostaria de saber se é possível mudar o título da janela para algum nome que eu queira, ao invés de aparecer input.
Eu pedi para o usuário digitar um número, mas se ele digitar uma letra, o programa pára de funcionar pq dá um erro… não tem uma maneira de evitar que o programa reconheça a letra mas retorne uma mensagem de erro e peça para digitar um valor correto?
3) E uma dúvida sem relação com o JOptionPane: se eu fizer um programa e mandar para alguém que não possui o SDK, ou qualquer um desse tipo, instalado no computador, o programa vai rodar?!
Se funcionar, para rodar o programa precisaria digitar java Arquivo ?

Acho que perguntei muito… :lol:
Valeu!

O caso do JOptionPane vc pode verificar o valor depois que o usuário clicar em OK e se for o caso exibir novamente o JOptionPane.

Para executar um programa Java deve-se ter instalado o JRE (Java Runtime Enviroment). Vc pode baixar o JRE separado ou com o JDK

1 - JOptionPane é uma classe com métodos estáticos que ajudam a pegar dados do usuário e para mostrar mensagens!

2 - O método showInputDialog retorna uma string, mas vc quer um double certo? A classe Double tem método “parseDouble” que converte uma string em double.

String valor; 
double numero;
valor = JOptionPane.showInputDialog("Digite o número");
numero = Double.parseDouble(valor);

para reconhecer se o que foi digitado é letra ou dígito é preciso usar o método isDigit da classe Character para cada caractere digitado.

para mudar o nome da janela o jeito certo de se chamar é o seguinte:
JOptionPane.showInputDialog (null, “texto”, “nome da janela”, JOptionPane.PLAIN_MESSAGE);
O ultimo argumento (JOptionPane.PLAIN_MESSAGE) é para não aparecer nenhum símbolo na mensagem.

3 - é preciso apenas a JRE que tem os pacotes básicos para rodar um programa java. mesmo assim é preciso digitar java Arquivo a não ser que vc faça um arquivo .bat para inicializa-lo.

[quote=“casantiago”]1 - JOptionPane é uma classe com métodos estáticos que ajudam a pegar dados do usuário e para mostrar mensagens!

2 - O método showInputDialog retorna uma string, mas vc quer um double certo? A classe Double tem método “parseDouble” que converte uma string em double.

String valor; 
double numero;
valor = JOptionPane.showInputDialog("Digite o número");
numero = Double.parseDouble(valor);

para reconhecer se o que foi digitado é letra ou dígito é preciso usar o método isDigit da classe Character para cada caractere digitado.

para mudar o nome da janela o jeito certo de se chamar é o seguinte:
JOptionPane.showInputDialog (null, “texto”, “nome da janela”, JOptionPane.PLAIN_MESSAGE);
O ultimo argumento (JOptionPane.PLAIN_MESSAGE) é para não aparecer nenhum símbolo na mensagem.

3 - é preciso apenas a JRE que tem os pacotes básicos para rodar um programa java. mesmo assim é preciso digitar java Arquivo a não ser que vc faça um arquivo .bat para inicializa-lo.[/quote]

Valeu casantiago.
Ainda estou com uma dúvida:

String valor;
double numero;

valor = JOptionPane.showInputDialog (null, "Digite o número", "Pergunta", JOptionPane.PLAIN_MESSAGE);
numero = Double.parseDouble (valor);

etc...

Eu preciso que o usuário retorne um número, certo? Se ele retornar uma letra nesse caso daria um erro e o programa “pára”.
A minha dúvida é: como fazer pra o programa ler a letra, verificar que é inválido e pedir pra o usuário digitar um caracter válido…
Mais ou menos assim:

String valor;
double numero;

valor = JOptionPane.showInputDialog (null, "Digite o número", "Pergunta", JOptionPane.PLAIN_MESSAGE);
numero = Double.parseDouble (valor);

"se for letra ou algum caracter inválido, retornar "Digite um número válido" e aparece a caixinha de novo... como eu coloco aqui o método isDigit?"

etc...

Valeu novamente! :smiley:

teu programa para pq ele ta lançando uma NumberFormatException, tu tem q tratá-la… por ex:

try {

   numero = Double.parseDouble( valor );

} catch ( NumberFormatException e )
{
   // se o usuario entrar com uma letra,
   // o catch executa...
   // ai aqui tu pode dizer pra ele entrar com
   // um numero valido
}

Eu fiz o seguinte código:

[code]import javax.swing.JOptionPane;

class Exemplo
{
public static void main (String args [])
{
String valor;
double numeral;

valor = JOptionPane.showInputDialog ("Digite o numeral");
try 
{ 
  numeral = Double.parseDouble ( valor ); 
} 
catch ( NumberFormatException e ) 
{ 
  valor = JOptionPane.showInputDialog ( "Digite um numeral válido" );
  numeral = Double.parseDouble ( valor );
} 

JOptionPane.showMessageDialog (null, "O valor digitado é " + numeral, "Teste", JOptionPane.INFORMATION_MESSAGE);
System.exit (0);

}
}
[/code]
Esse código funciona… se na primeira vez o usuário digita uma letra, então o programa passa para o catch, certo? Mas se eu digitar novamente uma letra, aí acontece o erro… não tem como fazer pra ele só aceitar o valor quando for um número de fato, independente do número de tentativas?
Agradeço novamente e desculpem pela minha insistência… :smiley:

import javax.swing.JOptionPane; 

class Exemplo 
{ 
  public static void main (String args []) 
  { 
    double numeral; 
    while (true){
     try 
    { 
       numeral = Double.parseDouble ( JOptionPane.showInputDialog ("Digite o numeral");  ); 
       break;
      } 
     catch ( NumberFormatException e ) 
     { 
       JOptionPane.showMessageDialog ( null, "Digite um numeral válido" ); 
     } 
    }
    JOptionPane.showMessageDialog (null, "O valor digitado é " + numeral, "Teste", JOptionPane.INFORMATION_MESSAGE); 
    System.exit (0); 
  } 
} 

nesse codigo, o break soh vai ser executado se n for disparada a excecao, ou seja, se o numero for valido, portanto, o numero continuara sendo perguntado ateh o numero ser valido…

Valeu Felipe. Funcionou!

Uma perguntinha:
Quando vcs usam o JOptionPane, vcs sempre colocam essas condições pra verificar se o dado inserido é válido?
Nossa, de um simples valor = JOptionPane.showInputDialog (“Digite o valor”) o código passou para um código de 15 linhas. 8O :!: :!:

P/ Felipe:
numeral = Double.parseDouble ( JOptionPane.showInputDialog (“Digite o numeral”); ); . Isso não é válido… dá erro de compilação. :wink:
Tem que fazer o jeito “tradicional” mesmo…

bem… tu precisa fazer checagem de Exceptions, se não… tua aplicação vira mais uma do estilo M$… pau e pau… ah, a linha:

numeral = Double.parseDouble ( JOptionPane.showInputDialog ("Digite o numeral"); ); 

da certo sim… mas pra isso tu precisa tirar o “;” adicional né… ficando:

numeral = Double.parseDouble ( JOptionPane.showInputDialog ("Digite o numeral") ); 

:slight_smile:

[quote]da certo sim… mas pra isso tu precisa tirar o “;” adicional né… ficando:

numeral = Double.parseDouble ( JOptionPane.showInputDialog ("Digite o numeral") );  

[/quote]

Ah… legal, funciona… :smiley:

Só mais uma perguntinha em relação a desempenho:
Faz diferença significativa de desempenho entre eu escrever:

valor = JOptionPane.showInputDialog ( "Digite o numeral" );
numeral = Double.parseDouble ( valor );

e

numeral = Double.parseDouble ( JOptionPane.showInputDialog ("Digite o numeral") );

:?: :?:
O código fica “mais limpo” da última forma, mas o primeiro exemplo é mais claro (pelo menos pra mim, que to começando no Java :lol: ).
Gostaria de saber de quem entende… qual “estilo” de programação vcs preferem? O código que deixa mais explícito e claro, ou aquele que é mais eficiente mas mais difícil de entender?

…aquele q é mais fácil de ler por todos, com certeza… :wink: