Cómo escribir un calendario en java
importar java.awt.BorderLayout;
importar java.awt.Color;
importar java.awt.Dimension;
importar java.awt.GridLayout;
importar java.awt.SystemColor;
importar java.awt.event.ActionEvent;
importar java.awt.event. KeyEvent;
importar java.awt.event.MouseEvent;
importar java.util.Calendar;
importar java.util.GregorianCalendar;
importar java.util.Locale;
importar java.util.Date;
importar java.util.StringTokenizer;
importar javax.swing. BorderFactory;
importar javax.swing.JButton;
importar javax.swing.JFrame;
importar javax.swing.JLabel;
importar javax.swing.JPanel;
importar javax.swing.JTextField;
importar javax.swing.JToggleButton;
importar javax.swing.SwingConstants;
import javax.swing.UIManager;
/**
*
Título: Calendario de swing
*
Descripción: Fecha de operación
* @autor duxu2004
* @versión 1.0.1
*/
class JCalendar extiende JPanel{
//Representación dinámica de año, mes y día
private int año=0;
private int mes=0;
private int day=0;
//Panel principal
private JPanel Main = new JPanel();
//Día Panel p>
JPanel privado jPanelDay = nuevo JPanel();
//Mes Panel
JPanel privado jPanelMonth = nuevo JPanel();
// Posición de entrada del año
private JTextField Año = new JTextField();
//Posición de entrada del mes
private JTextField Mes = new JTextField();
//Disminuir el mes
private JButton MonthDown = new JButton();
//Aumentar el mes
JButton privado MonthUp = nuevo JButton();
JPanel privado jPanelButton = nuevo JPanel();
//Disminuir el año
JButton privado YearDown = nuevo JButton ( );
//Aumentar el año
private JButton YearUp = new JButton();
//Mostrar la posición de la fecha
private JLabel Out = new JLabel();
//Zona horaria de China, puedes ampliar la función de configuración de la zona horaria desde aquí en el futuro
private Locale l= Locale.CHINESE;
//Calendario principal
private GregorianCalendar cal=new GregorianCalendar(l);
//Panel semanal
private JPanel WeekPanel=new JPanel();
//Grupo de botones de día
private JToggleButton[] días=new JToggleButton[42];
//Día panel
JPanel privado Días = nuevo JPanel();
//Etiqueta
JLabel privado jLabel1 = nuevo JLabel();
JLabel privado jLabel2 = nuevo JLabel();
JLabel privado jLabel3 = nuevo JLabel();
JLabel privado jLabel4 = nuevo JLabel();
JLabel privado jLabel5 = nuevo JLabel();
p>JLabel privado jLabel6 = nuevo JLabel();
JLabel privado jLabel7 = nuevo JLabel();
// Botón de días actualmente seleccionados
private JToggleButton cur=null;
//Matriz de días del mes, utilizada para obtener cuántos días hay en el mes
// 1 2 3 4 5 6 7 8 9 10 11 12 p>
privado int[] mm={31,28,31,30,31,30,31,31,30,31,30 ,31};
//Constructor de fecha vacía
public JCalendar() {
prueba {
jbInit(); p>
}
catch(Excepción e) {
e.printStackTrace();
}
} p>
//Constructor con configuración de fecha
public JCalendar(int año, int mes, int día) {
cal.set(año, mes, día);
prueba {
jbInit();
}
captura (Excepción e) {
e.printStackTrace();
}
}
//Constructor con entrada de calendario
public JCalendar(calendario GregorianCalendar) {
cal=calendar;
prueba {
jbInit();
}
catch (Excepción e) {
e.printStackTrace();
} p>
}
//Constructor con entrada de fecha
public JCalendar(Fecha fecha) {
cal.setTime(fecha);
intente {
jbInit();
}
catch (Excepción e) {
e.printStackTrace ();
}
}
//Inicializar componente
private void jbInit() lanza una excepción {
// Inicializa el año, mes y día
iniCalender();
this.setLayout(new BorderLayout());
this.setBorder(BorderFactory .createRaisedBevelBorder( ));
this.setMaximumSize(nueva Dimensión(200, 200));
this.setMinimumSize(nueva Dimensión(200, 200));
this.setPreferredSize(new Dimension(200, 200));
Main.setLayout(new BorderLayout());
Main.setBackground(SystemColor.info);
Main.setBorder(null);
Out.setBackground(Color.lightGray);
Out.setHorizontalAlignment(SwingConstants.CENTER);
Fuera .setMaximumSize(nueva Dimensión(100, 19));
Out.setMinimumSize(nueva Dimensión(100, 19));
Out.setPreferredSize(nueva Dimensión(100, 19) );
jLabel1.setForeground(Color.red);
jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
jLabel1.setHorizontalTextPosition(S
wingConstants.CENTER);
jLabel1.setText("日");
jLabel2.setForeground(Color.blue);
jLabel2.setHorizontalAlignment(SwingConstants. CENTRO);
jLabel2.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel2.setText("六");
jLabel3.setHorizontalAlignment(SwingConstants.CENTER) ;
jLabel3.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel3.setText("五");
jLabel4.setHorizontalAlignment(SwingConstants.CENTER);
jLabel4.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel4.setText("四");
jLabel5.setHorizontalAlignment(SwingConstants.CENTER);
jLabel5.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel5.setText("三");
jLabel6.setBorder(null);
jLabel6.setHorizontalAlignment(SwingConstants.CENTER);
jLabel6.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel6.setText("二");
jLabel7. setBackground(Color.lightGray);
jLabel7.setForeground(Color.black);
jLabel7.setBorder(null);
jLabel7.setHorizontalAlignment(SwingConstants. CENTRO);
jLabel7.setHorizontalTextPosition(SwingConstants.CENTER);
jLabel7.setText("一");
semanaPanel.setBackground(UIManager.getColor( "InternalFrame.activeTitleGradient"));
weekPanel.setBorder(BorderFactory.createEtchedBorder());
weekPanel.setLayout(new GridLayout(1,7));
semanaPanel.add(jLabel1,
null);
weekPanel.add(jLabel7, null);
weekPanel.add(jLabel6, null);
weekPanel.add(jLabel5, null) ;
weekPanel.add(jLabel4, null);
weekPanel.add(jLabel3, null);
weekPanel.add(jLabel2, null); /p>
MonthUp.setAlignmentX((float) 0.0);
MonthUp.setActionMap(null);
jPanelMonth.setBackground(SystemColor.info);
jPanelMonth.setLayout(new BorderLayout());
jPanelMonth.setBorder(BorderFactory.createEtchedBorder());
Month.setBorder(null);
Month.setHorizontalAlignment(SwingConstants.CENTER);
Month.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) { p> p>
Month_mouseClicked(e);
}
});
Month.addKeyListener(new java.awt.event.KeyAdapter( ) {
public void keyPressed(KeyEvent e) {
Month_keyPressed(e);
}
});
MonthDown.setBorder(null);
MonthDown.setText("\u25C4");
MonthDown.addActionListener(new java.awt.event.ActionListener() {
p>public void actionPerformed(ActionEvent e) {
MonthDown_actionPerformed(e);
}
});
MonthUp.setBorder(null);
MonthUp.setText("\u25BA");
MonthUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
MonthUp_actionPerformed(e);
}
});
jPanelButton.setLayout(null);
jPanelButton.setBorder(null);
jPanelButton.addComponentListener( nuevo java.awt.event.ComponentAdapter() {
public void componenteResized(java.awt.event.ComponentEvent evt) {
jPanelButtonComponentResized(evt);
}
});
Año.setBorder(BorderFactory.createEtchedBorder());
Año.setMaximumSize(nueva Dimensión(80, 25));
Año.setMinimumSize(nueva Dimensión(80, 25));
Año.setPreferredSize(nueva Dimensión(80, 25));
Año.setHorizontalAlignment (SwingConstants.CENTER);
Año.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Year_mouseClicked(e);
}
});
Year.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(KeyEvent e) {
Year_keyPressed(e);
}
});
YearDown.setBorder (nulo);
YearDown.setMaximumSize(nueva Dimensión(16, 16));
YearDown.setMinimumSize(nueva Dimensión(16, 16));
YearDown.setPreferredSize(nueva Dimensión(16, 16));
YearDown.setSize(nueva Dimensión(16, 16));
YearDown.setText("▼");
YearDown.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
YearDown_actionPerformed(e);
}
});
YearUp.setBo
rder(null);
YearUp.setMaximumSize(nueva Dimensión(16, 16));
YearUp.setMinimumSize(nueva Dimensión(16, 16));
YearUp.setPreferredSize(nueva Dimensión(16, 16));
YearUp.setSize(nueva Dimensión(16, 16));
YearUp.setText("▲") ;
YearUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
YearUp_actionPerformed(e);
}
});
jPanelDay.setLayout(nuevo BorderLayout());
Days.setLayout(nuevo GridLayout(6 ,7));
Days.setBackground(SystemColor.info);
for(int i=0;i<42;i++){
días. [i]=nuevo JToggleButton();
días[i].setBorder(null);
días[i].setBackground(SystemColor.info);
días[i].setHorizontalAlignment(SwingConstants.CENTER);
días[i].setHorizontalTextPosition(SwingConstants.CENTER);
//días[i].setSize(l ,l);
días[i].addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e) {
día=Integer.parseInt(((JToggleButton)e.getSource()).getText());
showDate();
showDays();
}
});
Días.add(días[i]);
}
this.add(Principal , BorderLayout.NORTH);
this.add(jPanelDay, BorderLayout.CENTER);
this.add(jPanelMonth, BorderLayout.SOUTH);
Principal .add(Año, BorderLayout.CENTER);
Main.add(Fuera, BorderLayout.WEST);
Main.add(jPanelButton, BorderLayout.EAST);
jPanelButton.add(YearUp);
jPanelButton.add(YearDown);
jPanelDay.add(weekPanel,BorderLayout.NORTH);
jPanelDay.add(Days, BorderLayout.CENTER);
jPanelMonth.add(Mes, BorderLayout.CENTER);
jPanelMonth.add(MesAbajo, BorderLayout.WEST);
jPanelMonth.add(MesArriba, BorderLayout.EAST);
showMes();
showAño();
showDate();
showDays();
}
//Panel de selección de año de redibujado personalizado
void jPanelButtonComponentResized(java.awt.event.ComponentEvent evt){
YearUp.setLocation(0 ,0 );
YearDown.setLocation(0,YearUp.getHeight());
jPanelButton.setSize(YearUp.getWidth(),YearUp.getHeight()*2); p>
jPanelButton.setPreferredSize(new Dimension(YearUp.getWidth(),YearUp.getHeight()*2));
jPanelButton.updateUI();
}
//Para probar
public static void main(String[] args){
JFrame f=new JFrame();
f.setContentPane(new JCalendar());
f.pack();
//f.setResizable(false);
f. );
}
//Añadir año
void YearUp_actionPerformed(ActionEvent e) {
año++;
showYear();
showDate();
showDays();
}
//Disminuir el año
p>void YearDown_actionPerformed(ActionEvent e) {
año--;
showYear();
showDate();
mostrarDías();
}
<p> //Disminuir el mes
void MonthDown_actionPerformed(ActionEvent e) {
mes--;
if(mes<0) {
mes = 11;
año--;
showYear();
}
showMonth(); p >
showDate();
showDays();
}
//Agregar mes
void MonthUp_actionPerformed(ActionEvent e ) {
mes++;
if(mes==12) {
mes=0;
año++;
showAño();
}
showMes();
showDate();
showDays();
p>}
//Inicializar año, mes y día
void iniCalender(){
año=cal.get(Calendario .AÑO);
mes=cal.get(Calendar.MONTH);
día=cal.get(Calendar.DAY_OF_MONTH);
} p>
//Actualiza el mes
void showMonth(){
Month.setText(Integer.toString(month+1)+"month");
}
//Actualiza el año
void showYear(){
Year.setText(Integer.toString(year)+"year" );
}
//Fecha de actualización
void showDate(){
Out.setText(Integer.toString(año) +"-"+Integer.toString(mes+1)+"-"+Integer.toString(día));
}
//Volver a dibujar el panel de selección de día p>
void showDays () {
cal.set(año,mes,1);
int primerDíaDeLaSemana = cal.get(Calendar.DAY_OF_WEEK);
int n= mm[mes];
if(cal.isLeapYear(año)&&month==1) n++;
int i=0;
for(;i días[i].setEnabled(false); días[i].setSelected(false); días [i].setText(""); } int d=1; for(;d<=n;d++){ días[i].setText(Integer.toString(d)); días[i].setEnabled(true); if(d==día) días[i].setSelected(true); demás días[i].setSelected (falso);; i++; } durante(;i<42;i++){ días[i] .setEnabled(false); días[i].setSelected(false); días[i].setText(""); } } //Haga clic en el panel del año para seleccionar la cadena de año completa void SelectionYear(){ Year.setSelectionStart(0 ) ; Year.setSelectionEnd(Year.getText().length()); } //Haga clic en el panel del mes para seleccionar el mes completo string void SelectionMonth(){ Month.setSelectionStart(0); Month.setSelectionEnd(Month.getText().length()); } //El panel del mes responde a eventos de clic del mouse void Month_mouseClicked(MouseEvent e) { //SelectionMonth() ; p> inputMonth(); } //Comprueba el mes de entrada void inputMonth(){ Cadena s; if(Month.getText().endsWith("mes")) { s=Month.getText(). subcadena(0, Mes.getText().length()-1); } else s=Mes.getText(); mes= Integer.parseInt (s)-1; this.showMe(); } //Respuesta al evento de pulsación del teclado del panel del mes void Month_keyPressed(KeyEvent e) { if(e.getKeyChar()==10) inputMonth(); } p> //El panel del año responde a los eventos de clic del mouse void Year_mouseClicked(MouseEvent e) { //SelectionYear(); inputYear (); p> } //Año respuesta al evento de tecla del teclado void Year_keyPre ssed(KeyEvent e) { //System.out.print(new Integer(e.getKeyChar()).byteValue()); if(e.getKeyChar() ==10) inputYear(); } //Comprueba la cadena del año de entrada void inputYear() { Cadena s; if(Year.getText().endsWith("año")) { s=Año . getText().substring(0,Año.getText().length()-1); } else s=Año.getText(); año=Integer.parseInt(s); this.showMe(); } //Devuelve la fecha en forma de cadena, yyyy - mm-dd public String getDate(){return Out.getText();} //Ingrese la fecha en forma de cadena, aaaa-mm-dd public void setDate(String fecha){ if(date!=null){ StringTokenizer f = new StringTokenizer(fecha, "-"); if(f.hasMoreTokens()) año = Integer.parseInt(f.nextToken()); if(f.hasMoreTokens()) mes = Integer.parseInt(f.nextToken()); if(f.hasMoreTokens()) día = Integer.parseInt(f.nextToken()); cal.set(año,mes,día); } this.showMe(); } //Ingrese la fecha como objeto de fecha public void setTime(Fecha fecha){ cal.setTime(fecha); this .iniCalender(); this.showMe(); } //Objeto de fecha de retorno fecha pública getTime() {return cal.getTime();} //Devuelve el día actual public int getDay() { return day; } //Establece el día actual public void setDay(int day) { this.day = day; cal.set(este.año,este.mes,este.día); > this.showMe(); } //Establecer el año actual public void setYear(int año) { este.año = año; cal.set(este.año, este.mes, este.día); this.showMe(); } //Devuelve el año actual public int getYear() { return año; } p> //Devuelve el mes actual public int getMonth() { retorno mes; } / /Establecer el mes actual public void setMonth(int mes) { this.month = mes; cal.set(this.year,this. mes,este.día); this.showMe(); } //Actualizar public void showMe() { this.showDays(); this.showMonth(); this.showYear(); this.showDate (); } } clase pública TestJCalendar { public static void main(String[] args) { p> JFrame f=nuevo JFrame(); f.setContentPane(nuevo JCalendar()); f.pack(); //f.setResizable(false); f.show(); } }