OK.
Antes de recuperar el valor de un campo de texto, puedes preguntar si contiene algo escrito o no.
Si no tiene nada escrito, ya decides si quieres lanzar un mensaje de advertencia para obligar al usuario a que introduzca un valor, o simplemente ignorar ese campo y no intentar recuperar su contenido.
He escrito un ejemplo rápido y sencillo con 3 campos para recibir valores y sumarlos en un cuarto campo.
La suma funciona aunque falte un valor, o dos, o incluso si faltan todos (resultado entonces será 0)
Lo que hago es que en la acción del botón, declaro unos int inicializados a 0.
A cada uno de estos int, le asignaré el valor de cada campo, pero solo si estos campos tienen algún valor introducido.
Si no lo tienen, no recojo nada y dejo los int con valor 0.
private class AccionSumar implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int valor1 = 0, valor2 = 0, valor3 = 0;
//Recuperamos los valores de los campos de texto,
//pero solo NO están vacíos
if (!campo1.getText().isBlank())
valor1 = Integer.parseInt(campo1.getText());
if (!campo2.getText().isBlank())
valor2 = Integer.parseInt(campo2.getText());
if (!campo3.getText().isBlank())
valor3 = Integer.parseInt(campo3.getText());
//Hacemos suma para el campo de resultado
resultado.setText(Integer.toString(valor1 + valor2 + valor3));
}
}
De este modo, al hacer la suma no hay problemas y se realizará falten o no valores.
No se si esto te puede servir.
Dejo el código completo para quien quiera probarlo:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class SumaCampos extends JFrame{
private JTextField campo1;
private JTextField campo2;
private JTextField campo3;
private JTextField resultado;
private JButton btSumar;
public SumaCampos() {
campo1 = new JTextField(5);
campo2 = new JTextField(5);
campo3 = new JTextField(5);
resultado = new JTextField(5);
resultado.setEditable(false);
resultado.setForeground(Color.BLUE);
btSumar = new JButton("SUMAR");
btSumar.addActionListener(new AccionSumar());
JPanel panelValores = new JPanel();
panelValores.add(new PanelCampo("Valor 1", campo1));
panelValores.add(new JLabel("+"));
panelValores.add(new PanelCampo("Valor 2", campo2));
panelValores.add(new JLabel("+"));
panelValores.add(new PanelCampo("Valor 3", campo3));
panelValores.add(new JLabel("="));
panelValores.add(new PanelCampo("Resultado", resultado));
JPanel panelBoton = new JPanel();
panelBoton.add(btSumar);
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
add(panelValores);
add(new JSeparator());
add(panelBoton);
setTitle("Sumar campos");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private class PanelCampo extends JPanel {
public PanelCampo(String texto, JTextField campo) {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(new JLabel(texto));
add(campo);
setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(10, 5, 10, 5),
BorderFactory.createRaisedSoftBevelBorder()));
}
}
private class AccionSumar implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int valor1 = 0, valor2 = 0, valor3 = 0;
//Recuperamos los valores de los campos de texto,
//pero solo NO están vacíos
if (!campo1.getText().isBlank())
valor1 = Integer.parseInt(campo1.getText());
if (!campo2.getText().isBlank())
valor2 = Integer.parseInt(campo2.getText());
if (!campo3.getText().isBlank())
valor3 = Integer.parseInt(campo3.getText());
//Hacemos suma para el campo de resultado
resultado.setText(Integer.toString(valor1 + valor2 + valor3));
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new SumaCampos();
}
});
}