Validando JTextField Vacios

Tengo este método para validar JTextField y funciona correctamente.
Hay alguna método mas elegante.
public boolean Vacio(){
boolean[] field = new boolean[4];
boolean r=false;
field[0]=getJTRazon().getText().isEmpty();
field[1]=getJTDireccion().getText().isEmpty();
field[2]=getJTChofer().getText().isEmpty();
field[3]=getJTPlaca().getText().isEmpty();
if(field[0] || field[1] || field[2] || field[3]){
r=true;
}else{
r=false;
}
return r;
}

Saludos bye

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

or, and

Si cualquiera de los 4 campos está vacío, el método devuelve true. Es lo que quieres? Si cambias los || por && entonces sólo devolvería true si TODOS los campos están vacíos.

De cualquier manera, tratándose de tipos booleanos, el if sale sobrando, puedes asignar o devolver directamente lo que tienes como condición:

return field[0] || field[1] || field[2] || field[3];

Con eso te ahorras la variable r. Pero... sería mejor si solamente usas una variable r y te deshaces del arreglo de booleans. Vas OR'eando cada valor que necesitas.

boolean r = campo1.getText().isEmpty();
r |= campo2.getText().isEmpty();
r |= campo3.getText().isEmpty();
//y así cuando tengas más campos simplemente agregas una línea por campo, o quitas una línea si ya no quieres validar un campo
return r;

Gracias entendido

ezamudio probare con esa refactorización

Saludos

si pero no es reutilisable

Hola queridos mejicanos
Qué pasa si tienes 4 campos de texto en otro formulario
Disculpa que mi código sea tan complicado pero es que soy un purista y detesto que mi código no sea reutilizable y además tuve que usar el patrón decorador para librarse del problema de la herencia múltiple por que supongo que mucha gente le gusta heredar de jpanel como yo para así tener paneles reutilizables que incluso son reconocidos por el ide

public class Main {
       
        public static void main(String... arg) {
                new FrmPrincipal().setVisible(true);
        }
}
import java.awt.BorderLayout;
import javax.swing.JFrame;

public class FrmPrincipal extends JFrame {

        private static final long serialVersionUID = 1L;

        public FrmPrincipal() {

                inisialisaComponetes();
        }

        private void inisialisaComponetes() {
                agreagaPanelCentrado();
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setExtendedState(JFrame.MAXIMIZED_BOTH);
                setLocationRelativeTo(null);
        }

        private void agreagaPanelCentrado() {
                getContentPane().setLayout(new BorderLayout());
                getContentPane().add(new PanCentral(), BorderLayout.CENTER);
        }

}

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JTextField;

public class PanCentral extends FormularioSwing {

        private static final long serialVersionUID = 1L;
        private final JButton btnLimpiar;

        public PanCentral() {
                btnLimpiar = new JButton("limpiar");
                inicialisaComponentes();

        }

        private void inicialisaComponentes() {
                setLayout(new FlowLayout());
                add(btnLimpiar);
                for (int c = 1; c <= 100; c++) {
                        add(new JTextField("que pereza borrarlos todos"));
                }
                agreagaEventos(btnLimpiar);
        }

        private void agreagaEventos(JButton button) {
                button.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent actionEvent) {
                                limpiarTodo();
                        }
                });
        }
}

import javax.swing.JPanel;

public class FormularioSwing extends JPanel implements Formulario {

        @Override
        public void limpiarTodo() {
                new DecoradorFormulario(this).limpiarTodo();
        }

}

public interface Formulario {
        void limpiarTodo();
}
Imagen de neko069

Pues en todo caso, mejor

Pues en todo caso, mejor creas una utilería, que reciba de parámetro el arreglo ( o collection ) de los campos, y et devuelve un booleano, así sólo ciclas lo que envíes como parámetro, y regresas un booleano...

varargs

 

Si estás usando Java 5+, puedes usar una construcción llamada varargs para pasar un número arbitrario de valores a un método. p.ej.:

// ¿Alguno de estos campos es vacío?
if (isAnyEmpty(getJTRazon(), getJTDireccion(), getJTChofer(), getJTPlaca())) {
    JOptionPane.showMessageDialog(this, "Faltan datos.");
}
public boolean isAnyEmpty(JTextField... textFields) {
    for (JTextField textField : textFields) {
        if (textField.getText().isEmpty()) {
            return true;
        }
    }
    return false;
}

Otra forma sería:

// ¿No es cierto que ninguno de estos campos es vacío?
if (!isNoneEmpty(getJTRazon(), getJTDireccion(), getJTChofer(), getJTPlaca())) {
    JOptionPane.showMessageDialog(this, "Faltan datos.");
}
public boolean isNoneEmpty(JTextField... textFields) {
    for (JTextField textField : textFields) {
        if (textField.getText().isEmpty()) {
            return false;
        }
    }
    return true;
}

~~~