Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Raquel en 17 de Agosto 2021, 15:42

Título: ejemplo sencillo interfaz gráfica GUI Java JTextField JSpinner JButt #codigoJava
Publicado por: Raquel en 17 de Agosto 2021, 15:42
Hola, mi duda es cómo puedo llamar un método de instancia calcular sueldo semanal en la GUI, agradezo ayuda.

Código:

Código: [Seleccionar]
public class EmpleadoPorHora extends Empleado {
    private int hora;
   
    //Constructor

    public EmpleadoPorHora(int hora, String nombre, String apellido, String numeroSeguro) {
        super(nombre, apellido, numeroSeguro);
        this.hora = hora;
    }
    //metodo
    public double calcularSueldoSemanalPOrHora(){
        double valorHora=3.50;
        double sueldo;
        sueldo= valorHora*hora;   
        return sueldo;
       
    }
    @Override
   public String toString(){
       return super.toString()+this.hora;
   }
         
           
}
Título: Re: Como puedo llamar un método de instancia calcular sueldo semanal en la GUI
Publicado por: Kabuto en 17 de Agosto 2021, 19:42
Hola.

Se supone que en la GUI, tendrás o podrás crear un objeto EmpleadoPorHora con los datos que recojas de la interfaz.
Una vez creado, puedes llamar a su método y mostrar su resultado en un JLabel, o un JTextField, o donde quieras...

No se como has diseñado tu GUI, pero suponiendo que tengas unos campos de texto y un botón para solicitar la acción de calcular sueldo, será en el código del ActionListener de este botón donde se crea el empleado, se calcula el sueldo y se muestra.

Dejo un ejemplo muy rápido y sencillo a continuación.
Fíjate que en la clase ActionListener es donde se hace la creación del empleado, calculo de sueldo y publicación en un JLabel de la GUI.


Código: [Seleccionar]
public class EjemploGUI extends JFrame{

private JTextField jtNombre;
private JTextField jtApellido;
private JTextField jtNumSeguro;
private JSpinner jsHoras;
private JLabel jlSueldo;
private JButton btCalcular;

public EjemploGUI() {
iniciarComponentes();

setLayout(new BorderLayout());
add(new PanelCentral(), BorderLayout.CENTER);
add(new PanelSur(), BorderLayout.SOUTH);

setTitle("Ejemplo Empleado");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}

private void iniciarComponentes() {
jtNombre = new JTextField(10);
jtApellido = new JTextField(10);
jtNumSeguro = new JTextField(10);
jsHoras = new JSpinner(new SpinnerNumberModel(10,1,Integer.MAX_VALUE,1));
jsHoras.setPreferredSize(new Dimension(60,20));
jlSueldo = new JLabel();
jlSueldo.setForeground(Color.BLUE);
btCalcular = new JButton("Calcular Sueldo");
btCalcular.addActionListener(new AccionCalcular());
}

private class PanelComponente extends JPanel {
public PanelComponente(JComponent componente, int flotacion) {
setLayout(new FlowLayout(flotacion));
add(componente);
}
}

private class PanelCentral extends JPanel {

public PanelCentral() {
setLayout(new GridLayout(5,2,8,4));
add(new PanelComponente(new JLabel("Nombre:"), FlowLayout.RIGHT));
add(new PanelComponente(jtNombre, FlowLayout.LEFT));
add(new PanelComponente(new JLabel("Apellidos:"), FlowLayout.RIGHT));
add(new PanelComponente(jtApellido, FlowLayout.LEFT));
add(new PanelComponente(new JLabel("Nº Seguro:"), FlowLayout.RIGHT));
add(new PanelComponente(jtNumSeguro, FlowLayout.LEFT));
add(new PanelComponente(new JLabel("Horas:"), FlowLayout.RIGHT));
add(new PanelComponente(jsHoras, FlowLayout.LEFT));
add(new PanelComponente(new JLabel("Sueldo:"), FlowLayout.RIGHT));
add(new PanelComponente(jlSueldo, FlowLayout.LEFT));

setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(20, 25, 10, 25),
BorderFactory.createRaisedSoftBevelBorder()));
}
}

private class PanelSur extends JPanel {

public PanelSur() {
add(btCalcular);
setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(10, 25, 20, 25),
BorderFactory.createLoweredSoftBevelBorder()));
}
}

