Constructores
¿Qué constuctor está escrito incorrectamente?
Ambos public Button(){} y public Button("Edit"){}
son correctos. Los constructores pueden escribirse con paréntesis vacíos (), o pueden
requerir parámetros, como en el caso B, un constructor Button que toma un
parámetro String. De hecho, una clase puede tener varios constructores, lo que se
conoce como constructores sobrecargados.
Detalles de Constructores
Muchas clases de la librería Java tienen un constructor. Para crear un objeto de esas clases en nuestras propias clases,
para la mayoría de ellas, llamamos al constructor de la clase.
Por ejemplo, si queremos crear un boton para nuestra aplicación, la librería Java tiene una clase predefinida
Button que podemos usar. Un vistazo a la documentación de
Button nos muestra que esta clase tiene dos posibles constructores a los que podemos
llamar:
- Button()
Crea un botón sin etiqueta
- Button(String label)
Crea un botón con una etiqueta de texto
Tener más de un constructor es lo que conocemos como constructores sobrecargados. Cada constructor debe tener el
mismo nombre de la clase que define, pero puede haber tantos constructores como sean necesarios. La diferencia está
en la lista de parámetros definida entre los paréntesis (). El compilador sabe a qué
constructor estamos llamando simplemente por el tipo de información que le proporcionamos.
En este caso, si proporcionamos un String como parámetro llamando al constructor como
en Button("Edit"), el compilador sabe que estámos llamando al segundo constructor.
Un constructor puede requerir diferentes tipos en la lista de parámetros, pero debemos ponerlos en el orden en que queramos
que sean añadidos.
Por ejemplo:
Customer(String name, String address, int age)
Ejemplariza un objeto Customer llamando al constructor de la clase
Customer con la palabra clave new:
Customer cust1 = new Customer("Jane Smith", "555 Street", 30);
Customer define la variable referencia, y la variable se llama
cust1. Un Customer se construye llamando al constructor
de la clase Customer con la palabra clave new.
En otras palabras, el constructor construye un objeto exactamente en la forma que queremos. En este caso, crea un objeto
Customer con información personal.
Antes de arrancar una aplicación, deben aparecer ciertos componentes GUI para que el usuario pueda utilizar la aplicación.
Este concepto podría parecer que dice que toda la aplicación debe escribirse dentro del constructor, pero no es así.
El constructor de DiveLog define sólo unos pocos componentes GUI, y puede que
algunas de estas definiciones de clases llamen a otras clases. De otro modo, la clase principal, se convertiría en algo
enorme e inmanejable. También, en la programación orientada a objetos, el objetivo es construir objetos que trabajen
con otros objetos para hacer sencillo el añadir o eliminar componentes sin tener que modificar cantidad de código.
Cuando se escriben constructores, sólo debemos incluir los elementos del objeto que necesitan ser inicializados.
Veremos estos conceptos según vayamos trabajando en la construcción de esta aplicación Dive Log.
La imagen de abajo nos enseña los objetos que se crean dentro del constructor DiveLog:
Objetos creados desde el constructor
DiveLog
El constructor de la clase DiveLog empieza así:
public DiveLog()
{ // Opens constructor
// Creates a frame object to add to
// the application GUI components.
dlframe = new JFrame("A Java(TM) Technology Dive Log");
Observa que este constructor tiene el mismo nombre que la propia clase y que no requiere ningún parámetro, como
muestra (). El corchete abierto { inicia el cuerpo del
constructor.
Recordamos que al principio de DiveLog.java, declaramos la variable
dlframe, pero no le asignamos ningún valor. Ahora, dentro del constructor, el
constructor de JFrame es asignado a la variable
dlframe. Un JFrame es simplemente una clase
predefinida de Java que construye un marco con un borde, un botón de minimizar y maximizar y una caja de cierre. Un
JFrame es un contenedor Swing que puede contener otros contenedores o componentes
DiveLog inicializa un JFrame de esta forma:
dlframe = new JFrame("A Java(TM) Technology Dive Log");
Si leemos la documentación
de la clase JFrame debajo del sumario de constructores, descubriremos que
hay varios constructores disponiles para construir un objeto JFrame:
- El primero es el constructor por defecto, que crea un JFrame invisible y que no tiene
otras características.
- El segundo constructor crea un JFrame en la
GraphicsConfiguration específica de un dispositivo de pantalla y un título en blanco.
- El tercer constructor acepta un String como argumento, y crea un
JFrame con el título proporcionado. Este es el constructor usado en el constructor de
DiveLog.
- El último constructor crea un JFrame con el título y la
GraphicsConfiguration del dispositivo de pantalla especificados.
Aunque un objeto JFrame es inicializado con el título para el marco y asignado a la
variable dlframe, todavía necesita un poco más de trabajo.
El siguiente fragmento de código contiene algunos conceptos avanzados que explicaremos completamente más adelante.
Este método se asegura que la aplicación Dive Log se puede apagar de la forma apropiada.
// Closes from title bar
// and from menu
dlframe.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
| Sigue estos pasos... |
- Abre el fichero DiveLog.java.
- Teclea, o copia y pega las siguientes líneas de código:
public DiveLog()
{
// Create a frame object to add the
// application GUI components to.
dlframe = new JFrame("A Java(TM) Technology Dive Log");
// Closes from title bar
//and from menu
dlframe.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}// Ends constructor
- Graba el fichero.
|
Luego, se ejemplariza el JTabbedPane. Al inicio de la clase
DiveLog, declaramos la variable tabbedPane como del tipo
JTabbedPane, pero no fue asignada. Aquí, en el construtor se usa la palabra clave
new para crear un objeto JTabbedPane, pasándole
los parámetros necesarios para la posición de los tabs en el lado izquierdo de la ventana, y la variable es asignada al
objeto JTabbedPane:
// Tabbed pane with panels for components
tabbedPane = new JTabbedPane(SwingConstants.LEFT);
JTabbedPane es otra clase Java que crea tabs (pestañas) en una aplicación y que posee
dos constructores. El constructor de DiveLog llama al constructor de la
clase
JTabbedPane que hace posible crear los tabs en
TOP, BOTTOM, LEFT, o RIGHT. Simplemente tecleando
nuestras preferencias cuando llamemos al constructor. En el caso de DiveLog,
los tabs se crean a la izquierda de la pantalla. Puedes situarlos en otro lado si te apatece.
Llamar a Métodos Predefinidos
JFrame hereda los métodos predefinidos de las clases
Frame, Window, Container, Component, y Object.
Aprenderemos sobre la herencia más adelante.
Recuerda que los métodos proporcionan acciones en las aplicaciones. Una clase tiene al menos un método, pero
generalmente tiene muchos más. Puedes ver los métodos que tiene disponibles la clase
JFrame leyendo la
documentación de la
clase JFrame y escaneando los métodos listados en las clases heredadas. Pulsa sobre
los nombres de los métodos para encontrar la información que necesitas proprocionar cuando se les llama.
Los métodos, como los constructores, frecuentemente necesitan que les pasemos información a través de una lista
de parámetros.
Llamamos a estos métodos predefinidos simplemente usando el operador punto (.) con el nombre de
la variable objeto, de esta forma:
tabbedPane.setBackground(Color.blue);
tabbedPane.setForeground(Color.white);
Los métodos setBackground y setForeground son llamados
y usados sobre el objeto tabbedPane, para seleccionar los colores de fondo y de primer plano.
Podemos usar estos métodos sobre cualquier componente GUI para cambiar sus colores, simplemente llamándolos a través
de su variable, y pasándoles la clase Color como un parámetro, junto con el color que
queremos usar.
| Sigue estos pasos... |
- Abre el fichero DiveLog.java
- Teclea o copia y pega las siguientes líneas de código justo después de la última sección que has añadido:
// Tabbed pane with panels for Jcomponents
// Instantiate JTabbedPane with keyword new
tabbedPane = new JTabbedPane(SwingConstants.LEFT);
// Calls method to set color
tabbedPane.setBackground(Color.blue);
tabbedPane.setForeground(Color.white);
- Graba el fichero.
|
Los métodos predefinidos son fáciles de usar. Cuando decidamos que queremos crear un objeto de cierta clase, miramos la
documentación de la clase y vemos los métodos que tiene disponibles. Creamos un ejemplar de la clase usando el operador
new y asignando una variable, luego llamamos al método usando el operador punto
como se explica arriba. Veremos más ejemplos de esto según vayamos progresando en la aplicación
Dive Log.
En este punto, se ha llamado al constructor de la clase JTabbedPane y se ha ejemplarizado
el objeto, pero no se han añadido los tabs individuales.
| ¿Cómo se añaden los tabs individuales al JTabbedPane? |
|
|