Implementación e Interfaz en Netbeans


IMPLEMENTACIÓN E INTERFAZ EN NETBEANS

Definición:
Un interface es una colección de definiciones de métodos (sin implementaciones) y de valores constantes.

Los interfaces se utilizan para definir un protocolo de comportamiento que puede ser implementado por cualquier clase del árbol de clases.Los interfaces son útiles para.

·         capturar similitudes entre clases no relacionadas sin forzar una relación entre ellas.
·         declarar métodos que una o varias clases necesitan implementar.
·         revelar el interface de programación de un objeto sin recelar sus clases (los objetos de este tipo son llamados objetos anónimos y pueden ser útiles cuando compartas un paquete de clases con otros desarrolladores).
En Java, un interface es un tipo de dato de referencia, y por tanto, puede utilizarse en muchos de los sitios donde se pueda utilizar cualquier tipo (como en un argumento de métodos y una declaración de variables).
Los Interfaces No Proporcionan Herencia MúltipleAlgunas veces se trata a los interfaces como una alternativa a la herencia múltiple en las clases. A pesar de que los interfaces podrían resolver algunos problemas de la herencia múltiple, son animales bastantes diferentes. En particular.

·         No se pueden heredar variables desde un interface.
·         No se pueden heredar implementaciones de métodos desde un interface.
·         La herencia de un interface es independiente de la herencia de la clase--las clases que implementan el mismo interface pueden o no estar relacionadas a través del árbol de clases.
Definir un InterfacePara crear un Interface, se debe escribir tanto la declaración como el cuerpo del interface.declaraciondeInterface {
    cuerpodeInterface} La Declaración de Interface declara varios atributos del interface, como su nombre o si se extiende desde otro interface. El Cuerpo de Interface contiene las constantes y las declaraciones de métodos del Interface.
Como mínimo, una declaración de interface contiene la palabra clave interface y el nombre del interface que se va a crear.
interface Contable {
    . . .
}
 
Una declaración de interface puede tener otros dos componentes: el especificador de accesopublic y una lista de "superinterfaces". Un interface puede extender otros interfaces como una clase puede extender o subclasificar otra case. Sin embargo, mientras que una clase sólo puede extender una superclase, los interfaces pueden extender de cualquier número de interfaces. Así, una declaración completa de interface se parecería a esto.
[public] interface Nombredenterface [extends listadeSuperInterfaces] {
    . . .
}
El especificador de acceso public indica que el interface puede ser utilizado por todas las clases en cualquier paquete. Si el interface no se especifica como público, sólo será accesible para las clases definidas en el mismo paquete que el interface.
La clausula extends es similar a la utilizada en la declaración de una clase, sin embargo, un interface puede extender varios interfaces (mientras una clase sólo puede extender una), y un interface no puede extender clases. Esta lista de superinterfaces es un lista delimitada por comas de todos los interfaces extendidos por el nuevo interface.
Un interface hereda todas las constantes y métodos de sus superinterfaces a menos que el interface oculte una constante con el mismo nombre o redeclare un método con una nueva declaración.
El cuerpo del interface contiene las declaraciones de métodos para los métodos definidos en el interface. Implementar Métodos muestra cómo escribir una declaración de método. Además de las declaraciones de los métodos, un interface puede contener declaraciones de constantes. En Declarar Variables Miembros existe más información sobre cómo construir una declaración de una variable miembro.
Todos los valores constantes definidos en un interface son implícitamente públicos, estáticos y finales. El uso de estos modificadores en una declaración de constante en un interface está desaconsejado por falta de estilo. Similarmente, todos los métodos declarados en un interface son implícitamente públicos y abstractos.
Este código define un nuevo interface llamado coleccion que contiene un valor constante y tres declaraciones de métodos.


interface coleccion {
    int MAXIMO = 500;
 
    void añadir(Object obj);
    void borrar(Object obj);
    Object buscar(Object obj);
    int contadorActual();
}


