Problemas com JTextField

17 respostas
C

Olá. Se eu tiver, por exmplo, dois TextField com alguns valores inteiros separados por um espaço " " por exemplo: [1.0 2.0 3.0] e [4.0 5.0 6.0] e eu quiser transformar isso em valores reais e relacionar o valor de um com o de outro como se fossem 2 vetores exemplo: u[] = [1.0 2.0 3.0] e v[] = [4.0 5.0 6.0].

Resumo: Como eu faço para transformar um TextField em um vetor.

Obrigado.

17 Respostas

R

Se não houver problemas de esses valores serem inseridos de uma forma incorreta, tu pode fazer um split(" “) no getText() do JTextField. Isso vai devolver um array de String usando o espaço (” ") como delimitador. Ai tu transforma esse Array de String em um Array de double.

Qualquer outra duvida, estamos ai!

Valeu

C

Você poderia me dar um exemplo do uso desse split(" ")? Eu sou iniciante em java e ainda não sei usar muitos comandos… obrigado

M

http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=19849&highlight=split
http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=19821&highlight=split

C

Esse é o meu código... o que há de errado nele?

import javax.swing.*;
import java.awt.event.*;

public class Questao8GUI {

	public static void main(String[] args) {
		int n;
		final JFrame janela = new JFrame("Produto Escalar");
		final JButton calcular = new JButton("CALCULAR");
		final JButton criavetores = new JButton("Criar Vetores");
		final JButton criarn = new JButton("n");
		final JTextField campon = new JTextField(5);
		final JTextField vetoru = new JTextField(15);
		final JTextField vetorv = new JTextField(15);
		final JTextField camporesposta = new JTextField(15);
		janela.setSize(300, 200);
		JPanel painel = new JPanel();
		painel.add(calcular);
		painel.add(criavetores);
		painel.add(criarn);
		painel.add(vetoru);
		painel.add(vetorv);
		painel.add(camporesposta);
		painel.add(campon);
		janela.getContentPane().add(painel);
		criarn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				campon.setText(JOptionPane.showInputDialog(null,
						"Entre com um valor para n:"));
			}
		});
		criavetores.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int n = Integer.parseInt(campon.getText());
				for (int i = 0; i < n; i++) {
					vetoru.setText(vetoru.getText()
							+ " "
							+ JOptionPane.showInputDialog(null,
									"Entre com o elemento " + i
											+ " do vetor U."));
				}
				for (int i = 0; i < n; i++) {
					vetorv.setText(vetorv.getText()
							+ " "
							+ JOptionPane.showInputDialog(null,
									"Entre com o elemento " + i
											+ " do vetor V."));
				}
			}
		});
// O ERRO SURGE NESSE EVENTO
		calcular.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String a, u[], v[], b;
				int n, i;
				double f, g = 0;
				n = Integer.parseInt(campon.getText());
				u = new String[n];
				v = new String[n];
				a = vetoru.getText();
				u = a.split(" ");
				b = vetorv.getText();
				v = b.split(" ");
				for (i = 0; i < n; i++) {					
					f = Double.parseDouble(u[i]) * Double.parseDouble(v[i]);
					g = g + f;					
				}		
				camporesposta.setText("A resposta é: " + g);
			}
		});
		janela.setVisible(true);
	}
}
C

Alguém pode me ajudar nesse finalzinho de programa?
Obrigado…

R

Coloca o erro aí pra a gente ver!

C

Quando eu clico no botão desse evento:

calcular.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String a, b, u[], v[]; int n, i; double f, g = 0, h, j; n = Integer.parseInt(campon.getText()); u = new String[n]; v = new String[n]; a = vetoru.getText(); u = (a.split(" ")); for (i = 0; i < n; i++) { h = Double.parseDouble(u[i]); j = Double.parseDouble(v[i]); f = h * j; g = g + f; } camporesposta.setText("" + g); } });
…o programa deveria preencher um JTextField com o resultado do produto vetorial, mas ele continua em branco e ainda dá o seguinte erro: EventDispatchThread.run() line: not avaliable [local variables unavaliable].
O que será isso?

R

Tenta inicializar as variáveis f, h e j, porque tu tá usando dentro de um laço, aí tem que inicializar antes.

ps: Se tu não tiver usando o eclipse, experimenta usar… ajuda muito pra achar errinhos difíceis de se encontrar.

C

Eu já inicializei as variáveis j,h,g e não deu certo… e eu uso eclipse sim.

R

Em qual linha você tá inicializando f, h e j, porque no código que tu colocou só to vendo inicializado o g

C

Eu incializei isso depois que vc me deu o toque… eu coloquei pra rodar mas não deu…

R

Não sei se vc jah modificou, mas no código o vetor v foi inicializado mas os índices não receberam valores.

O método split() já retorna um vetor, então tu não precisa inicializar o vetor antes não.

C

como assim os índices não receberam valores? O split retorna um vetor de string certo? Aí se eu quiser multiplicar os valores desse vetor eu posso fazer assim:

String a, b, u[], v[]; int n, i; double f, g = 0; n = Integer.parseInt(campon.getText()); a = vetoru.getText(); u = a.split(" "); b = vetorv.getText(); v = b.split(" "); for (i = 0; i < n; i++) { f = Double.parseDouble(u[i])*Double.parseDouble(v[i]);
que dá certo? Ao menos o eclipse não tá mostrando erro nenhum… Teste e não deu certo… apareceu o erro passado aqui EventDispatchThread no debug

C

Pow… to conseguindo resolver esse problema não… alguém me ajuda aí…

R

Descobri!!! É o seguinte: o array devolvido pelo split() tinha a primeira posição em branco, aí dava erro na hora do parseDouble(). Então é só tu fazer isso:

a = vetoru.getText().replaceFirst(" ","");
b = vetorv.getText().replaceFirst(" ","");

Qualquer bronca, estamos aí!

C

Vlw kra vo testar aqui :smiley:

C

Valeu mermo véi… tá funcionando direitinho :smiley: Brigadão ae!!!
Abraços

Criado 24 de maio de 2005
Ultima resposta 26 de mai. de 2005
Respostas 17
Participantes 3