Verificar texto digitado!

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:

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

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

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!

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

[]'s

Use o método equals():

if(confere.equals(exer))

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:

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

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

Acusou erros nas linhas

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

no confere e no length também…

Estou muito inferrujado :oops: :shock:

[quote=hatakesakumo]Acusou erros nas linhas

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

no confere e no length também…

Estou muito inferrujado :oops: :shock: [/quote]

E qual é o erro?

acima estão os erros!

Soluções? :frowning:

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

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…

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

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

vou tentar… obrigado =P

mais simples tentar utilizar o startsWith…