El interface anterior puede ser implementado por cualquier clase que represente una colección de objetos como pueden ser pilas, vectores, enlaces, etc...
Observa que cada declaración de método está seguida por un punto y coma (;) porque un interface no proporciona implementación para los métodos declarados dentro de él.
Utilizar un Interface
Para utilizar un interface se debe escribir una clase que lo implemente. Una clase declara todos los interfaces que implementa en su declaración de clase. Para declarar que una clase implementa uno o más interfaces, se utiliza la palabra clave implements seguida por una lista delimitada por comas con los interfaces implementados por la clase.
Por ejemplo, consideremos el interface coleccion presentado en la página anterior. Ahora, supongamos que queremos escribir una clase que implemente un pila FIFO (primero en entrar, primero en salir). Como una pila FIFO contiene otros objetos tiene sentido que implemente el interface coleccion. La clase PilaFIFO declara que implementa el interface coleccion de esta forma.


class PilaFIFO implements coleccion {
    . . .
    void añadir(Object obj) {
        . . .
    }
    void borrar(Object obj) {
        . . .
    }
    Object buscar(Object obj) {
        . . .
    }
    int contadorActual() {
        . . .
    }
}
así se garantiza que proporciona implementación para los métodos añadir(), borrar(), buscar()y contadorActual().
Por convención, la clausula implements sigue a la clausula extends si es que ésta existe.
Observa que las firmas de los métodos del interface coleccion implementados en la clase PilaFIFO debe corresponder exactamente con las firmas de los métodos declarados en la interface coleccion.

EJERCICIO PROPUESTO


1.       Confeccionar un programa que muestre 3 objetos de la clase JRadioButton que permitan configurar el ancho y alto del JFrame.
                                         

       
Importamos los dos paquetes donde están definidas las clases e interfaces para la captura de eventos:

import javax.swing.*;

import javax.swing.event.*;

//Heredamos de la clase JFrame e implementamos la interface ChangeListener para capturar el cambio de selección de objeto de tipo JRadioButton:

public class Formulario extends JFrame implements ChangeListener{

//Definimos tres objetos de la clase JRadioButton y uno de tipo ButtonGroup:

    private JRadioButton radio1,radio2,radio3;
    private ButtonGroup bg;

//En el constructor creamos primero el objeto de la clase ButtonGroup:
        bg=new ButtonGroup();

//Creamos seguidamente el objeto de la clase JRadioButton, definimos su ubicación, llamamos al método addChangeListener para informar que objeto capturará el evento y finalmente añadimos el objeto JRadioButton al JFrame y al ButtonGroup:

        radio1=new JRadioButton("640*480");
        radio1.setBounds(10,20,100,30);
        radio1.addChangeListener(this);
        add(radio1);
        bg.add(radio1);

//Exactamente hacemos lo mismo con los otros dos JRadioButton:

        radio2=new JRadioButton("800*600");
        radio2.setBounds(10,70,100,30);
        radio2.addChangeListener(this);       
        add(radio2);
        bg.add(radio2);
        radio3=new JRadioButton("1024*768");
        radio3.setBounds(10,120,100,30);
        radio3.addChangeListener(this);       
        add(radio3);
        bg.add(radio3);        

//En el método stateChanged verificamos cual de los tres JRadioButton está seleccionado y procedemos a redimensionar el JFrame:

    public void stateChanged(ChangeEvent e) {
        if (radio1.isSelected()) {
            setSize(640,480);
        }
        if (radio2.isSelected()) {
            setSize(800,600);
        }
        if (radio3.isSelected()) {
            setSize(1024,768);
        }       
    }


