Verificar texto digitado!

18 respostas
hatakesakumo

Boa tarde!
O que tenho a pedir acho que é simples porém não acho o jeito de conseguir fazer…
Eu tenho um campo que me joga um texto… (asdfg hjklç asdfg hjklç) No campo de baixo eu preciso digitar o mesmo texto que tem no campo de cima…
Caso eu digite certo até o fim ele diz parabéns!
Mas se eu errar, em qualquer momento que seja, (asdfh), ele joga um texto dizendo que errou, e terei que digitar de novo…

Alguém ajuda? :slight_smile:

18 Respostas

drsmachado

Web ou Swing?
Se for swing, você pode chamar o evento onCaretUpdate.

hatakesakumo

eh java Swing… me ajuda usar faz muito tempo que não mecho nem sabia dessa opção!

hatakesakumo

No evento CaretUpdate eu coloquei o seguinte código:

String confere = tfExerDigitado.getText(); String exer = tfExercicios.getText(); if (confere == exer){ JOptionPane.showMessageDialog(null, "Parabéns!"); } else { JOptionPane.showMessageDialog(null, "Você errou a sequência, comece novamente!"); tfExerDigitado.setText(null); tfExerDigitado.requestFocus(); }

Se eu digitar errado ele joga a mensagem: Você errou… Mas se eu digitar certo ele também da erro!
Minha frase é asdfg hjklç
eu digito a ele já joga erro… alguma solução? Obrigado!

thiagocg

hatakesakumo, da uma lida sobre comparação de strings, no seu caso vc deveria usar equals e não ‘==’.

[]'s

Andre_Rosa

Use o método equals():

if(confere.equals(exer))
hatakesakumo

Olá, fiz com equals mas continua o mesmo problema… Se eu digito errado ele joga erro, se eu digito certo ele também joga erro…

private void tfExerDigitadoCaretUpdate(javax.swing.event.CaretEvent evt) { String confere = tfExerDigitado.getText(); String exer = tfExercicios.getText(); if(confere.equals(exer)){ JOptionPane.showMessageDialog(null, "Parabéns!"); } else { JOptionPane.showMessageDialog(null, "Você errou a sequência, comece novamente!"); tfExerDigitado.setText(null); tfExerDigitado.requestFocus(); } }

:frowning:

hatakesakumo

Sei o problema, como minha sequência é: asdfg hjklç, assim que eu digito o a ele ve que o a é diferente de: asdfg hjklç…
Preciso de uma forma que ele confira isso letra por letra, e não frase por frase!

O_O

Andre_Rosa

Que coisa!

Bem, tome uma medida mais drástica, e compare caractere por caractere.

if(confere.length == exer.length) { for(int I = 0; I < confere.length; I++) { if(confere[I] != exer[I]) { // São diferentes } else { } } }

hatakesakumo

Acusou erros nas linhas

if (confere[I] != exer[I]) {

no confere e no length também…

Estou muito inferrujado :oops: :shock:

Andre_Rosa

hatakesakumo:
Acusou erros nas linhas

if (confere[I] != exer[I]) {

no confere e no length também…

Estou muito inferrujado :oops: :shock:

E qual é o erro?

hatakesakumo

acima estão os erros!

hatakesakumo

Soluções? :frowning:

hatakesakumo

Alguma forma de fazer uma verificação caractere por caractere?

leandronsp

Olá!

Eu não tenho muita experiência com Java Swing, mas em vez de comparar cada caracter não seria melhor utilizar algo do tipo, um KeyPress event? Imagino que deve ter algo assim…

diego.sas

Bom dia hatakesakumo .
Cara da uma olhadinha em PlainDocument.
Com certeza resolvera seu problema.

diego.sas

Olha ae oque você procura.

import javax.swing.JLabel;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

@SuppressWarnings("serial")
public class Monitoracao extends PlainDocument {

	
	private int tamanho_frase_verificada = 0;
	private String frase_verificada;
	private JLabel jlb;
	private int cont = 0;
	public Monitoracao(int tamanho_frase_verificada, String frase, JLabel label_informação) 
	{
		this.tamanho_frase_verificada = tamanho_frase_verificada;
		frase_verificada = frase;
		jlb = label_informação;
	}

	public void insertString(int offset, String str, AttributeSet attr)
			throws BadLocationException {

		// *********************************** VALIDA

		if(!jlb.getText().equals("Digitação incorreta"))
		{
			if (cont < tamanho_frase_verificada) 
			{
				if(frase_verificada.charAt(cont) == str.toCharArray()[0])
				{
					super.insertString(offset, str, attr);
					
					if(cont + 1 == tamanho_frase_verificada)
					{
						jlb.setText("Parabens");
					}
					cont ++;
				}
				else{
					jlb.setText("Digitação incorreta");
				}
			} 
		}
	}
}
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Vcaracter extends JFrame implements ActionListener

{

	JTextField jtf1, jtf2;
	JLabel jlb1;
	JButton botao;
	public Vcaracter() {
		
		jtf1 = new JTextField("asdfg hjklç asdfg hjklç", 15);
		jtf2 = new JTextField(15);		
		jlb1 = new JLabel();
		botao = new JButton("Novo teste");
		botao.addActionListener(this);
		jtf2.setDocument(new Monitoracao(jtf1.getText().length(), jtf1.getText(), jlb1));
		jtf2.grabFocus();
	}
	
	/**--------------------------------------------------------------------**/
	/**
	 * Método que monta o layout do jogo. 
	 */
	public void criaMostraGui() 
	{			
		JPanel jpnPainel = new JPanel(new BorderLayout());
		JPanel jpnText = new JPanel(new GridLayout(2,0));
		jpnText.add(jtf1);
		jpnText.add(jtf2);
		jpnPainel.add(BorderLayout.NORTH, jpnText);
		jpnPainel.add(BorderLayout.CENTER, jlb1);
		jpnPainel.add(BorderLayout.SOUTH, botao);
		this.getContentPane().add(jpnPainel);
		this.setLocation(350, 250);
		this.setSize(250,250);
		this.setResizable(false);
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		Vcaracter vc = new Vcaracter();
		vc.criaMostraGui();
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		jtf2.setText("");
		jlb1.setText("");
		jtf2.removeAll();
		jtf2.setDocument(
				new Monitoracao(
						jtf1.getText().length(), 
						jtf1.getText(), 
						jlb1));
		jtf2.grabFocus();
		
	}
}

Espero ter ajudado

hatakesakumo

vou tentar… obrigado =P

G

mais simples tentar utilizar o startsWith…

Criado 17 de junho de 2011
Ultima resposta 22 de jun. de 2011
Respostas 18
Participantes 7