/* Nico_Calendar.java Applet Junio 1.998 Copyright() N. Betancort Applet que contiene un calendario que puede usarse como Interface para manipular eventos relativos a fechas Revision 18-julio-1999 */ import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.*; import java.text.DateFormat; public class Nical extends Applet { int dia = 1, mes = 1, anno = 1996; int x = 400; int y = 360; //dimensiones static final Color CFONDO = new Color(255,255,120); //color fondo static final String diau[] ={"lun.au","mar.au","mie.au", "jue.au","vie.au","sab.au","dom.au"}; Aplcal pb; Aplista pl; public Dimension getPreferredSize() { return new Dimension(400, 360);} public void init(){ setLayout(null); setSize(getPreferredSize()); setBackground(CFONDO); fecha(); //Obtenci¢n fecha del sistema Panel marco = new Marco(x,y, CFONDO); marco.setBounds(0,0, x, y); add(marco); Panel ptitu = new Panel(); //Panel para cabecera ptitu.setBounds(20,20,x-40,y/10); ptitu.setBackground(CFONDO); Label ltitu = new Label(" Calendario Interactivo "); //titulo ltitu.setForeground(new Color(10,10,240)); ltitu.setFont(new Font("Serif",Font.BOLD, 18)); ptitu.add("Center",ltitu); marco.add(ptitu); pb = new Aplcal(this); //Clase que genera el calendario marco.add(pb); pb.disennar(mes,anno); //valores iniciales pl = new Aplista(pb); //Clase que genera listas marco.add(pl); pl.setBounds(20,20+y/10,x-40,y/10); pb.setBounds(20,20+y/5,x-40,4*y/5-40); } public void tocar(int k){ //m‚todo de gesti¢n de sonido if( pl.getsonido() == true ){ play(getCodeBase(), diau[k]); } } //......................................... public void start(){ repaint(); } //.......................................... private void fecha(){ //m‚todo obtenci¢n fecha del sistema StringTokenizer stfecha; Integer Ifecha[] = new Integer[3]; String parte[] = new String[3]; try { Date fechactual = new Date(); //Obtiene la fecha actual String sfecha = DateFormat.getDateInstance(3, Locale.US).format(fechactual); stfecha = new StringTokenizer(sfecha, "/"); for (int i=0; i<2;i++){ parte[i] = stfecha.nextToken(); Ifecha[i] =new Integer(parte[i]); } this.mes = Ifecha[0].intValue(); this.dia = Ifecha[1].intValue(); sfecha = DateFormat.getDateInstance(1, Locale.US).format(fechactual); stfecha = new StringTokenizer(sfecha, " "); for (int i=0; i<3;i++){ parte[i] = stfecha.nextToken(); } Ifecha[2] =new Integer(parte[2]); this.anno = Ifecha[2].intValue(); } catch(NumberFormatException e2) { this.mes = 1; this.dia = 1; this.anno = 1995; } } //............................................ public static void main(String args[]) { Nical Nicalen = new Nical(); Nicalen.init(); Nicalen.start(); } //............................................. } //Fin de clase Nical //------------------------------------------------------------------------ class Aplista extends Panel implements ItemListener{ //Declaraciones Choice listames = new Choice(); Choice listanno = new Choice(); Checkbox chb1 = new Checkbox("Activar sonido", false); int inimes ; int diassmes; int mes = 6, anno = 1997; Aplcal pb; final static Color FONDO = new Color(255,255,120); final static String nm[] = {"Meses","Enero", "Febrero","Marzo","Abril", "Mayo","Junio","Julio","Agosto","Septiembre", "Octubre","Noviembre","Diciembre"}; public Aplista(Aplcal pb){ //Constructor this.pb = pb; this.anno = pb.anno; this.mes = pb.mes; String slbot = null; setLayout( new GridLayout(1,3,10,5)); setBackground(FONDO); chb1.setBackground(FONDO); add(chb1); //A¤adir bot¢n de selecci¢n; //Colocar Listas for(int i=1; i<13; i++){ listames.addItem(Devmes(i)); } listames.addItemListener(this); listames.select(mes-1); add(listames); for(int i= anno-5; i0 ){ return nm[mes] ;} else { return "Error";} } //........................................ public boolean getsonido(){ return(chb1.getState());} //........................................ public void itemStateChanged(ItemEvent ev) { //Gestor cambios mes o a¤o boolean esanno = true; String iname = (ev.getItem()).toString(); for(int i = 1; i<13; i++){ if(iname == Devmes(i)){ mes = i; i=14; esanno=false; } } if (esanno==true) {anno = (Integer.valueOf(iname)).intValue();} pb.setVisible(false); pb.disennar(mes, anno); } //........................................ } //Fin clase Aplista //---------------------------------------------------------------------- class Aplcal extends Panel implements ActionListener{ //Declaraciones final static Color COLOR_BK = new Color (192,192,192); final static Color COLOR_SD = Color.red; final static Color COLOR_FT = new Color(0,0,220); final static Color COLOR_FJ = new Color(20,255,0); final static Color COLOR_FD = new Color(255,255,120); final static Color COLOR_ET = new Color(0,255,255); final static Font TMR = new Font("Serif",Font.BOLD, 12); final static int diasmes[] = {29,31,28,31,30,31,30,31,31,30,31,30,31}; final static String DIAS_SEM[] = {" Lunes", "Martes", "Miercol.", " Jueves"," Viernes"," Sabado","Domingo"}; Nical padre; Button bot[] = new Button[42]; byte botstate[]= new byte[42]; String slbot = null; int mes, anno ; int numlab, inimes, diassmes; //............................. public int Devdiasmes(int anno,int mes){ if (anno%4 == 0){ diasmes[2]=29; } //Comprobaci¢n bisiesto else {diasmes[2]=28;} return diasmes[mes]; } //...................................... public int Devdiaini(int anno, int mes){ //devuelve el dia de inicio int inter = 365*(anno - 1980) + (anno - 1981)/4; inter = inter + 2 ; //incrementar adecuadamente if(mes>1) { for (int i=1;i< mes; i++){inter = inter + diasmes[i];} } int salida = inter % 7 ; return salida; // salida = inter.mod(7); } //......................................... public Aplcal(Nical padre){ //constructor sin iniciar super(); this.padre = padre; setLayout(new GridLayout(7,7,5,5)); setBackground(COLOR_FD); setSize(200,200); for (int i=0; i< 40 ;i++) {botstate[i]=0;} //Iniciar matriz de estado for (int i=0; i<7 ; i++){ //Encabezado L M X J V S D Label ltop = new Label(DIAS_SEM[i]); ltop.setFont(TMR); ltop.setBackground(COLOR_ET); add(ltop); } for (int i=0; i< 40 ;i++) { //Generar matriz de botones bot[i] = new Button(); bot[i].addActionListener(this); add(bot[i]); } } //............................................ public void disennar(int tmes, int tanno){ this.mes = tmes ; this.anno = tanno; this.diassmes = Devdiasmes(anno, mes); this.inimes = Devdiaini(anno, mes); for (int i=0; i< 40 ;i++) { botstate[i]=0; //Puesta a cero de la matriz botstate bot[i].setEnabled(false); //botones inactivos bot[i].setVisible(false); } for(int i=inimes; i< diassmes+inimes; i++){ bot[i].setBackground(COLOR_BK); bot[i].setEnabled(true); //activar botones de fecha bot[i].setVisible(true); bot[i].setLabel(slbot.valueOf(i+1-inimes)); } // Destacar los dias festivos bootstate = -1 for (int i= 5; i<40; i=i+7){ //sabados bot[i].setBackground(Color.red); bot[i].setEnabled(false); botstate[i]= -1; } for (int i= 6; i<40; i=i+7){ //domingos bot[i].setBackground(Color.red); bot[i].setEnabled(false); botstate[i]= -1; } setVisible(true); setBackground(COLOR_FD); //MODIFIC } //....................................................... public void actionPerformed(ActionEvent ev) { String accion = ev.getActionCommand(); Integer INTE = Integer.valueOf(accion); int numero =INTE.intValue(); numlab = numero+inimes-1; byte estado = botstate[numlab]; //Este m‚todo puede modificarse para incorporar cualquier //otra funcionalidad asociada a la pilsaci¢n de los botones switch(estado) { case 0: bot[numlab].setBackground(COLOR_FT); botstate[numlab]= 1; padre.tocar( numlab % 7); //prueba de sonido break; case 1: bot[numlab].setBackground(COLOR_FJ); botstate[numlab]=2; break; case 2: bot[numlab].setBackground(COLOR_BK); botstate[numlab]=0; break; } } } //Fin Clase Aplcal //------------------------------------------------------------------------- class Marco extends Panel { int an = 100; int al =100; static Color cuno = new Color(210,210,210); //borde uno static Color cdos = new Color(100,100,100); //borde dos static Color ctre = new Color(160,160,160); //borde tres static Color ccua = new Color(220,100,10); //fondo marco public Marco(int ancho, int alto, Color fondo) { //Constructor super(); this.an = ancho ; this.al = alto ; this.ccua = fondo; setLayout(null); Dimension dim1= new Dimension(ancho, alto); //setSize(dim1); setBackground(cuno); //cuadro grande repaint(); } public void paint(Graphics g){ g.setColor(ctre); g.fillRect(5,5, an-9, al-9); //borde frontal g.setColor(cuno); g.fillRect(12,12, an-23, al-23); //cuadro borde interior g.setColor(cdos); for(int i=0; i<5; i++){ //rebordes de 5 pixels de ancho g.drawLine(an-i, i, an-i, al-i); //vert. dch. g.drawLine(i, al-i, an-i, al-i); //hor. baja g.drawLine(12+i, 12+i, 12+i, al-12-i); //vert. izq. g.drawLine(12+i, 12+i, an-12-i, 12+i); //hor. alta } g.setColor(ccua); g.fillRect(17,17, an-33, al-33); //fondo interior } //fin m‚todo paint } //fin de clase //------------------------------------------------------------------------ //Fin c¢digo applet