       Ejecutamos el programa:









Podemos observar que al elegir un RadioButton, cambia las dimensiones indicadas en el interfaz .



Ejercicios: Fecha


ventanaprincipal.java
package paqueteprincipal;

public class ventanaprincipal extends javax.swing.JFrame {
dialogofecha nacimiento;
    /**
     * Creates new form ventanaprincipal
     */
    public ventanaprincipal() {
        initComponents();
        nacimiento= new dialogofecha(null, true);
    }
   private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
        nacimiento.setVisible(true);//muestro el cuadro de dialogo
        if(nacimiento.getBotonPulsado()==0){//si pulso aceptar
            jLabel1.setText(nacimiento.getFecha());
            jLabel2.setText(nacimiento.getFechaCompleta());
        } else  {//si pulso cancelar
          jLabel1.setText("");
          jLabel2.setVisible(false);
        }                        
    }

dialogofecha.java
package paqueteprincipal;
public class dialogofecha extends javax.swing.JDialog {
int Dia;
int Mes;
int Anio;
int BotonPulsado;


public String getFecha(){
    String cadena;
    cadena=Dia+"/"+Mes+"/"+Anio;
    return cadena;
}
public String getFechaCompleta(){
    String cadena;
    cadena=Dia+ " de ";
    if(Mes==1){
     cadena=cadena+ "Enero";
    }else if(Mes==2){
    cadena=cadena+ "Febrero";
    }else if(Mes==3){
    cadena=cadena+ "Marzo";
    }else if(Mes==4){
    cadena=cadena+ "Abril";
    }else if(Mes==5){
    cadena=cadena+ "Mayo";
    }else if(Mes==6){
    cadena=cadena+ "Junio";
    }else if(Mes==7){
    cadena=cadena+ "Julio";
    }else if(Mes==8){
    cadena=cadena+ "Agosto";
    }else if(Mes==9){
    cadena=cadena+ "Setiembre";
    }else if(Mes==10){
    cadena=cadena+ "Octubre";
    }else if(Mes==11){
    cadena=cadena+ "Noviembre";
    }else if(Mes==12){
    cadena=cadena+ "Diciembre";
    }
    cadena=cadena+ " de "+Anio;
    return cadena;
    }
 
public int getBotonPulsado(){
return BotonPulsado;
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
        Dia=Integer.parseInt(jTextField1.getText());
        Mes=Integer.parseInt(jTextField2.getText());
        Anio=Integer.parseInt(jTextField3.getText());
        BotonPulsado=0;
        this.dispose();
    }                                      

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
        BotonPulsado=1;
        this.dispose();
    }
_______________________________________________________________________________

Una vez terminado el código la ejecución será de la sgte manera:

Pulsar el botón Introducir Fecha de Nacimiento


Ingresar una fecha de nacimiento
Se muestra la fecha ingresa en formato corto y largo
De nuevo en pulsamos el botón Introducir Fecha de Nacimiento
Pulsar el botón cancelar y notamos que se borro la etiqueta donde mostraba la fecha en formato largo







Ejercicio: Contadores

BotonContador.java

package paqueteprincipal;
import javax.swing.JButton;

public class BotonContador extends JButton {
    //propiedades
int pulsaciones;
        int pu;
   

//constructor
public BotonContador() {
pulsaciones=0;
               pu=0;
   
}

//asigna una cantidad de pulsaciones
public void setPulsaciones(int p) {
pulsaciones=p;
           
}
        public void setpu(int p) {
pu=p;
           
}
     
     

//devuelve las pulsaciones del botón
public int getPulsaciones() {
return pulsaciones;
             
}
        public int getpu() {
return pu;
             
}

//incrementa en uno las pulsaciones
public void incrementa() {
pulsaciones++;
             
}
        public void incrementa1() {

                pu=pu+2;
}

//decrementa en uno las pulsaciones
public void decrementa() {
pulsaciones--;
}

//pone las pulsaciones a cero
public void reiniciar() {
pulsaciones=0;
}
        public void reiniciar1() {
pu=0;
}
//        public void iniciar() {
//    
// pul=n;
//            
// }

//aumenta las pulsaciones en una cantidad c
public void aumenta(int c) {
pulsaciones=pulsaciones+c;
           
}
        public void aumenta1(int c) {

                pu=pu+c;
}

//disminuye las pulsaciones en una cantidad c
public void disminuye(int c) {
pulsaciones=pulsaciones-c;
}

 
}

ventanaprincipal.java
package paqueteprincipal;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class ventanaprincipal extends javax.swing.JFrame {
BotonContador btnBotonA;
BotonContador btnBotonB;
BotonContador btnBotonC;

    /**
     * Creates new form ventanaprincipal
     */
    public ventanaprincipal() {
        initComponents();
        CreacionVentana();
    }
public void CreacionVentana(){
    this.setTitle("Ejercicio de Herencia");
    this.setSize(450,300);
 
    btnBotonA= new BotonContador();
    btnBotonA.setText("Botón A");
    btnBotonA.setBounds(10,10,100,30);
    this.getContentPane().add(btnBotonA);
 
    btnBotonB= new BotonContador();
    btnBotonB.setText("Botón B");
    btnBotonB.setBounds(130,10,100,30);
    this.getContentPane().add(btnBotonB);
 
     btnBotonC= new BotonContador();
    btnBotonC.setText("Botón C");
    btnBotonC.setBounds(250,10,100,30);
    this.getContentPane().add(btnBotonC);
 
    btnBotonA.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent evt){
        PulsacionBotonA(evt);
    }
    });
    btnBotonB.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent evt){
        PulsacionBotonB(evt);
    }});
    btnBotonC.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent evt){
        PulsacionBotonC(evt);
    }});
 
}
 private void PulsacionBotonA(ActionEvent evt) {
            btnBotonA.incrementa();
        }
  private void PulsacionBotonB(ActionEvent evt) {
             btnBotonB.incrementa();
        }
  private void PulsacionBotonC(ActionEvent evt) {
             btnBotonC.incrementa1();
        }
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
        String info;
        info="El botón A se ha pulsado "+btnBotonA.getPulsaciones()+"\n";
        info=info+"El botón B se ha pulsado "+btnBotonB.getPulsaciones()+"\n";
        info=info+"El botón C se ha pulsado "+btnBotonC.getpu()+"\n";
        JOptionPane.showMessageDialog(null, info);
     
    }                                      

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
        btnBotonA.reiniciar();
        btnBotonB.reiniciar();
        btnBotonC.reiniciar1();
       jTextField1.setText("");
    }                                      

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
        int n;
        n=Integer.parseInt(jTextField1.getText());
         btnBotonA.setPulsaciones(n);
        btnBotonB.setPulsaciones(n);
        btnBotonC.setpu(n);
        JOptionPane.showMessageDialog(null, "El numero a iniciar es"+ n);
     
    }