private class AccionCalcular implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//Capturamos datos para crear empleado, obviando validaciones previas por ser un ejemplo
var empleado = new EmpleadoPorHora(jtNombre.getText(), jtApellido.getText(),
jtNumSeguro.getText(), (int)jsHoras.getValue());
//Calculamos y mostramos sueldo en la GUI
Double sueldo = empleado.calcularSueldoSemanalPorHora();
jlSueldo.setText(sueldo.toString());
}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new EjemploGUI();
}
});
}
}

En pantalla tenemos una interfaz para meter datos y calcular el sueldo mediante el botón de acción.
(https://i.ibb.co/s1gytn5/imagen-2021-08-17-193916.png)
Título: Re: Como puedo llamar un método de instancia calcular sueldo semanal en la GUI
Publicado por: Raquel en 17 de Agosto 2021, 20:12
Gracias, verás, creé un objeto pero no me permite llamar

Código


Clase Padre Empleado

Código: [Seleccionar]
//clase Padre
public class Empleado {

   
    protected String nombre;
    protected String apellido;
    protected int numeroSeguro;
   
    //constructor

    public Empleado(String nombre, String apellido, int numeroSeguro) {
        this.nombre = nombre;
        this.apellido = apellido;
        this.numeroSeguro = numeroSeguro;
    }
    //metodos gett and setter

   public Empleado(){
       
   }

 

   

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public int getNumeroSeguro() {
        return numeroSeguro;
    }

    public void setNumeroSeguro(int numeroSeguro) {
        this.numeroSeguro = numeroSeguro;
    }
 
    @Override
    public String toString(){
       return this.nombre+"-"+this.apellido+"-"+this.numeroSeguro;
    }
   
   
}


Clase hija 1 EmpleadoPorHora

Código: [Seleccionar]
//Clase hija
public class EmpleadoPorHora extends Empleado {
    private int hora;
   
    //Constructor

    public EmpleadoPorHora(int hora, String nombre, String apellido, int numeroSeguro) {
        super(nombre, apellido, numeroSeguro);
        this.hora = hora;
    }

public EmpleadoPorHora() {
   
}   
    //metodo
    public double calcularSueldoSemanalPOrHora(){
        double valorHora=3.50;
        double sueldo;
        sueldo= valorHora*hora;   
        return sueldo;
       
    }
    @Override
   public String toString(){
       return super.toString()+this.hora;
   }
         
           
}


Clase hija 2 EmpleadoPorComision

Código: [Seleccionar]
//Clase Hija
public class EmpleadoPorComision extends Empleado {
  private double venta; 
//Constructor

    public EmpleadoPorComision(double venta, String nombre, String apellido, int numeroSeguro) {
        super(nombre, apellido, numeroSeguro);
        this.venta = venta;
    }
    public EmpleadoPorComision(){
       
    }
  //metodo para calcular la comision
    public double calcularComision(){
        double comision;
        double sueldoSemanal=170;
        comision=sueldoSemanal+(0.20*venta);
      return comision;
    }
  @Override
  public String toString(){
      return super.toString()+this.venta;
     
  }
}


Clase Gui

Código: [Seleccionar]
//Gui
public class GUIEmpleado extends javax.swing.JFrame {
    Empleado e1;
//    Empleado e2 = new EmpleadoPorHora();
//    Empleado e3 =new EmpleadoPorComision();
   
   

    /**
     * Creates new form GUIEmpleado
     */
    public GUIEmpleado() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        pnlDatos = new javax.swing.JPanel();
        lblNombre = new javax.swing.JLabel();
        lblApellido = new javax.swing.JLabel();
        lblNumerodeSeguro = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        txtApellido = new javax.swing.JTextField();
        txtNumerodeSeguro = new javax.swing.JTextField();
        btnGuardar = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        txtVenta = new javax.swing.JTextField();
        txtHoraTrabajadas = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        txaInformacion = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        pnlDatos.setBorder(javax.swing.BorderFactory.createTitledBorder("Datos"));

        lblNombre.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        lblNombre.setForeground(new java.awt.Color(255, 102, 255));
        lblNombre.setText("Nombre");

        lblApellido.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        lblApellido.setForeground(new java.awt.Color(255, 51, 255));
        lblApellido.setText("Apellido");

        lblNumerodeSeguro.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        lblNumerodeSeguro.setForeground(new java.awt.Color(255, 51, 204));
        lblNumerodeSeguro.setText("Número de Seguro");

        btnGuardar.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        btnGuardar.setForeground(new java.awt.Color(153, 0, 153));
        btnGuardar.setText("Guardar");
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 102, 204));
        jLabel1.setText("Venta");

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(255, 0, 204));
        jLabel2.setText("Horas Trabajadas");

        javax.swing.GroupLayout pnlDatosLayout = new javax.swing.GroupLayout(pnlDatos);
        pnlDatos.setLayout(pnlDatosLayout);
        pnlDatosLayout.setHorizontalGroup(
            pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlDatosLayout.createSequentialGroup()
                .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlDatosLayout.createSequentialGroup()
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(btnGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(pnlDatosLayout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lblNumerodeSeguro, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(lblNombre, javax.swing.GroupLayout.DEFAULT_SIZE, 74, Short.MAX_VALUE)
                                .addComponent(lblApellido, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addComponent(jLabel2)
                            .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 202, Short.MAX_VALUE)))
                .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(txtApellido, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE)
                    .addComponent(txtNombre, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(txtNumerodeSeguro, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(txtVenta, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(txtHoraTrabajadas, javax.swing.GroupLayout.Alignment.TRAILING))
                .addGap(22, 22, 22))
        );
        pnlDatosLayout.setVerticalGroup(
            pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlDatosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblNombre)
                    .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblApellido)
                    .addComponent(txtApellido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblNumerodeSeguro)
                    .addComponent(txtNumerodeSeguro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(txtVenta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE)
                .addGroup(pnlDatosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtHoraTrabajadas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2))
                .addGap(18, 18, 18)
                .addComponent(btnGuardar)
                .addContainerGap())
        );

        txaInformacion.setColumns(20);
        txaInformacion.setRows(5);
        jScrollPane1.setViewportView(txaInformacion);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(28, 28, 28)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(pnlDatos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 472, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(322, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(36, 36, 36)
                .addComponent(pnlDatos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                       

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
         
       int numSeguro=Integer.parseInt(txtNumerodeSeguro.getText());
        e1=new Empleado(txtNombre.getText(), txtApellido.getText(),numSeguro);//En esta línea quiero llamar al metdo calcularsueldoSemanal

        txaInformacion.setText(e1.toString());
       
   
    }                                         

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(GUIEmpleado.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(GUIEmpleado.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(GUIEmpleado.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(GUIEmpleado.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GUIEmpleado().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton btnGuardar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblApellido;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblNumerodeSeguro;
    private javax.swing.JPanel pnlDatos;
    private javax.swing.JTextArea txaInformacion;
    private javax.swing.JTextField txtApellido;
    private javax.swing.JTextField txtHoraTrabajadas;
    private javax.swing.JTextField txtNombre;
    private javax.swing.JTextField txtNumerodeSeguro;
    private javax.swing.JTextField txtVenta;
    // End of variables declaration                   
}
Título: Re: Como puedo llamar un método de instancia calcular sueldo semanal en la GUI
Publicado por: Kabuto en 18 de Agosto 2021, 01:28
Bufff... nunca me acostumbraré a las GUI autogeneradas por NetBeans, cientos de líneas de código que solo una máquina entiende... para hacer lo que se podría hacer con unas decenas de líneas legibles y escritas por un ser humano.


A ver, creo que el problema es que usas un objeto Empleado

Citar
public class GUIEmpleado extends javax.swing.JFrame {
    Empleado e1;

Citar
private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
         
       int numSeguro=Integer.parseInt(txtNumerodeSeguro.getText());
        e1=new Empleado(txtNombre.getText(), txtApellido.getText(),numSeguro);//En esta línea quiero llamar al metdo calcularsueldoSemanal

        txaInformacion.setText(e1.toString());
       
   
    }

La clase Empleado no tiene ningún método calcularSueldoSemanalPorHora()

Es método corresponde a la clase hija EmpleadoPorHora
Así que esa es la clase que tienes que instanciar:

Citar
public class GUIEmpleado extends javax.swing.JFrame {
    EmpleadoPorHora e1;

Citar
private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
         
       int numSeguro=Integer.parseInt(txtNumerodeSeguro.getText());
        e1=new EmpleadoPorHora(txtNombre.getText(), txtApellido.getText(),numSeguro);//En esta línea quiero llamar al metdo calcularsueldoSemanal

        txaInformacion.setText(e1.toString());
       
   
    }