JOptionPane

28 respostas
M

Porque eu não posso fazer isso:

int num = JOptionPane.showInputDialog(null, " Entre com o numero: ");

porque só da pra fazer isso quando a variável for String?

28 Respostas

c354r
String numero;
		numero = JOptionPane.showInputDialog(null, " Entre com o numero: ");

	int num = Integer.parseInt(numero); // Converte String em Int

	JOptionPane.showMessageDialog(null, num + 3);// Soma o valor do usuário por 3


Você precisa declarar uma String receber o valor do usuário na String e depois converter essa String em um Int.
Pra converter :
int num = Integer.parseInt(numero);

Até mais!

berg.pb

Opa m-bax

int num = JOptionPane.showInputDialog(null, " Entre com o numero: ");

Voce não pode fazer isso, pq a especificação para o o componente JOptionPane foi definida para ter um retorno String.
Tanto que, se o usuário não colocar valor, vai retonar uma String vazia, mas sempre uma String.

Os únicos casos em que vc tem um retorno int são as caixas de confirmação, e os valores possíveis são:

* YES_OPTION
* NO_OPTION
* CANCEL_OPTION
* OK_OPTION
* CLOSED_OPTION

O q vc pode fazer é converter direto.
Seria a forma mais enxuta do código acima:

int num = Integer.valueOf(JOptionPane.showInputDialog(null, " Entre com o numero: "));

O problema, é se o usuário digitar algo que não seja numero, inclusive se ele não digitar nada.
Para ajudar, dá uma olhada neste tópico abaixo:
http://www.guj.com.br/posts/list/23607.java

Abraços

ViniGodoy

Para converter uma String para um int, use o método Integer.parseInt, não o método Integer.valueOf.

O Integer.valueOf irá:

  1. Chamar o Integer.parseInt
  2. Procurar um objeto Integer pré criado que se adapte ao resultado (se estiver de -256 e 255 vai achar um);
  3. Se não tiver, criar um novo objeto do tipo Integer;
  4. O java então verá que tem que converter o resultado num int (que é o tipo de sua variável x) e irá chamar o método intValue() automaticamente (auto-unboxing).

Note que no fundo, você só precisava do primeiro passo. Todos os outros foram processamento jogado fora.

berg.pb

Valeu viny

F

Porque vc tem que sempre converter uma String para Integer.
um exemplo:

int num = Integer.parseInt(JOptionPane.showInputDialog(“Digite o numero”));

Ai dentro da aspas voce pode digitar o que vc quiser para o usuario

F

[quote=fabianacastelao]Porque vc tem que sempre converter uma String para Integer.
um exemplo:

int num = Integer.parseInt(JOptionPane.showInputDialog(null, “Digite o numero”));

Ai dentro da aspas voce pode digitar o que vc quiser para o usuario.
Desculpe o certo e esse e nao o de cima…

S

E você ainda pode fazer assim.

try{
    int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero")); 
} catch( NumberFormatException e ){
    JOptionPane.showMessageDialog(null,"Número Inválido");
}

caso o usuário coloque uma letra ou qualquer coisa que torne o número inválido o programa não encerrará e ainda irá informar ao usuário que ele digitou um número não válido.

alansystem

SergioFilho:
E você ainda pode fazer assim.

try{
    int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero")); 
} catch( NumberFormatException e ){
    JOptionPane.showMessageDialog(null,"Número Inválido");
}

caso o usuário coloque uma letra ou qualquer coisa que torne o número inválido o programa não encerrará e ainda irá informar ao usuário que ele digitou um número não válido.

2 perguntas! é necessário sempre especificar null para JOptionPane.showInputDialog?

outra coisa, no caso de trabalhar com números é utilizado (NumberFormatException e) no catch, e se for ao contrário? para String, e o fulano não pode colocar valor numérico?

