Verificar texto digitado!

18 respostas
H

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

D

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

H

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

H

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!

T

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

[]'s

A

Use o método equals():

if(confere.equals(exer))
H

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:

H

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

A

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 { } } }

H

Acusou erros nas linhas

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

no confere e no length também…

Estou muito inferrujado :oops: :shock:

A

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?

H

acima estão os erros!

H

Soluções? :frowning:

H

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

L

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…

D

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

D

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

H

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