⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java8.htm

📁 E-books about Java Programing in Spanish
💻 HTM
📖 第 1 页 / 共 2 页
字号:
Por otra parte, creamos el objeto <FONT FACE="Arial">listaPueblos</FONT>
como <FONT FACE="Arial">new List(4, false)</FONT>, que indica
que la lista va a tener 4 renglones y s&oacute;lo se puede seleccionar
un &iacute;tem por vez. Agregamos luego 6 &iacute;tems mediante
<FONT FACE="Arial">addItem</FONT> y la agregamos al panel.
<P>
Ahora ya podemos agregar las listas a nuestra ventana y poner
un par de variables para guardarlas:<BR>
<PRE>
<FONT SIZE=2>class Ventana8 extends Frame {	// hija de Frame

<B>SelecPueblo	cs;		// ciudad de salida
SelecPueblo	cl;		// ciudad de llegada
</B>button		ok;		// tambi&eacute;n el bot&oacute;n de compra de pasajes
boolean	enApplet;	// y otra para indicar si es un applet o no

Ventana8 (String titulo, boolean enApplet) {	// un constructor
super(titulo);				// llama al de Frame
this.enApplet = enApplet;		// guardamos esto
<B>cs = new SelecPueblo(&quot;SALIDA&quot;);	// CIUDAD DE SALIDA
add (&quot;Center&quot;, cs);			
cl = new SelecPueblo(&quot;LLEGADA&quot;);	// CIUDAD DE LLEGADA
add (&quot;East&quot;, cl);
</B>ok = new Button(&quot;Viaje: de ? a ? el ?/?/?&quot;);
add(&quot;South&quot;,ok);
pack();					// dimensionamos la ventana
show();					// y la mostramos!
}</FONT>
</PRE>
<P>
...........................<BR>
<P>
Ya pueden ir probando c&oacute;mo queda, aunque por ahora mucha
funcionalidad no tenemos...
<H3>Agregando fechas</H3>
<P>
Otro panel m&aacute;s nos servir&aacute; para seleccionar o entrar
la fecha:<BR>
<PRE>
<FONT SIZE=2>import java.util.*;
import java.awt.*;

class DiaPartida extends Panel {
private TextField	elDia;
private Button		hoy;
private Button		diasiguiente;

DiaPartida() {
setLayout (new GridLayout (4,1));
elDia = new TextField();
elDia.setText(GetHoy());
hoy = new Button (&quot;Hoy&quot;);
diasiguiente = new Button (&quot;Ma&ntilde;ana&quot;);
add (new Label (&quot;D&iacute;a salida: &quot;));
add (elDia);
add (hoy);
add (diasiguiente);
}

private String GetHoy() {
Date d = new Date();
int dia = d.getDate();
int mes = d.getMonth();
int ano = d.getYear();
return dia+&quot;/&quot;+mes+&quot;/&quot;+ano;
}

private String GetManana() {
Date d = new Date();
int dia = d.getDate();
int mes = d.getMonth();
int ano = d.getYear();
dia = dia++;
switch (mes) {
case (1):
	case (3):
	case (5):
	case (7):
	case (8):
	case (10): if (dia&gt;31) {
			dia = 1;
					mes++;
}
		break;
	case (12): if (dia&gt;31) {
					dia = 1;
			mes = 1;
					ano++;
				}
				break;
case (4):
	case (6):
	case (9):
	case (11): if (dia&gt;30) {
					dia = 1;
			mes++;
				}
				break;
	default: if (dia&gt;28) {	// ojo, hay que corregir para bisiestos!
					dia = 1;
			mes++;
				}
}
return dia+&quot;/&quot;+mes+&quot;/&quot;+ano;
}

public String getDescription() {
return elDia.getText();
}

public boolean handleEvent (Event e) {
if (e.target == hoy)
elDia.setText(GetHoy());
if (e.target == diasiguiente)
elDia.setText(GetManana());
return super.handleEvent(e);
}

}<BR>
</FONT>
</PRE>
<P>
Este es un poco m&aacute;s largo pero no m&aacute;s complejo.
Vamos por parte:<BR>
<PRE>
<FONT SIZE=2>DiaPartida() {
setLayout (new GridLayout (4,1));
elDia = new TextField();
elDia.setText(GetHoy());
hoy = new Button (&quot;Hoy&quot;);
diasiguiente = new Button (&quot;Ma&ntilde;ana&quot;);
add (new Label (&quot;D&iacute;a salida: &quot;));
add (elDia);
add (hoy);
add (diasiguiente);
}<BR>
</FONT>
</PRE>
<P>
El constructor crea un panel con cuatro campos en forma de grilla
vertical, donde mostrar&aacute; el texto &quot;D&iacute;a salida:
&quot;, el campo de entrada de texto <FONT FACE="Arial">elDia</FONT>
y los botones <FONT FACE="Arial">hoy</FONT> y <FONT FACE="Arial">diasiguiente</FONT>.
<P>
El m&eacute;todo privado <FONT FACE="Arial">getHoy</FONT> usa
los m&eacute;todos <FONT FACE="Arial">getDate</FONT>, <FONT FACE="Arial">getMonth</FONT>
y <FONT FACE="Arial">getYear</FONT> de la clase date para armar
un <FONT FACE="Arial">String</FONT> con la fecha actual. El m&eacute;todo
privado <FONT FACE="Arial">getManana</FONT> hace lo mismo para
leer la fecha actual, y le suma 1 al d&iacute;a para tener el
d&iacute;a siguiente. El <FONT FACE="Arial">switch</FONT> siguiente
verifica que si pas&oacute; de fin de mes tome el primer d&iacute;a
y el mes siguiente (o el primer d&iacute;a del a&ntilde;o siguiente
si es en diciembre). Notar que no se consideraron los a&ntilde;os
bisiestos en febrero para no complicar el m&eacute;todo, pero
no es dif&iacute;cil de corregir.
<P>
Otra manera ser&iacute;a armar un <I>array</I> con los d&iacute;as
de cada mes, corregir los d&iacute;as de febrero para los a&ntilde;os
bisiestos, y comparar contra este <I>array</I> en lugar de usar
un <I>switch</I>. La idea siempre es la misma: devolver un <FONT FACE="Arial">String</FONT>
con la fecha del d&iacute;a siguiente.
<P>
Notar algo interesante: como estas clases se cargan y ejecutan
en la m&aacute;quina <I>cliente</I>, la fecha que aparece es la
del <I>cliente</I> y no la del <I>servidor</I> (que puede ser
diferente depende la hora y el lugar del mundo en que est&eacute;n
ambas m&aacute;quinas).
<P>
El m&eacute;todo <FONT FACE="Arial">getDescription</FONT> es p&uacute;blico
y se usa para acceder a la fecha que se ha ingresado desde las
dem&aacute;s clases; simplemente devuelve el contenido del campo
<FONT FACE="Arial">elDia</FONT>, de clase <I>TextField</I>.
<P>
Aqu&iacute; hemos desarrollado tambi&eacute;n el m&eacute;todo
<FONT FACE="Arial">handleEvent</FONT>:<BR>
<PRE>
<FONT SIZE=2>public boolean handleEvent (Event e) {
if (e.target == hoy)
elDia.setText(GetHoy());
if (e.target == diasiguiente)
elDia.setText(GetManana());
return super.handleEvent(e);
}<BR>
</FONT>
</PRE>
<P>
En caso de alguna acci&oacute;n sobre uno de los botones, el m&eacute;todo
<FONT FACE="Arial">setText</FONT> (de la clase <I>TextField</I>)
pone en el campo de texto <FONT FACE="Arial">elDia</FONT> el valor
del d&iacute;a actual o el siguiente.
<P>
Notar que s&oacute;lo hemos considerado que haya alg&uacute;n
evento y no un tipo de evento en particular; en realidad el m&eacute;todo
va a actuar por ejemplo tanto al presionar el mouse sobre el bot&oacute;n
como al soltarlo. Pero esto no nos molesta.
<P>
<FONT FACE="Arial">super.handleEvent</FONT> se encarga de otros
eventos dirigidos al panel, como la entrada de datos por teclado
al campo de texto por ejemplo.
<H3>Juntando todo hasta aqu&iacute;</H3>
<P>
Bueno, ahora vamos a reunir las piezas que tenemos hasta ahora
agregando estos m&eacute;todos a nuestra clase <FONT FACE="Arial">Ventana8</FONT>
para ver c&oacute;mo queda la ventana completa:<BR>
<PRE>
<FONT SIZE=2>class Ventana8 extends Frame {	// hija de Frame

SelecPueblo	cs;		// ciudad de salida
SelecPueblo	cl;		// ciudad de llegada
<B>DiaPartida	dp;		// d&iacute;a de salida
</B>button		ok;		// bot&oacute;n de compra de pasajes
boolean	enApplet;	// para indicar si es un applet o no

Ventana8 (String titulo, boolean enApplet) {	// un constructor
super(titulo);				// llama al de Frame
this.enApplet = enApplet;		// guardamos esto
<B>dp = new DiaPartida();			// DIA DE SALIDA
add (&quot;West&quot;, dp);
</B>cs = new SelecPueblo(&quot;SALIDA&quot;);	// CIUDAD DE SALIDA
add (&quot;Center&quot;, cs);			
cl = new SelecPueblo(&quot;LLEGADA&quot;);	// CIUDAD DE LLEGADA
add (&quot;East&quot;, cl);
ok = new Button(&quot;Viaje: de ? a ? el ?/?/?&quot;);
add(&quot;South&quot;,ok);
pack();					// dimensionamos la ventana
show();					// y la mostramos!
}</FONT>
</PRE>
<P>
...........................<BR>
<P>
Nos detenemos aqu&iacute; por ahora; compilen y prueben las clases
y en la pr&oacute;xima agregaremos a <FONT FACE="Arial">Ventana8</FONT>
m&eacute;todos para procesar el texto del bot&oacute;n de compra
y para actuar cuando se lo presiona.<BR>
<BR>
<P>
Jorge Bourdette<P>
<A HREF=mailto:jpb@amarillas.com>jpb@amarillas.com</A>
</BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -