Professional Documents
Culture Documents
Cuadros de Diálogo
Un cuadro de diálogo es un cuadro con opciones que aparece normalmente cuando se activa una
opción del menú principal del programa.
Los cuadros de diálogo tienen forma de ventana aunque no poseen algunas características de
estas. Por ejemplo, no pueden ser minimizados ni maximizados.
Los cuadros de diálogo, aparte de las opciones que muestran, suelen contener dos botones típicos:
el botón Aceptar y el botón Cancelar. El primero de ellos da por válidas las opciones elegidas y
cierra el cuadro de diálogo. El segundo simplemente cierra el cuadro de diálogo sin hacer ninguna
modificación.
He aquí algunos ejemplos de cuadros de diálogo del programa Word:
Para crear cuadros de diálogo en Java, se usa un tipo de clase llamada JDialog. Estos objetos
pueden ser diseñados como si fueran ventanas, aunque representan realmente cuadros de diálogo.
1
IESTP “Ayaviri” Computación e Informática IV - Semestre
Ejercicio:
aspecto:
aplicar. Estos dos valores serán variables globales, ya que se usarán en distintos lugares del
programa.
6. Así pues entra en el código y declara una variable global igv y otra descuentotal
como se indica a continuación (recuerda que las variables globales se colocan justo después
de la línea donde se define la clase principal public class):
2
IESTP “Ayaviri” Computación e Informática IV - Semestre
7. Cuando el programa arranque, interesará que el igv por defecto sea 0, y que
el descuento por defecto sea 0 también, así que en el método constructor, inicializaremos
las variables globales igv y descuento a 0:
double unidades;
double precio;
double total;
double igvImporte;
double descuentoImporte;
double totalSinIgv;
3
IESTP “Ayaviri” Computación e Informática IV - Semestre
11. Para añadir un cuadro de diálogo al proyecto, se tiene que añadir un objeto del
tipo JDialog sobre el JFrame.
12. Los JDialog son objetos ocultos, es decir, objetos que se colocan en la parte del
Inspector llamada Otros Componentes, al igual que sucede con los menús contextuales o
los JFileChooser. Observa el inspector, allí verás el JDialog que has añadido:
14. Los cuadros de diálogo generalmente traen por defecto el layout BorderLayout.
Para nuestro ejemplo cambiaremos el layout del JDialog por el Diseño Libre:
4
IESTP “Ayaviri” Computación e Informática IV - Semestre
15. Los JDialog se pueden diseñar independientemente, al igual que los JPanel. Solo
tienes que hacer doble clic sobre el dialogoConfiguracion (en el inspector) y este aparecerá
en el centro de la ventana.
16. Así pues debes diseñar el dialogoConfiguracion para que quede de la siguiente forma:
5
IESTP “Ayaviri” Computación e Informática IV - Semestre
dialogoConfiguracion.setSize(300, 220);
dialogoConfiguracion.setLocation(100, 100);
dialogoConfiguracion.setVisible(true);
- A través del método setSize se asigna un tamaño de 300 x 220 al cuadro de diálogo.
- A través del método setLocation se determina que el cuadro de diálogo aparecerá en
20. Ejecuta el programa y observa lo que sucede cuando pulsas el botón Configuración
… . Debería aparecer el cuadro de diálogo en la posición establecida y con el tamaño
definido:
21. Los botones Aceptar y Cancelar del cuadro de diálogo aún no hacen nada. Así que
los programaremos. Empezaremos por el más sencillo, el botón Cancelar.
dialogoConfiguracion.dispose();
6
IESTP “Ayaviri” Computación e Informática IV - Semestre
El método dispose se usa para cerrar un cuadro de diálogo. También se puede usar para
cerrar un JFrame.
24. Ahora programaremos el botón Aceptar. Cuando el usuario pulse este botón, se
actualizará el valor del igv y del descuento por los que haya introducido. Es decir, se
Una vez que se haya hecho esto, el cuadro de diálogo se debe cerrar.
igv = Double.parseDouble(txtPorcentajeIgv.getText());
descuento = Double.parseDouble(txtPorcentajeDescuento.getText());
dialogoConfiguracion.dispose();
26. Observe el código. Primero se traspasa los valores de los cuadros de texto a las
variables globales y luego se cierra el cuadro de diálogo.
a. Ejecute el programa.
c. Si pulsa calcular, el total será 100. (No hay ni igv ni descuento al empezar
el programa)
7
IESTP “Ayaviri” Computación e Informática IV - Semestre
8
IESTP “Ayaviri” Computación e Informática IV - Semestre
e. A veces, puede ser interesante que se active la ventana pero que el cuadro
de diálogo siga delante de ella. Para conseguir esto, es necesario activar la
propiedad del cuadro de diálogo llamada alwaysOnTop. Activa esta propiedad:
Un cuadro de diálogo modal es aquel que no permite que se active otra ventana
hasta que este no se haya cerrado.
33. Para convertir nuestro cuadro de diálogo en modal, será necesario que lo selecciones
en el inspector y busques la propiedad modal. Debes activar esta propiedad.
9
IESTP “Ayaviri” Computación e Informática IV - Semestre
b. A continuación intenta activar la ventana haciendo clic sobre ella. Verás que
no es posible activarla. Es más, intenta escribir en sus cuadros de texto. No será
posible hacerlo. (Incluso observarás un parpadeo en el cuadro de diálogo avisándote
de ello). Esto es debido a que ahora nuestro cuadro de diálogo es modal.
CONCLUSIONES:
Los Cuadros de Diálogo son ventanas simplificadas que muestran distintas opciones al usuario.
La clase JDialog es la que permiten la creación y uso de cuadros de diálogo en un proyecto java.
Para visualizar un JDialog será necesario llamar a su método setVisible. También son interesantes
los métodos setSize para asignarles un tamaño y setLocation para situar el cuadro de diálogo en
la pantalla.
Para cerrar un JDialog será necesario invocar a su método dispose.
Existen dos tipos de cuadros de diálogo: los modales y no modales.
Los cuadros de diálogo modales no permiten que se active otra ventana hasta que el cuadro de
diálogo se haya cerrado.
Los cuadros de diálogo no modales permiten trabajar con otra ventana a pesar de que el propio
cuadro de diálogo no haya sido cerrado.
10
IESTP “Ayaviri” Computación e Informática IV - Semestre
La Ventana de Diseño
La ventana de diseño es una gran herramienta que nos permite diseñar formularios de forma
relativamente sencilla. Simplemente tenemos que añadir los componentes del formulario: botones,
etiquetas, cuadros de texto, etc, y cambiar sus propiedades según nos interese.
Todo esto tiene un código asociado que se genera de forma automática, y del que no nos hemos
preocupado hasta el momento.
Por ejemplo, cada vez que añades un botón o una etiqueta, se generan automáticamente las
instrucciones de código que permiten crear dicho botón o dicha etiqueta. También se genera el
código que permite cambiar el texto del botón, o cambiar el texto de la etiqueta.
Ejercicio N° 1:
7. Todas estas operaciones que has realizado tienen asociado unas instrucciones de
código que se han generado automáticamente. Para estudiar estas instrucciones, activa el
botón Origen (Source) en la parte superior de la pantalla:
11
IESTP “Ayaviri” Computación e Informática IV - Semestre
8. En el código, observarás una línea llamada Código Generado (Generated Code). Esta
línea está encerrada por un rectángulo. Observarás que tiene un +en la parte izquierda. Si
haces clic sobre el signo + aparecerá el código generado automáticamente:
12
IESTP “Ayaviri” Computación e Informática IV - Semestre
En esta explicación guiada, se diseñará el formulario entero directamente desde código, sin usar
la ventana de diseño. De esta forma, se podrá entender mejor la generación de código del
NetBeans y se tendrá más control sobre los componentes.
Ejercicio N° 2:
13
IESTP “Ayaviri” Computación e Informática IV - Semestre
14
IESTP “Ayaviri” Computación e Informática IV - Semestre
El constructor se puede distinguir fácilmente porque tiene el mismo nombre que la clase. En
nuestro ejemplo, VentanaInicial.
El contenido del método initComponents no resulta interesante para el ejercicio que estamos
realizando, así que puedes ocultar de nuevo el Código Generado, haciendo clic en el símbolo menos
(-).
9. Otro método importante que hay que mencionar es el método main. Este método
es el que se ejecuta cuando arranca el programa. Se puede decir que el programa parte
de aquí.
15
IESTP “Ayaviri” Computación e Informática IV - Semestre
genera automáticamente el método main, de forma que no tendremos que hacer cambios en él.
Vamos ahora a diseñar la ventana de nuestro programa (sin usar la ventana de diseño, solo a
partir de código). Al final de esta explicación, la ventana del proyecto tendrá el siguiente aspecto:
16
IESTP “Ayaviri” Computación e Informática IV - Semestre
(100,100) de la pantalla.
12. Para que esto tenga efecto, es necesario que el método creacionVentana sea llamado
desde el método constructor, al igual que sucede con el métodoinitComponents:
17
IESTP “Ayaviri” Computación e Informática IV - Semestre
Al comienzo de la clase, después del public class, donde se suelen definir las variables globales,
Este código declara una variable de tipo JLabel (etiqueta) y le da el nombre etiNumero1.
15. Al escribir este código, aparecerá un error en la línea, ya que será necesario
importar la biblioteca donde se encuentra el tipo de objeto JLabel. Podrás usar la bombilla
del NetBeans para agregar el import correspondiente automáticamente.
16. Los imports aparecerán en la parte superior del código. Puedes observarlo:
- La primera línea construye la etiqueta llamada etiNumero1 que fue declarada antes.
tipoObjeto nombreObjeto;
18
IESTP “Ayaviri” Computación e Informática IV - Semestre
etiNumero1.setText("Número 1:");
- Hay que definir la posición que tendrá el objeto y el tamaño. Para ello, se usará el
método setBounds. Este método recibe la posición (x, y) del objeto y el ancho y el
this.getContentPane().add(etiNumero1);
19. Es buena idea que ejecutes el programa para ver el aspecto de la ventana ahora.
20. Hemos añadido una etiqueta. Ahora añadiremos la siguiente. Para ello, primero
tienes que declarar la etiqueta en la zona de las variables globales:
19
IESTP “Ayaviri” Computación e Informática IV - Semestre
20
IESTP “Ayaviri” Computación e Informática IV - Semestre
29. Y ahora añade el código que construye el objeto en el método creacionVentana. Este
código es similar al del cuadro de texto anterior. Solo cambia el nombre del objeto y la
posición donde se colocará:
31. Ahora le toca el turno a los botones. Primero declararemos una variable del
tipo JButton en la zona de variables globales (será necesario añadir el import
correspondiente a la clase JButton a través de la bombilla). El botón se llamará btnSumar:
21
IESTP “Ayaviri” Computación e Informática IV - Semestre
35. Ahora se añadirá otro botón llamado btnRestar. Declara la variable JButton:
37. El código es prácticamente igual que el del primer botón. Solo cambia el nombre
del botón, el texto, la posición y tamaño del botón.
CONCLUSIONES:
Es posible prescindir de la ventana de diseño y realizar todo el diseño de la ventana desde código.
El diseño de la ventana se tiene que hacer en el método constructor de la clase.
Los componentes de una ventana son variables globales cuyo tipo se corresponde a distintas clases
de objetos: JLabel, JTextField, JButton, etc.
Para construir un objeto hay que declararlo como una variable global:
TipoObjeto nombreObjeto;
Y luego, dentro de la clase, construirlo, usando la siguiente sintaxis:
nombreObjeto = new TipoObjeto();
Luego se pueden usar distintos métodos del objeto para trabajar con él.
22
IESTP “Ayaviri” Computación e Informática IV - Semestre
Programación de eventos
La programación de eventos es compleja, ya que cada evento pertenece a un oyente/adaptador,
y a su vez, hay que asociar cada oyente/adaptador al componente que responde al evento.
Por otro lado, la sintaxis de programación para los eventos es distinta a lo que se ha visto hasta
ahora, por lo que puede resultar bastante oscura, aunque por otro lado, siempre sigue el mismo
patrón.
Para simplificar el estudio de la programación de eventos, nos limitaremos a los eventos más
usados, los cuales pueden clasificarse en los siguientes grupos:
- Eventos de Acción:
o actionPerformed
Activar un componente (pulsación de botón, enter en un cuadro de texto)
- Eventos de Teclado:
o keyPressed
Se pulsó una tecla, pero no se soltó.
o keyReleased
Se soltó una tecla.
o keyTyped
Se pulsó y soltó una tecla.
23
IESTP “Ayaviri” Computación e Informática IV - Semestre
- Eventos de Ratón:
o mousePressed
Se pulsó un botón del ratón.
o mouseReleased
Se soltó un botón del ratón.
o mousePressed
Se pulsó y soltó un botón del ratón.
o mouseEntered
El ratón entró en la superficie del control.
o mouseExited
El ratón salió de la superficie del control.
- Eventos de Ventana:
o windowOpened
Se abrió la ventana
o windowClosing
Se cerró la ventana
o windowActivated
Se activó la ventana
o windowDeactivated
Se desactivó la ventana
Eventos de Acción:
Eventos Oyente/Adaptador
24
IESTP “Ayaviri” Computación e Informática IV - Semestre
yyy.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
yyyActionPerformed(evt);
}
});
btnSumar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btnSumarActionPerformed(evt);
}
});
25
IESTP “Ayaviri” Computación e Informática IV - Semestre
A pesar de lo complicado que resulta, hay que tener en cuenta que siempre se programa de la
misma forma. Solo hay que cambiar el componente que se quiere programar y asignar un nombre
al método donde se programará el evento.
Hay que tener en cuenta que en el código expuesto antes participan nuevas clases como
son ActionEvent y ActionListener, y se tendrán que agregar los import correspondientes.
EJERCICIO:
3. El objetivo del ejercicio es programar la pulsación del botón btnSumar para que
aparezca un JOptionPane con la suma calculada. Luego haremos lo mismo con el
botón btnRestar. Todo esto se hará desde código.
4. Para recordar, he aquí el código programado hasta ahora. Tenemos una llamada
desde el método constructor a un método creacionVentana donde diseñamos cada uno de
los elementos de la ventana:
/**
* Creates new form VentanaInicial
*/
public VentanaInicial() {
initComponents();
creacionVentana();
}
26
IESTP “Ayaviri” Computación e Informática IV - Semestre
this.getContentPane().add(etiNumero1);
btnSumar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btnSumarActionPerformed(evt);
}
});
(Recuerda que el código es siempre igual, solo hay que indicar el nombre del botón y el nombre
del procedimiento al que se llama).
27
IESTP “Ayaviri” Computación e Informática IV - Semestre
Así pues, añade el siguiente procedimiento a la clase. (No te vayas a equivocar, el siguiente código
está fuera del método creacionVentana).
9. Bien, hemos programado la pulsación del botón Sumar. Hemos seguido dos pasos:
28
IESTP “Ayaviri” Computación e Informática IV - Semestre
btnRestar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btnRestarActionPerformed(evt);
}
});
(Observa que es idéntico al código de asignación del evento del botónbtnSumar, sólo cambia el
13. Resumiendo una vez más. Para programar un evento sobre un componente,
primero hay que enlazar el oyente del evento con el componente, y luego programar el
método al que llama el evento. Observa el código que hemos programado:
29
IESTP “Ayaviri” Computación e Informática IV - Semestre
CONCLUSIONES:
Cada evento pertenece a un objeto oyente, y es el oyente el que se asigna al componente de la
ventana que se quiere programar.
El evento actionPerformed pertenece al oyente ActionListener.
Para enlazar el oyente ActionListener a un componente YYY hay que usar el siguiente código:
YYY.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
YYYActionPerformed(evt);
}
});
30
IESTP “Ayaviri” Computación e Informática IV - Semestre
- mouseEntered
Indica que el puntero del ratón entró en la superficie del elemento (etiqueta, botón, etc)
- mouseExited
Indica que el puntero del ratón salió de la superficie del elemento (etiqueta, botón, etc)
- mousePressed
Indica que un botón del ratón ha sido presionado sobre el elemento.
- mouseReleased
Indica que un botón del ratón ha sido soltado sobre el elemento.
- mouseClicked
Indica que se ha pulsado y soltado un botón del ratón.
Como se dijo en la hoja anterior, todos los eventos pertenecen a un objeto “oyente” o
“adaptador”. En este caso concreto, todos los eventos del ratón pertenecen a un objeto
“adaptador” llamado MouseAdapter.
Cada uno de los eventos se programará dentro del adaptador MouseAdapter. Cada evento es en
realidad un procedimiento que recibe un parámetro con información sobre el evento. Este
parámetro, en el caso de los eventos del ratón, es del tipo MouseEvent.
Cada evento a su vez hace una llamada a un método, y es en este procedimiento donde realmente
se programa la respuesta al evento.
Todo esto resulta complicado al principio, pero verás que en realidad siempre es igual. Solo hay
que conocer el nombre de cada evento, el adaptador u oyente al que pertenece y el tipo de
parámetro que recibe cada evento.
31
IESTP “Ayaviri” Computación e Informática IV - Semestre
YYY.addMouseListener(new MouseAdapter() {
});
Veamos este mismo código comentado:
32
IESTP “Ayaviri” Computación e Informática IV - Semestre
EJERCICIO:
33
IESTP “Ayaviri” Computación e Informática IV - Semestre
7. El objetivo del programa es simple. Queremos que al entrar el puntero del ratón
dentro de la superficie de la etiqueta azul, aparezca un mensaje en la otra etiqueta
indicándolo. También queremos que aparezca un mensaje cuando sale el puntero del ratón
de la etiqueta. Y también al pulsar un botón del ratón sobre dicha etiqueta.
8. Para hacer esto, necesitamos crear un MouseAdapter que contenga los siguientes
eventos: mouseEntered, mouseExited y mousePressed. Observa que no es necesario que
contenga el mouseReleased ni elmouseClicked.
d. Es normal que las llamadas a los procedimientos de cada evento den error
(subrayado con líneas rojas) ya que todavía no han sido programados.
34
IESTP “Ayaviri” Computación e Informática IV - Semestre
11. Ahora se programará cada procedimiento que es llamado desde cada evento.
Recuerda que esto debe hacerse fuera del método creacionVentana. Aquí tienes lo que
debes programar:
13. Vamos a añadir una pequeña mejora que nos servirá para estudiar ese objeto
llamado evt del tipo MouseEvent que llevan todos los eventos de ratón como parámetro.
Se dijo antes que este parámetro contiene información sobre la acción del ratón. Por ejemplo,
nos puede servir para saber cuantas veces se pulsó el ratón, con qué botón, etc. Aprovecharemos
este parámetro para indicar qué botón del ratón es el que se ha pulsado sobre la etiqueta.
14. En el código anterior aprovechamos los métodos que tiene el objeto evt para
averiguar que botón se ha pulsado. Usamos el método getButton que nos dice el botón
pulsado. Aprovechamos las constantes de la clase MouseEvent para saber si se pulsó el
botón izquierdo, central o derecho.
35
IESTP “Ayaviri” Computación e Informática IV - Semestre
CONCLUSIONES:
Hay grupos de eventos que pertenecen a un mismo oyente o adaptador. Por ejemplo, los eventos
de ratón pertenecen al adaptador llamado MouseAdapter.
Si se quiere asignar eventos de ratón a un componente YYY, hay que usar el siguiente código:
YYY.addMouseListener(new MouseAdapter() {
Ten en cuenta que solo añades al adaptador aquellos eventos que necesites.
Cada evento de ratón lleva como parámetro un objeto evt del tipo MouseEvent que contiene
información sobre el evento ocurrido (qué botón del ratón se pulsó, cuantas veces, etc.).
36
IESTP “Ayaviri” Computación e Informática IV - Semestre
Se finalizará el estudio de los eventos desde código, planteando de forma general el código
necesario para programarlos.
A la hora de programar eventos sobre un componente concreto, será necesario tener en cuenta
lo siguiente:
- Primero hay que enlazar el componente con el oyente o adaptador correspondiente al
evento.
- El oyente o adaptador contendrá aquellos eventos que interesen programar.
- Cada evento tiene un parámetro asociado con información sobre el evento.
- Cada evento realiza una llamada a un método y es en este método donde se programa
la respuesta al evento.
Componente.MetodoParaAñadirOyente(new TipoOyente() {
...otros eventos...
});
Para poder programar un evento es necesario conocer lo siguiente:
- El componente sobre el que se programará.
- El tipo oyente o adaptador al que pertenece el evento.
- El método usado para asignar el oyente al componente.
- El nombre del evento.
- El tipo de evento para el parámetro.
37
IESTP “Ayaviri” Computación e Informática IV - Semestre
etiMensaje.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent evt) {
etiMensajeMouseEntered(evt);
}
Los eventos de teclado controlan las pulsaciones de tecla. Entre ellos, podemos mencionar a los
siguientes:
- keyPressed, que define la pulsación de una tecla.
- keyReleased, que define el momento en que se suelta una tecla.
- keyTyped, que define el pulsar-soltar una tecla.
txtDato.addKeyListener(new KeyAdapter() {
});
38
IESTP “Ayaviri” Computación e Informática IV - Semestre
Como puedes observar, la programación de eventos siempre se hace de la misma forma, solo
tienes que conocer el adaptador/oyente, el método para asignar dicho adaptador/oyente, el
nombre de los eventos, y el tipo de objeto que llevan como parámetro.
Sabiendo estos datos, la programación siempre se hace igual.
El problema que se plantea en cambio es el siguiente:
Si surge un nuevo evento YY el cual quiero usar desde código, ¿cómo puedo saber cuál es su
adaptador/oyente, el método para asignar dicho adaptador/oyente al componente, y el tipo de
datos del parámetro?
Para este caso, se aconseja crear un proyecto de prueba desde la ventana de diseño y asignar el
evento YY que se quiere estudiar a un componente. Luego simplemente hay que analizar el código
generado por el NetBeans.
CONCLUSIONES:
Componente.MetodoParaAñadirOyente(new NombreOyenteAdaptador() {
Se puede aprender mucho sobre los eventos asociándolos desde diseño y luego mirando en el
código generado.
39
IESTP “Ayaviri” Computación e Informática IV - Semestre
Declaración de un vector:
Para declarar un vector se seguirá la siguiente sintaxis:
tipoDatos nombreVector[];
tipoDatos es el tipo de datos de los elementos del vector (int, double, String, etc.)
nombreVector es el nombre que tú quieras darle a tu vector.
Por ejemplo, supongamos que queremos crear un vector de enteros llamado v. La declaración
será la siguiente:
int v[];
Construcción de un vector:
Para construir un vector que ya haya sido declarado se sigue la siguiente sintaxis:
nombreVector = new tipoDatos[dim];
Por ejemplo, si queremos que el vector v declarado antes tenga 10 elementos, tendremos que
hacer lo siguiente:
v = new int[10];
En el momento de la construcción del vector, podemos usar una variable entera para asignar el
número de elementos que se quiera.
Por ejemplo, en el siguiente caso el número de elementos del vector v viene dado por la
variable num:
v = new int[num];
40
IESTP “Ayaviri” Computación e Informática IV - Semestre
Ejemplo N° 1:
etiMensaje.setText("El Valor es: " + v[6]);
Aquí se coloca en una etiqueta el valor contenido en la sétima posición del vector v.
Ejemplo N° 2:
for (int i = 0; i < 10; i++) {
v[i] = 100;
}
Longitud de un vector:
Una forma rápida de saber la longitud que tiene un vector es usar lo siguiente:
nombreVector.length
Por ejemplo, si el vector se llama v, su longitud (el número de elementos que tiene) sería:
v.length
El siguiente código rellena el vector v con ceros, da igual el número de elementos que tenga:
for (int i = 0; i < v.length; i++) {
v[i] = 0;
}
Por ejemplo:
int v[] = {6, 3, 1, 2};
Este código crea un vector con cuatro números enteros: 6, 3, 1, 2.
Ejemplo 2:
String coloresArcoiris[] = {"Rojo", "Naranja", "Amarillo", "Verde", "Azul",
"Añil", "Violeta"};
Este código crea un vector que contiene 7 cadenas, correspondientes a los colores del arcoíris.
VECTORES DE COMPONENTES:
En Java, se pueden crear vectores de etiquetas, cuadros de texto, botones, etc.
Esto es tremendamente útil cuando se tienen que definir muchos componentes con una función
parecida, y que tengan que ser tratados en conjunto.
41
IESTP “Ayaviri” Computación e Informática IV - Semestre
Por otro lado, nos ahorra mucho tiempo ya que no se tienen que diseñar estos elementos en la
misma ventana de diseño.
Los vectores de componentes se usan igual que se ha indicado antes. Observa el siguiente ejemplo:
JLabel vectorEtiquetas[]; //aquí se crea un vector de etiquetas llamado
vectorEtiquetas
//ahora trabajamos con las etiquetas del vector usando el bucle for
for (int i = 0; i < vectorEtiquetas.length; i++) {
vectorEtiquetas[i] = new JLabel(); //se construye cada etiqueta
vectorEtiquetas[i].setBounds(10, 10 + i * 30, 100, 20); //se asigna posición
y tamaño
vectorEtiquetas[i].setText("Etiqueta " + i); //se asigna un texto
this.getContentPane().add(vectorEtiquetas[i]);//se coloca en la ventana
}
Ejercicio:
1. Crea un nuevo proyecto en java.
2. Empecemos definiendo desde código las características de la ventana. Crearemos el
método crearVentana, y lo llamaremos desde el método constructor del proyecto:
42
IESTP “Ayaviri” Computación e Informática IV - Semestre
43
IESTP “Ayaviri” Computación e Informática IV - Semestre
8. Mejoremos la presentación de los cuadros cambiando los rótulos de cada uno. Para
ello, será necesario usar otro vector auxiliar que contenga los textos de cada uno de los
cuadros. Modifica el código anterior de forma que quede así:
9. En este código puedes observar como se usa un vector de String que se crea
conteniendo 10 colores. Luego, ese vector se usa para asignar cada color al texto de cada
cuadro. Si ejecutas el programa, verás que cada cuadro tiene su texto correspondiente a
un color.
44
IESTP “Ayaviri” Computación e Informática IV - Semestre
12. En este código se puede observar como se usa un bucle for para recorrer fácilmente
el vector de cuadros y averiguar cuáles de ellos están seleccionados. Aumentamos un
contador y lo demás es sencillo.
Si este programa se hubiera hecho desde diseño, el código para contar el número de cuadros
seleccionados sería mucho más engorroso. Piénsalo.
13. Ejecuta el programa. Selecciona varios cuadros y pulsa el botón Aceptar. Observa
el resultado:
45
IESTP “Ayaviri” Computación e Informática IV - Semestre
CONCLUSIONES:
En Java, los vectores deben declararse y luego construirse. Es en la construcción del vector cuando
se le asigna a este el número de elementos.
Los vectores en Java pueden ser usados de la misma forma que en el lenguaje de programación
C.
En Java se pueden crear vectores de componentes: etiquetas, cuadros de texto, botones, etc.
facilitando luego el trabajo con todos estos elementos en conjunto y facilitando las labores de
diseño.
46
IESTP “Ayaviri” Computación e Informática IV - Semestre
Ejercicio:
1. Crea un proyecto en java.
47
IESTP “Ayaviri” Computación e Informática IV - Semestre
Este código asigna a cada botón un evento actionPerformed que hace una llamada a un método
al que he llamado botonActionPerformed. (Esta llamada da error porque aún no ha sido
programado dicho evento. Esto se hará a continuación.)
Hay que tener en cuenta que cuando se pulse cualquiera de los botones, se ejecutará el
método botonActionPerformed. Programa este procedimiento (fuera de crearVentana, por
supuesto) de la siguiente forma:
El método botonActionPerformed sirve como respuesta para todos los botones. El problema que
plantea esto es, ¿cómo saber qué botón se ha pulsado? Es aquí donde entra en funcionamiento el
parámetroae (ActionEvent) que suelen llevar todos los eventos.
9. Modifica el método botonActionPerformed de forma que quede así:
48
IESTP “Ayaviri” Computación e Informática IV - Semestre
10. Ejecuta el programa y observa el resultado, por ejemplo al pulsar el botón Aplicar
se muestra lo siguiente:
CONCLUSIONES:
Se pueden asignar eventos a los elementos de un vector a través de un bucle for que recorra los
distintos elementos del vector y le asigne el evento o eventos necesarios.
Cuando se asigna un mismo método de respuesta a eventos de varios componentes, es necesario
usar el parámetro ae (ActionEvent) junto con el método getSource para averiguar el componente
sobre el que ha sucedido el evento.
La forma general de acceder al elemento sobre el que sucedió el evento es la siguiente:
49
IESTP “Ayaviri” Computación e Informática IV - Semestre
OBJETO:
Un objeto se define como un elemento que tiene unas propiedades y métodos.
Un objeto posee unas características (ancho, alto, color, etc…). A las características de un objeto
se les llama propiedades.
Un objeto es un elemento “inteligente”. A un objeto se le puede dar órdenes y él obedecerá. A
estas órdenes se les llama métodos. Con los métodos podemos cambiar las características del
objeto, pedirle información, o hacer que el objeto reaccione de alguna forma.
En Java todo son objetos. Veamos algunos ejemplos de uso de objetos en Java:
Ejemplo N° 1:
Supongamos que tenemos una etiqueta llamada etiTexto. Esta etiqueta es un objeto.
Como objeto que es, la etiqueta etiTexto tiene una serie de características, como por ejemplo: el
color de fondo, el tamaño, la posición que ocupa en la ventana, el ser opaca o no, el ser invisible
o no, etc… Son las propiedades de la etiqueta.
A una etiqueta le podemos dar órdenes, a través de sus métodos.
A través de los métodos podemos por ejemplo cambiar las características del objeto. Por ejemplo,
se puede cambiar el tamaño y posición de la etiqueta usando el método setBounds:
etiTexto.setBounds(20,20,100,30);
Normalmente, los métodos que permiten cambiar las características del objeto son métodos cuyo
nombre empieza por set.
Los métodos también permiten pedirle al objeto que dé información. Por ejemplo, podríamos
usar el conocido método getText para recoger el texto que contenga la etiqueta y almacenarlo en
una variable:
String texto;
texto = etiTexto.getText();
Los métodos que le piden información al objeto suelen tener un nombre que empieza por get.
Los métodos también sirven para ordenarle al objeto que haga cosas. Por ejemplo, podemos
ordenar a la etiqueta etiTexto que no se muestre en la ventana usando el método setVisible:
50
IESTP “Ayaviri” Computación e Informática IV - Semestre
etiTexto.setVisible(false);
Ejemplo N° 2:
Supongamos que tenemos un cuadro de texto llamado txtCuadro. Como todo en Java, un cuadro
de texto es un objeto.
Un objeto tiene propiedades, es decir, características. Nuestro cuadro de textotxtCuadro tiene
características propias: un color de fondo, un ancho, un alto, una posición en la ventana, el estar
activado o no, el estar visible o no, etc…
A un objeto se le puede dar órdenes, llamadas métodos. Estas órdenes nos permiten cambiar las
características del objeto, pedirle información, o simplemente pedirle al objeto que haga algo.
Por ejemplo, podemos cambiar el color de fondo del cuadro de texto txtCuadrousando el método
llamado setBackground:
txtCuadro.setBackground(Color.BLUE);
Otros métodos que permiten cambiar las propiedades del objeto cuadro de textoson:
Un objeto nos da información sobre él. Para pedirle información a un objeto usaremos métodos
del tipo get. Por ejemplo, para pedirle al cuadro de texto el texto que contiene, usaremos el
método getText:
51
IESTP “Ayaviri” Computación e Informática IV - Semestre
También se le puede dar al objeto simplemente órdenes para que haga algo. Por ejemplo, podemos
ordenar al cuadro de texto txtCuadro que seleccione todo el texto que contiene en su interior a
través del método selectAll:
txtCuadro.selectAll();
CLASE:
Todo objeto es de una “clase” determinada, o dicho de otra forma, tiene un “tipo de datos”
determinado.
Por ejemplo, las etiquetas que se usan en las ventanas son objetos que pertenecen a la clase JLabel.
Los cuadros de texto en cambio son objetos de la clase JTextField.
Para poder usar un objeto hay que declararlo y construirlo.
Declaración de un Objeto:
La declaración de un objeto es algo similar a la declaración de una variable. Es en este momento
cuando se le da un nombre al objeto. Para declarar un objeto se sigue la siguiente sintaxis:
Clase nombreObjeto;
Por ejemplo, para declarar la etiqueta del ejemplo N° 1, se usará el siguiente código:
JLabel etiTexto;
Para declarar, en cambio, el cuadro de texto del ejemplo N° 2, se usará el siguiente código:
JTextField txtCuadro;
Construcción de un Objeto:
En el momento de la “construcción” de un objeto, se le asignan a este una serie de propiedades
iniciales. Es decir, unas características por defecto. Se puede decir que es el momento en que
“nace” el objeto, y este nace ya con una forma predeterminada, que luego el programador podrá
cambiar usando los métodos del objeto.
Es necesario construir el objeto para poder usarlo. La construcción del objeto se hace a través del
siguiente código general:
52
IESTP “Ayaviri” Computación e Informática IV - Semestre
NOTA: En algunos casos, la sintaxis de la declaración y la construcción se une en una sola línea.
Por ejemplo, supongamos que queremos declarar la etiqueta etiTexto y construirla todo en una
línea, entonces se hará lo siguiente:
En general, para declarar y construir un objeto en una sola línea se sigue la siguiente sintaxis:
etiTexto.setBackground(Color.RED);
etiTexto.setText(“Hola”);
etiResultado.setBackground(Color.GREEN);
etiResultado.setText(“Error”);
etiMensaje.setBackground(Color.BLUE);
etiMensaje.setText(“Cadena”);
53
IESTP “Ayaviri” Computación e Informática IV - Semestre
- ¿Cuál es el nombre de la clase de los botones normales que usa en sus ventanas?
- ¿Cómo declararías un botón llamado btnAceptar, y otro llamado btnCancelar?
- ¿Cómo construirías dichos botones?
- Indica algunos métodos para cambiar propiedades de dichos botones (métodos set)
- Indica algunos métodos para pedirle información a dichos botones (métodosget)
- Indica algún método para dar órdenes a dichos botones (algún método que no sea ni set ni get)
CONCLUSIONES:
Declaración:
CLASE nombreObjeto;
Construcción:
nombreObjeto = new CLASE();
54
IESTP “Ayaviri” Computación e Informática IV - Semestre
Hasta el momento, todos los objetos que ha usado a la hora de programar en Java, han sido objetos
incluidos en el propio lenguaje, que se encuentran disponibles para que el programador los use en sus
programas.
Estos objetos son: las etiquetas (JLabel), botones (JButton), los cuadros de texto (JTextField), cuadros
de verificación (JCheckBox), botones de opción(JRadioButton), colores (Color), imágenes de
icono (ImageIcon), modelos de lista (DefaultListModel), etc..
Todos estos objetos, por supuesto, pertenecen cada uno de ellos a una Clase:
Las etiquetas son objetos de la clase JLabel, los botones son objetos de la clase JButton, etc.
Todos estos objetos tienen propiedades que pueden ser cambiadas en la ventana de diseño:
Aunque también poseen métodos que nos permiten cambiar estas propiedades durante la ejecución del
programa:
setText cambia el texto del objeto, setBackground cambia el color de fondo del objeto, setVisible hace
visible o invisible al objeto, setBounds cambia el tamaño y la posición del objeto, etc.
En cualquier momento le podemos pedir a un objeto que nos dé información sobre sí mismo usando los
métodos get:
getText obtenemos el texto que tenga el objeto, getWidth obtenemos la anchura del
objeto, getHeight obtenemos la altura del objeto, etc.
Los objetos son como “pequeños robots” a los que se les puede dar órdenes, usando los métodos que tienen
disponible.
Por ejemplo, le podemos decir a un objeto que se pinte de nuevo usando el método repaint, podemos
ordenarle a un cuadro de texto que coja el cursor, con el método grabFocus, etc.
Todos estos objetos, con sus propiedades y métodos, nos facilitan el desarrollo de nuestros programas.
Pero a medida que nos vamos introduciendo en el mundo de la programación y nos especializamos en un tipo
de programa en concreto, puede ser necesario la creación de objetos propios, programados por nosotros
mismos, de forma que puedan ser usados en nuestros futuros programas.
OBJETOS PROPIOS:
A la hora de diseñar un objeto de creación propia, tendremos que pensar qué propiedades debe tener dicho
objeto, y qué métodos serán necesarios para poder trabajar con él. Dicho de otra forma, debemos pensar
en qué características debe tener el objeto y qué órdenes le podré dar.
Para crear objetos propios hay que programar la Clase del objeto. Una vez programada la Clase, ya
podremos generar objetos de dicha clase, declarándolos y construyéndolos como si de cualquier otro
objeto se tratara.
A continuación se propone un caso práctico de creación de objetos propios, con el que trabajaremos en las
próximas entradas.
Lo que viene a continuación es un planteamiento teórico de diseño de una Clase de Objetos.
55
IESTP “Ayaviri” Computación e Informática IV - Semestre
Planteamiento:
La empresa Cines “AMANUVA” nos encarga desarrollar un programa para facilitar las distintas gestiones
que se realizan en dichos cines.
Cines “AMANUVA” cuenta con varias salas, y cada una de ellas genera una serie de información. Para
facilitar el control de la información de cada sala programaremos una Clase de objeto a la que
llamaremos SalaCine.
La Clase SalaCine:
La Clase SalaCine definirá características de una sala de cine, y permitirá crear objetos que representen
salas de cine. Cuando la clase SalaCine esté programada, se podrán hacer cosas como las que sigue:
Los Cines “AMANUVA” tienen una sala central donde se proyectan normalmente las películas de estreno.
Se podría crear un objeto llamado salaCentral de la clase SalaCine de la siguiente forma:
SalaCine salaCentral;
Por supuesto, este objeto puede ser construido como cualquier otro:
salaCentral = new SalaCine();
Los Cines “AMANUVA” tienen otra sala secundaria donde proyectan películas clásicas. Se podría crear un
objeto llamado salaSecundaria de la clase SalaCine de la siguiente forma:
56
IESTP “Ayaviri” Computación e Informática IV - Semestre
Lo mismo se tiene que hacer con los objetos propios que definimos. Es necesario decidir qué valores tendrá
las propiedades del objeto al construirse.
En nuestro caso, las características de un objeto de la clase SalaCine en el momento de construirse serán
las siguientes:
aforo: 100
butacasOcupadas: 0
tituloPelicula: “” (cadena vacía)
precioEntrada: 5.00
Observa este código, en él construimos el objeto correspondiente a la sala central de Cines “AMANUVA”:
SalaCine salaCentral;
salaCentral = new SalaCine();
En este momento (en el que el objeto salaCentral está recién construido) este objeto tiene asignado un
aforo de 100, el número de butacas ocupadas es 0, el título de la película que se proyecta en la sala central
es “” y el precio de la entrada para esta sala es de 5.00 euros.
Los valores por defecto que se asignan a los objetos de una clase son valores arbitrarios que el
programador decidirá según su necesidad.
Gracias a estos métodos podemos dar forma a un objeto de la clase SalaCine recién creado.
Por ejemplo, supongamos que queremos crear el objeto que representa la sala secundaria de películas
clásicas. Resulta que esta sala tiene un aforo de 50 localidades, que se está proyectando la película “El
Club de la Pelea” y que la entrada para ver la película es de 3.0 euros. La sala está vacía de momento.
Para crear el objeto, se usaría el siguiente código:
57
IESTP “Ayaviri” Computación e Informática IV - Semestre
salaSecundaria.setAforo(50); //aforo 50
salaSecundaria.setPelicula(“El Club de la Pelea”); //la película que se proyecta
salaSecundaria.setEntrada(3.0); //entrada a 3.0 euros
Al construir el objeto salaSecundaria tiene por defecto los valores siguientes en sus propiedades:
aforo: 100
butacasOcupadas: 0
tituloPelicula: “”
precioEntrada: 5.00
Estos métodos nos permitirán obtener información de un objeto del tipo SalaCine. Por ejemplo,
supongamos que tenemos el objeto llamado salaCentral (correspondiente a la sala principal de Cines
“AMANUVA”), para obtener el título de la película que se está proyectando en dicha sala solo habría que
usar este código:
Para saber los ingresos producidos por la sala central se usará este código:
double ingresos;
ingresos = salaCentral. getIngresosSala ();
vaciarSala
- Este método pondrá el número de plazas ocupadas a cero y le asignará a la película la cadena vacía.
entraUno
58
IESTP “Ayaviri” Computación e Informática IV - Semestre
- Este método le dice al objeto que ha entrado una nueva persona en la sala. (Esto debe producir que el
número de plazas ocupadas aumente en uno).
Resumen SalaCine
He aquí un resumen de la Clase de objetos SalaCine, la cual se programará en la próxima entrada de este
blog:
Métodos de orden
59
IESTP “Ayaviri” Computación e Informática IV - Semestre
EJERCICIO PRÁCTICO
Supongamos que programamos una Clase de objetos llamada Rectangulo, la cual permitirá construir objetos
que representen a rectángulos.
¿Qué métodos de tipo set programaría para cambiar las propiedades de los objetos del tipo Rectangulo?
3. Como ejemplo de los métodos anteriores, suponga que quiere asignar al objeto suelouna
base de 30 y una altura de 50. ¿Qué código usaría?
4. Teniendo en cuenta que nos puede interesar conocer el área de un objeto Rectangulo y su
perímetro, y teniendo en cuenta que los objetos Rectangulo tienen dos propiedades (Base y Altura),
¿qué cuatro métodos get serían interesantes de programar para los objetos del tipo Rectangulo?
5. Teniendo en cuenta los métodos del punto 4. Supongamos que quiero almacenar en una
variable double llamada area el área del objeto suelo. ¿Qué código usaría? Y si quiero almacenar el
perímetro del objeto suelo en una variable llamada peri?
CONCLUSIONES:
Una vez que se tenga claro lo anterior, se podrá empezar la programación de la Clase de objetos.
60
IESTP “Ayaviri” Computación e Informática IV - Semestre
En este ejercicio guiado, crearemos la Clase SalaCine, que hemos descrito en la entrada anterior. Luego, a
partir de esta clase, fabricaremos objetos representando salas de cine, y los usaremos en un proyecto
Java.
Recuerda las características que hemos decidido para la Clase SalaCine en el post anterior:
Clase SalaCine
Nombre de la Clase: SalaCine
Propiedades de los objetos SalaCine:
aforo - número entero (int)
butacasOcupadas - número entero (int)
tituloPelicula - cadena (String)
precioEntrada - número decimal (double)
Métodos de orden
vaciarSala - vacía la ocupación de la sala y borra el título de la película
entraUno - le indica al objeto que ha entrado una persona más en la sala
61
IESTP “Ayaviri” Computación e Informática IV - Semestre
Fichero de la Clase
La programación de una clase de objetos se realiza en un fichero aparte, cuyo nombre es exactamente el
mismo que el de la propia clase, y cuya extensión es .java.
Por ejemplo, si queremos programar la clase SalaCine, esto se debe hacer en un fichero llamado:
SalaCine.java
Cuando programemos esta clase dentro de NetBeans, veremos las facilidades que nos proporciona este
para la creación de la clase. De momento, solo veremos de forma teórica como hay que programar la clase.
(No tiene que introducir lo que viene a continuación en ningún sitio).
La programación de una clase comienza siempre con una línea de código como la que sigue:
Propiedades de la Clase:
Lo primero que se debe introducir en la clase que se está programando son las propiedades. Las propiedades
de una clase son básicamente variables globales de ésta. Si introducimos las propiedades de la
clase SalaCine, esta nos quedaría así:
Constructor de la Clase:
Cuando se planteó la clase SalaCine, se tuvo que decidir qué valores iniciales deberían tener las
propiedades de la clase. Para asignar estos valores iniciales, es necesario programar lo que se denomina
el método constructor.
El método constructor de una clase es un método (un procedimiento para entendernos) un poco especial,
ya que debe tener el mismo nombre de la clase y no devuelve nada, pero no lleva la palabra void. Dentro del
método constructor se inicializan las propiedades de la clase.
En general, la programación del método constructor sigue la siguiente sintaxis:
62
IESTP “Ayaviri” Computación e Informática IV - Semestre
public NombreDeLaClase() {
propiedad1 = valor1;
propiedad2 = valor2;
etc…
}
//Método Constructor:
public SalaCine() {
aforo = 100;
butacasOcupadas = 0;
tituloPelicula = “”;
precioEntrada = 5.0;
}
}
Observa como usamos el método constructor de la clase SalaCine para asignar a cada propiedad los valores
por defecto decididos en el diseño de la clase que se hizo en la entrada anterior.
- Es void, es decir, no devuelve nada (el significado de la palabra public se verá más adelante).
- El método recibe como parámetro una variable del mismo tipo que la propiedad que queremos modificar
(en este caso int) y un nombre que se recomienda que no sea igual al de la propiedad (en nuestro
caso, afo, de aforo)
- Puedes observar que lo que se hace simplemente en el método es asignar la variable pasada como
parámetro a la propiedad.
63
IESTP “Ayaviri” Computación e Informática IV - Semestre
La mayoría de los procedimientos set usados para introducir valores en las propiedades tienen la misma
forma. Aquí tienes la programación de los demás procedimientos set de la clase SalaCine.
//Método setButacasOcupadas
public void setButacasOcupadas (int ocu) {
butacasOcupadas = ocu;
}
//Método setTituloPelicula
public void setTituloPelicula (String peli) {
tituloPelicula = peli;
}
//Método setPrecioEntrada
public void setPrecioEntrada (double entra) {
precioEntrada = entra;
}
Hay un método set de la clase SalaCine llamado setButacasLibres cuya misión es asignar el número de
localidades libres del cine. Sin embargo la clase SalaCine no tiene una propiedad “butacasLibres”. En
realidad, este método debe modificar el número de localidades ocupadas. Observa su programación:
//Método setButacasLibres
public void setButacasLibres(int lib) {
int ocu;
ocu = aforo – lib;
butacasOcupadas = ocu;
}
//Método Constructor
public SalaCine() {
aforo = 100;
butacasOcupadas = 0;
tituloPelicula = “”;
precioEntrada = 5.0;
}
64
IESTP “Ayaviri” Computación e Informática IV - Semestre
//Métodos set
//Método setAforo
public void setAforo(int afo) {
aforo = afo;
}
//Método setButacasOcupadas
public void setButacasOcupadas(int ocu) {
butacasOcupadas = ocu;
}
//Método setTituloPelicula
public void setTituloPelicula (String peli) {
tituloPelicula = peli;
}
//Método setPrecioEntrada
public void setPrecioEntrada (double entra) {
precioEntrada = entra;
}
//Método setButacasLibres
public void setButacasLibres(int lib) {
int ocu;
ocu = aforo – lib;
butacasOcupadas = ocu;
}
}
//Método getAforo
public int getAforo() {
return aforo;
}
Como puedes ver el método simplemente devuelve el valor de la propiedad aforo. Como esta propiedad es
int, el método es int.
Los métodos que devuelven el resto de las propiedades son igual de sencillos de programar:
//Método getButacasOcupadas
public int getButacasOcupadas() {
return butacasOcupadas;
}
65
IESTP “Ayaviri” Computación e Informática IV - Semestre
//Método getTituloPelicula
public String getTituloPelicula () {
return tituloPelicula;
}
//Método getPrecioEntrada
public double getPrecioEntrada() {
return precioEntrada;
}
Todos estos métodos son iguales. Solo tienes que fijarte en el tipo de datos de la propiedad que devuelven.
Existen otros métodos get que devuelven cálculos realizados con las propiedades. Estos métodos realizan
algún cálculo y luego devuelven el resultado. Observa el siguiente método get:
//Método getButacasLibres
public int getButacasLibres() {
int lib;
lib = aforo – butacasOcupadas;
return lib;
}
No existe una propiedad butacasLibres, por lo que este valor debe ser calculado a partir del aforo y el
número de localidades ocupadas. Para ello restamos y almacenamos el valor en una variable a la que hemos
llamado lib. Luego devolvemos dicha variable.
Los dos métodos get que quedan por programar de la clase SalaCine son parecidos:
//Método getPorcentajeOcupacion
public double getPorcentajeOcupacion() {
double porc;
porc = (double) butacasOcupadas *100.0 / (double) aforo;
return porc;
}
//Método getIngresosSala
public double getIngresosSala() {
double ingre;
ingre = butacasOcupadas * precioEntrada;
return ingre;
}
Los ingresos se calculan multiplicando el número de butacas ocupadas por lo que vale una entrada.
Una vez introducidos los métodos get la clase SalaCine quedaría de la siguiente forma:
66
IESTP “Ayaviri” Computación e Informática IV - Semestre
double precioEntrada;
//Método Constructor
public SalaCine() {
aforo = 100;
butacasOcupadas = 0;
tituloPelicula = “”;
precioEntrada = 5.0;
}
//Métodos set
//Método setAforo
public void setAforo(int afo) {
aforo = afo;
}
//Método setButacasOcupadas
public void setButacasOcupadas(int ocu) {
butacasOcupadas = ocu;
}
//Método setTituloPelicula
public void setTituloPelicula (String peli) {
tituloPelicula = peli;
}
//Método setPrecioEntrada
public void setPrecioEntrada(double entra) {
precioEntrada = entra;
}
//Método setButacasLibres
public void setButacasLibres(int lib) {
int ocu;
ocu = aforo – lib;
butacasOcupadas = ocu;
}
//Métodos get
//Método getAforo
public int getAforo() {
return aforo;
}
//Método getButacasOcupadas
public int getButacasOcupadas() {
return butacasOcupadas;
}
67
IESTP “Ayaviri” Computación e Informática IV - Semestre
//Método getTituloPelicula
public String getTituloPelicula() {
return tituloPelicula;
}
//Método getPrecioEntrada
public double getPrecioEntrada() {
return precioEntrada;
}
//Método getButacasLibres
public int getButacasLibres() {
int lib;
lib = aforo – butacasOcupadas;
return lib;
}
//Método getPorcentajeOcupacion
public double getPorcentajeOcupacion() {
double porc;
porc = (double) butacasOcupadas * 100.0 / (double) aforo;
return porc;
}
//Método getIngresosSala
public double getIngresosSala() {
double ingre;
ingre = butacasOcupadas * precioEntrada;
return ingre;
}
}
Métodos de orden:
Para finalizar la programación de la clase SalaCine, se programarán los dos métodos de orden que hemos
indicado en el planteamiento de la clase. Estos métodos suelen realizar alguna tarea que involucra a las
propiedades de la clase, modificándola internamente. No suelen devolver ningún valor, aunque pueden
recibir parámetros.
Veamos la programación del método vaciarSala, cuyo objetivo es vaciar la sala y quitar la película en
proyección:
//Método vaciarSala
public void vaciarSala() {
butacasOcupadas = 0;
tituloPelicula = “”;
}
Como se puede observar, es un método muy sencillo, ya que simplemente cambia algunas propiedades de la
clase.
El método entraUno es también muy sencillo de programar. Este método le indica al objeto que ha entrado
un nuevo espectador. Sabiendo esto, el objeto debe aumentar en uno el número de localidades ocupadas:
68
IESTP “Ayaviri” Computación e Informática IV - Semestre
//Método entraUno
public void entraUno() {
butacasOcupadas++;
}
Añadiendo estos dos últimos métodos, la programación de la clase SalaCine quedaría finalmente como
sigue:
//Método Constructor
public SalaCine() {
aforo = 100;
butacasOcupadas = 0;
tituloPelicula = “”;
precioEntrada = 5.0;
}
//Métodos set
//Método setAforo
public void setAforo(int afo) {
aforo = afo;
}
//Método setButacasOcupadas
public void setButacasOcupadas(int ocu) {
butacasOcupadas = ocu;
}
//Método setTituloPelicula
public void setTituloPelicula(String peli) {
tituloPelicula = peli;
}
//Método setPrecioEntrada
public void setPrecioEntrada(double entra) {
precioEntrada = entra;
}
//Método setButacasLibres
public void setButacasLibres(int lib) {
int ocu;
ocu = aforo – lib;
butacasOcupadas = ocu;
}
69
IESTP “Ayaviri” Computación e Informática IV - Semestre
//Métodos get
//Método getAforo
public int getAforo() {
return aforo;
}
//Método getButacasOcupadas
public int getButacasOcupadas() {
return butacasOcupadas;
}
//Método getTituloPelicula
public String getTituloPelicula() {
return tituloPelicula;
}
//Método getPrecioEntrada
public double getPrecioEntrada () {
return precioEntrada;
}
//Método getButacasLibres
public int getButacasLibres () {
int lib;
lib = aforo – butacasOcupadas;
return lib;
}
//Método getPorcentajeOcupacion
public double getPorcentajeOcupacion() {
double porc;
porc = (double) butacasOcupadas * 100.0 / (double) aforo;
return porc;
}
//Método getIngresosSala
public double getIngresosSala() {
double ingre;
ingre = butacasOcupadas * precioEntrada;
return ingre;
}
//Métodos de orden
//Método vaciarSala
public void vaciarSala() {
butacasOcupadas = 0;
tituloPelicula = “”;
}
70
IESTP “Ayaviri” Computación e Informática IV - Semestre
//Método entraUno
public void entraUno() {
butacasOcupadas++;
}
}
EJERCICIOS RECOMENDADOS
Supongamos que tenemos una clase llamada Rectangulo que nos permitirá generar objetos de tipo
rectángulo.
Sea el planteamiento de la clase Rectangulo el que sigue:
CLASE RECTANGULO
Nombre de la clase: Rectangulo
Propiedades de los objetos de la clase Rectangulo:
base (double)
altura (double)
Métodos:
Métodos set:
Métodos get:
getBase – devuelve el valor de la propiedad Base
getAltura – devuelve el valor de la propiedad Altura
getArea – devuelve el área del rectángulo
getPerímetro – devuelve el perímetro del rectángulo
Otros métodos:
Cuadrar – este método debe hacer que la altura tenga el valor de la base.
SE PIDE:
Realiza (en papel) la programación de la clase Rectangulo a partir del planteamiento anterior.
CONCLUSIÓN
La programación de una clase se realiza en un fichero que tiene el mismo nombre que la clase y
extensión .java
71
IESTP “Ayaviri” Computación e Informática IV - Semestre
Método Constructor
Métodos set
Métodos get
Métodos de orden y otros métodos
}
El Método Constructor no devuelve nada pero que no es void. Este método debe llamarse igual que
la clase y se usa para asignar los valores iniciales a las propiedades.
Los métodos set son void y reciben como parámetro un valor que se asigna a la propiedad
correspondiente.
Los métodos get no tienen parámetros y devuelven el valor de una propiedad de la clase, aunque
también pueden realizar cálculos y devolver sus resultados.
Los métodos de orden realizan alguna tarea específica y a veces modifican las propiedades de la
clase de alguna forma.
72