By its description it does not match what is really happening.
String palavra[] = new String[3];
palavra[0] = "bar";
palavra[1] = "ola";
palavra[2] = "alo";
String p = jTextField1.getText();
int cont = 0;
while (cont < 3) {
if (palavra[cont].equals(p)) { // Só verifica aqui uma vez. Porque? Repare o seu else.
JOptionPane.showMessageDialog(this, "EXISTE");
jTextField1.setText("");
break;
// Se a condição de cima é falsa então você diz aqui para sair do laço,
// o laço nunca vai dar dois loops, ou seja só vai dar a resposta certa quando
// o textfield tiver o valor "bar".
} else {
JOptionPane.showMessageDialog(this, "NAO EXISTE");
jTextField1.setText("");
break; // Manda sair do laço while, sem ao menos ter dado todos os loops.
}
cont++;
// TENTATIVA DELE RETOMAR O LOOP DEPOIS DO BREAK.
}
The code does not show any fault, the fault is in the logic of what you want to do.
SOLUTION
I will comment on the code for a better understanding. This is one of the ways to solve this problem.
String palavra[] = {"bar", "ola", "alo"}; // Maneira mais elegante de inicializar um vetor
String p = jTextField1.getText(); // Recupera String do componente textfield.
boolean existe = false; // Declaro uma flag que indica se encontrou ou não uma palavra igual.
// Quando você sabe o tamanho máximo que vai percorrer o laço, utilize o for.
for (int i = 0 ; i < 3; i++) {
if (palavra[i].equals(p)) { // Percorre vetor de acordo com i.
existe = true; // Altera valor da flag.
break; // Sai do laço se encontrou palavra igual.
}
}
if (existe) {//verifica flag
JOptionPane.showMessageDialog(this, "EXISTE");
} else {
JOptionPane.showMessageDialog(this, "NAO EXISTE");
}
jTextField1.setText("");