E
  1. O primeiro parâmetro pode ser null, mas é melhor você passar o objeto que corresponde à classe derivada de JFrame ou JDialog que está chamando esse JOptionPane. Se você fizer isso, irá garantir que o JOptionPane fique sempre na frente desse JFrame ou JDialog.
  2. Uma String pode conter qualquer coisa, incluindo um valor numérico. Se o valor é numérico ou não só depende de sua definição. Por exemplo, um programador árabe iria achar que este valor é numérico:
    [size=24][telefone removido][/size]
berg.pb

enfatizando:

tudo o q digitar é string. se não quiser q seja número, então vc vai ter utilizar uma estratégia para impedir isso.
abraços

Alberto.S

Uma pergunta, a classe JOptionPane não tem nenhum método que aceite direto a entrada de inteiros ou outro tipo numérico?

Ou alguma outra classe então? Porque toda a vida tem que criar uma variável extra para cada atributo e fazer a conversão. Não tem outro jeito? Mais direto?

alansystem

Alberto.S:
Uma pergunta, a classe JOptionPane não tem nenhum método que aceite direto a entrada de inteiros ou outro tipo numérico?

Ou alguma outra classe então? Porque toda a vida tem que criar uma variável extra para cada atributo e fazer a conversão. Não tem outro jeito? Mais direto?

Não necessariamente terá que criar uma variável extra
faça como nosso amigo Sergio Filho

int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero"));
Alberto.S

[quote=alansystem]

Alberto.S:
Uma pergunta, a classe JOptionPane não tem nenhum método que aceite direto a entrada de inteiros ou outro tipo numérico?

Ou alguma outra classe então? Porque toda a vida tem que criar uma variável extra para cada atributo e fazer a conversão. Não tem outro jeito? Mais direto?

Não necessariamente terá que criar uma variável extra
faça como nosso amigo Sergio Filho

int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero"));

Sim, está sendo colocado tudo em uma linha, mas no fim o processo é o mesmo. Me refiro a algo como:

meuInteiro = Classe.metodo("Digite um inteiro: ");

alansystem

Talvez eu que não esteja entendendo, mas o que você está dizendo, pra mim é a mesma coisa! aguardar alguém responder sua questão! 8)

berg.pb

Não está armazenando uma String e um Int.

A String já é o retorno do JOptionPane. Então, não tem jeito.
O que é diferente:

int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero"));

//acima vc tem uma variável declarada (num) e uma implícita, que é o próprio retorno do JoptionPane. (total 2)

//====================

String userAnswer = JOptionPane.showInputDialog(null, "Digite o numero");
int num = Integer.parseInt(userAnswer);

//nesse outro caso, vc tem sim + uma declarada, que é a userAnswer (total 3).

do meu ponto de vista, fazer direto é o melhor.

Assim: essa é a limitação da linguagem: o JoptionPane retorna String.
Porém, Java é mto extendível. Caso vc necessite que seja direto pra int, vc pode desenvolver um complemento pra tal.
Muita gente desenvolve complementos, isso é fácil de se ver por aí.

Blz? deus abençoe
\o/

Alberto.S

alansystem, outra coisa que eu quero saber é se isso está de acordo com as blueprints de Java. Para código reutilizável?

Porque o valor passa pela JOptionPane mas não fica armazenada em uma variável antes de ser convertida para inteiro. Está correto isso? :slight_smile:

berg.pb

Fala Alberto

Sim, isso é correto. Mas é meio estranho, não?! Principalmente pra quem tá começando.

A questão é a seguinte: vc vai precisar reutilizar o valor dessa String em algum outro ponto?

  • Se sua resposta for SIM, então, o melhor é armazenar mesmo a String numa variável explícita e fazer a conversão.
  • Porém, se sua resposta for NAO, então não há pq fazer este armazenamento, e a forma direta é a mais indicável!

Ainda assim: cada um faz como quer, dependendo do nível de abastração da linguagem e da necessidade encontrada!

Blz? Abraços
\o/

M
int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero"));

Interessante!