________________________________________________________________________________
Una vez terminado el código la ejecución será de la sgte manera:

Pulsar los Botones A, B, C (2 veces)

Ver pulsaciones
Ingresar un número en la caja de texto

Pulsar el botón iniciar



Ver Pulsaciones, notamos que todos iniciaron con el número ingresado(8)
Pulsar los Botones A, B, C (2 veces
c/u)

Ver Pulsaciones
Botón Reiniciar
Ver Pulsaciones









Ejercicio: Multicine



SalaCine
package paqueteprincipal;


public class SalaCine {
    int Aforo;
    int Ocupadas;
    String Pelicula;
    double Entrada;
   
    /** Creates a new instance of SalaCine */
    //Constructor
    public SalaCine() {
        Aforo = 100;
        Ocupadas = 0;
        Pelicula = "";
        Entrada = 5.0;
    }
    //Métodos set

    //Método setAforo
    public void setAforo(int afo) {
            Aforo = afo;
    }

    //Método setOcupadas
    public void setOcupadas(int ocu) {
            Ocupadas = ocu;
    }

    //Método setPelicula
    public void setPelicula(String peli) {
            Pelicula = peli;
    }

    //Método setEntrada
    public void setEntrada(double entra) {
            Entrada = entra;
    }

    //Método setLibres
    public void setLibres(int lib) {
            int ocu;
            ocu = Aforo - lib;
            Ocupadas = ocu;
    }
    //Métodos get

