Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Luisvgonzalez.1405 en 16 de Marzo 2021, 23:09
-
Hola, tengo una duda. Tengo varios campos realizando una suma, pero no sé cómo hacer un condicional dejando uno o varios campos vacíos sin que marque error.
-
Tendrás que dar más detalles.
De cuál lenguaje se trata (Java, HTML, Visual,...?), aque error te refieres y ya lo ideal sería que compartieses aquí tu código.
Por otro lado, si el error te refieres a intentar hacer una suma cuando hay campos en blanco, pues lo primero es preguntar por código si hay campos vacíos.
¿Cómo se pregunta? Pues ya depende de cada lenguaje, de ahí la importancia de que nos des más información.
-
El lenguanje es java,
Tengo 4 campos solo sumo 3 campos 1 campo lo dejo vacio, pero obviamente me dara error por dejar ese campo vacio, no se que hacer
-
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)
(https://i.ibb.co/X3NZGW5/imagen-2021-03-17-105729.png)
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();
}
});
}