E sobre a questão do Alberto.S, talvez ele esteja tentando perguntar se não existe algum método de alguma classe gráfica que aceite e armazene números, sem precisar dessa conversão.

berg.pb

Opa

Existe o JFormattedTextField.
Através dele vc pode limitar o que vai ser digitado.

So que aqui, não se pode colocar o JFormattedTextField dentro do JOptionPane.
Pra utilizar, vc vai ter que fazer o seu proprio JFrame ou JDialog e, dentro dele, colocar o JFormattedTextField p receber o valor passado pelo usuário.

Blz?
Abraços \o/

dudujava1
Oi. Bom, tô fazendo um cadastrinho e resolvi colocar um evendo para o botão cancelar em que envia Strings vazias para os campos de JTextField para apagar tudo que estiver escrito, porém eu coloquei uma tela de confirmação para o usuário ter certeza do que vai fazer. Usei um JOptionPane.showConfirmDialog. Para ficar mais claro envio o código:
JOptionPane.showConfirmDialog(null,"Deseja cancelar o cadastro?");
    if(true){
        limparCampos();
    }
    else if(false){
        
    }

Agora o que coloco na condição do else para que ele não faça nada, mantenha o que tiver escrito e cancele a ação, pois da forma que tá quando eu clico em "Não" na tela de confirmação ele mesmo assim apaga o cadastro, tomando a mesma ação do "Sim"
Obrigado!

berg.pb

Fala Cara. Blz?

Seguinte

  1. o retorno de um showConfirmDialog não é um boolean.
  2. mesmo que fosse, esse valor ou deveria ser armazenado numa variável, ou deveria ser colocado direto na condição do if().

Do jeito que vc escreveu [if(true)], sempre será true pq nunca, nem ninguém está dizendo que há um false. Até pq, vc já esta DECLARANDO que “se = true”, entendeu?

O guia para a solução:
Segundo a API do Java:

Então, o showConfirmDialog retorna os possíveis valores:

  • 0 = Sim / * 1 = Não / * 2 = Cancelar.

Trate então seu condicional utilizando estes valores como parâmetros.
Outra coisa, segundo vc disse, se a única coisa que vc quer tratar somente uma condição, não precisa tratar as demais.

Por fim, lembre-se: ler a API do Java, de vez em quando, é legal, blz?
Link > APIJava

Abraços

soldier_of_God

[b][color=green]String raaio = JOptionPane.showInputDialog(“Informe o raio :”);
int raio = Integer.parseInt(raaio);

//Diâmetro
double diametro = 2 * raio;

<a href="//System.out.println">//System.out.println</a>("Diametro = "+diametro);

JOptionPane.showMessageDialog(null, diametro);[/color][/b]

Olá , como voces podem ver neste pedaço de código , criei um código para receber o raio e calcular o diâmetro , a área e o comprimento de uma circunferência.
A questão é que eu queria mostrar usando o JOptionPane alguma mensagem do tipo

JOptionPane.showMessageDialog(O diametro da circunferencia e = , diametro); ou

JOptionPane.showMessageDialog("O diametro da circunferencia e = ", diametro); ou ainda

JOptionPane.showMessageDialog('O diametro da circunferencia e = ', diametro);

mas o melhor que eu consegui foi

JOptionPane.showMessageDialog(null, diametro); , em que a mensagem só retorna o nº da variável diâmetro .

Alguma sugestão ??? Grato pela ajuda .

berg.pb

Faz assim.

JOptionPane.showMessageDialog(null, ("O diametro eh: " + diametro));

Algumas questões que não entendi:

  • se vc está utilizando esse inteiro ‘raio’ somente para o cálculo do diâmetro, necessariamente vc não precisa armazenar o valor.

Se vc permite, as maneiras mais eficazes (do meu ponto de vista) de se fazer, a partir do seu código e a partir das respostas anteriores, seria:

String raio = JOptionPane.showInputDialog(null, "Digite o raio:");