    //Método getAforo
    public int getAforo() {
        return Aforo;
    }

    //Método getOcupadas
    public int getOcupadas() {
        return Ocupadas;
    }

    //Método getPelicula
    public String getPelicula() {
        return Pelicula;
    }

    //Método getEntrada
    public double getEntrada() {
        return Entrada;
    }

    //Método getLibres
    public int getLibres() {
   int lib;
   lib = Aforo - Ocupadas;
   return lib;
    }
    //Método getPorcentaje
    public double getPorcentaje() {
        double por;
        por = (double) Ocupadas / (double) Aforo * 100.0;
        return por;
    }

    //Método getIngresos
    public double getIngresos() {
        double ingre;
        ingre = Ocupadas * Entrada;
        return ingre;
    }
   
    //Métodos de orden

    //Método Vaciar
    public void Vaciar() {
            Ocupadas = 0;
            Pelicula = "";
    }

    //Método entraUno
    public void entraUno() {
            Ocupadas++;
    }

}

ventanaprincipal

package paqueteprincipal;

import javax.swing.JOptionPane;
public class ventanaprincipal extends javax.swing.JFrame {
SalaCine central;
SalaCine vo;
    /**
     * Creates new form ventanaprincipal
     */
    public ventanaprincipal() {
        initComponents();
        central =new SalaCine();
        vo = new SalaCine();
        central.setAforo(500);
        central.setEntrada(8.0);
        vo.setAforo(80);
        vo.setEntrada(6.0);
    }
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
         String titulo;
        titulo=JOptionPane.showInputDialog(null,"Introduce el título de la película: ");
        central.setPelicula(titulo);
        jLabel5.setText(titulo);
        
    }                                        

    private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
        central.entraUno();
    }                                         

    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        String info;
        info="Sala Central \n";
        info= info +"Película: "+ central.getPelicula()+"\n";
        info= info +"Aforo: "+ central.getAforo()+"\n";
        info= info +"Ocupadas: "+ central.getOcupadas()+"\n";
        info= info +"Libres : "+ central.getLibres()+"\n";
        info= info +"Porcentaje Ocupación: "+ central.getPorcentaje()+"\n";
        JOptionPane.showMessageDialog(null, info);
    }                                        

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        central.Vaciar();
        jLabel5.setText("");
    }                                        

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        String info;
        info="Ingreso de la sala"+ central.getIngresos()+"euros";
        JOptionPane.showMessageDialog(null, info);
    }                                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
       vo.entraUno();
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
         String info;
        info="Sala Versión Original \n";
        info= info +"Película: "+ vo.getPelicula()+"\n";
        info= info +"Aforo: "+ vo.getAforo()+"\n";
        info= info +"Ocupadas: "+ vo.getOcupadas()+"\n";
        info= info +"Libres : "+ vo.getLibres()+"\n";
        info= info +"Porcentaje Ocupación: "+ vo.getPorcentaje()+"\n";
        JOptionPane.showMessageDialog(null, info);
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
         vo.Vaciar();
        jLabel2.setText("");
    }                                        

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        String info;
        info="Ingreso de la sala"+ vo.getIngresos()+"euros";
        JOptionPane.showMessageDialog(null, info);
    }                                        

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        String titulo;
        titulo=JOptionPane.showInputDialog(null,"Introduce el título de la película: ");
        vo.setPelicula(titulo);
        jLabel2.setText(titulo);
    }                                        

    private void jButton11ActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
       
         String sum;
        sum= vo.getIngresos()+central.getIngresos()+ "euros, totales";
        
        JOptionPane.showMessageDialog(null, sum);
  
    }
_________________________________________________________________________________
Una vez terminado el código la ejecución será de la sgte manera:




                                        Asignar una película a la sala central y/o Versión original

vende algunas entradas(2 pulsaciones)
 comprueba el porcentaje de ocupación
comprueba los ingresos
Lo mismo para la Sala Versión Original
Ahora el botón Ingresos totales
botón Vaciar