//Forma 1 - menos direto 
double diametro = 2 * Integer.parseInt(raio); 
JOptionPane.showMessageDialog(null, ("O diametro eh: " + diametro), "Título: Forma 1", JOptionPane.INFORMATION_MESSAGE);
		
//Forma 2 - mais direto ainda (gosto mais assim)
// dessa forma, não vai precisar armazenar a variável diametro
JOptionPane.showMessageDialog(null, ("O diametro eh: " + (2.0 *Integer.parseInt(raio))),"Título: Forma 2", JOptionPane.INFORMATION_MESSAGE);

//-- Nesta 2a forma, vc pode perceber que o fato e multiplicar um double por um int ((2.0 *Integer.parseInt(raio)) 
//-- me retorna um double automaticamente, evitando ter que armezar a variavel 'diametro'.
//-- somente faça isso se não for utilizar mais diametro.

Blz?
Ah! E não se esqueça. nos próximos códigos que postar, use o botão de CODE para iniciar e terminar um código. Fica mais legível.
Abraços. Deus abençoe

adsadilson

bom galera aproveitando esse topico gostaria de utilizar o JOptionPane.showInputDialog(null, “Digite o senha”); para pedi a senha, mais como faço para deixa o conteundo digitado no mascara de passowd por ex: (*****)

e-mail: [email removido]

berg.pb

Fala AdsAdilson.

Diretamente, não tem. Existe a classe JPasswordField.
Dá uma olhada se resolve:
http://www.guj.com.br/java/72643-senha-no-joptionpane-resolvido

Abcs

adsadilson

berg.pb

Valeu meu jovem vou da uma olhada, ha lhe adicionei no meu msn caso queira troca uma ideia fique a vontande

soldier_of_God

berg.pb:
Faz assim.

JOptionPane.showMessageDialog(null, ("O diametro eh: " + diametro));

Algumas questões que não entendi:

  • se vc está utilizando esse inteiro ‘raio’ somente para o cálculo do diâmetro, necessariamente vc não precisa armazenar o valor.

Se vc permite, as maneiras mais eficazes (do meu ponto de vista) de se fazer, a partir do seu código e a partir das respostas anteriores, seria:

String raio = JOptionPane.showInputDialog(null, "Digite o raio:");

//Forma 1 - menos direto 
double diametro = 2 * Integer.parseInt(raio); 
JOptionPane.showMessageDialog(null, ("O diametro eh: " + diametro), "Título: Forma 1", JOptionPane.INFORMATION_MESSAGE);
		
//Forma 2 - mais direto ainda (gosto mais assim)
// dessa forma, não vai precisar armazenar a variável diametro
JOptionPane.showMessageDialog(null, ("O diametro eh: " + (2.0 *Integer.parseInt(raio))),"Título: Forma 2", JOptionPane.INFORMATION_MESSAGE);

//-- Nesta 2a forma, vc pode perceber que o fato e multiplicar um double por um int ((2.0 *Integer.parseInt(raio)) 
//-- me retorna um double automaticamente, evitando ter que armezar a variavel 'diametro'.
//-- somente faça isso se não for utilizar mais diametro.

Blz?
Ah! E não se esqueça. nos próximos códigos que postar, use o botão de CODE para iniciar e terminar um código. Fica mais legível.
Abraços. Deus abençoe

berg.pb , valeu pela ajuda , entendi como mexer um pouco com isso .
é porque antes eu achava que dava pra tirar a parte null , e só por textos e variaveis . Mas ai lembrei e vi os lances dos ‘+’ e tal .

A propósito , eu ia mesmo perguntar a alguém como por essas linhas de código , fica muito legal.

no programinha que eu tava fazendo , a variavel raio também serviu para outras funçoes .
vlw amigo

:slight_smile:

berg.pb

Como diria a Turma do Chaves, “estamos aqui pra isso!!”
lol

Criado 27 de maio de 2010
Ultima resposta 13 de set. de 2012
Respostas 28
Participantes 12