1. 程式人生 > >java swing元件實現gui 日曆程式

java swing元件實現gui 日曆程式

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class CalenderTrain extends JFrame implements ActionListener {
	
	//年份
	private JLabel YearLabel = new JLabel("年份:");
	private JComboBox YearBox = new JComboBox();
	
	//月份
	private JLabel MonthLabel = new JLabel("月份:");
	private JComboBox MonthBox = new JComboBox();
	
	//檢視
	JButton button_ok = new JButton("檢視");
	
	//今天
	JButton button_today = new JButton("今天");
	
	//今天的日期,年份,月份
	private Date now_date = new Date();
	private int now_year = now_date.getYear() + 1900;
	private int now_month = now_date.getMonth();
	private boolean todayFlag = false;   //是否顯示今天的日期
	
	//用一行來顯示日期
	private JButton[] button_day = new JButton[42];
	private final String[] week = {"日", "一", "二", "三", "四", "五", "六"};
	private JButton[] button_week = new JButton[7];
	
	//使用者選擇年份和月份
	private String year_int = null;
	private int month_int;
	
	
	public CalenderTrain(){
		super();
		setTitle("日曆");
		init();
		setLocation(500, 300);
		setResizable(false);
		pack();
	}
	

	//----->初始化日曆
	private void init() {
		Font font = new Font("Dialog", Font.BOLD, 14);
		YearLabel.setFont(font);
		MonthLabel.setFont(font);
		button_ok.setFont(font);
		button_today.setFont(font);
		
		//當前年份前10年和未來20年時間區間
		for(int i = now_year - 10; i <= now_year + 20; i++){
			YearBox.addItem(i + "");
		}
		YearBox.setSelectedIndex(10);
		
		//12個月的月份區間
		for(int i = 1; i < 13; i++){
			MonthBox.addItem(i + "");
		}
		MonthBox.setSelectedIndex(now_month);
		
		//年份,月份,檢視,今天
		JPanel panel_ym = new JPanel();
		panel_ym.add(YearLabel);
		panel_ym.add(YearBox);
		panel_ym.add(MonthLabel);
		panel_ym.add(MonthBox);
		panel_ym.add(button_ok);
		panel_ym.add(button_today);
		button_ok.addActionListener(this);
		button_today.addActionListener(this);
		
		//星期 "日", "一", "二", "三", "四", "五", "六"
		JPanel panel_day = new JPanel();
		panel_day.setLayout(new GridLayout(7, 7, 3, 3));
		for(int i = 0; i < 7; i++){
			button_week[i] = new JButton(week[i]);
			button_week[i].setForeground(Color.black);
			panel_day.add(button_week[i]);
		}
		button_week[0].setForeground(Color.red);
		button_week[6].setForeground(Color.red);
		
		//1,2,3..30等日
		for(int i = 0; i < 42; i++){
			button_day[i] = new JButton(" ");
			panel_day.add(button_day[i]);
		}
		printDay();
		
		//
		JPanel panel_main = new JPanel();
		panel_main.setLayout(new BorderLayout());
		panel_main.add(panel_ym, BorderLayout.NORTH);
		panel_main.add(panel_day, BorderLayout.SOUTH);
		
		getContentPane().add(panel_main);
	}

	//----->顯示當前年月的日期
	private void printDay(){
		clearBtns();
		
		if(todayFlag){
			year_int = now_year + "";
			month_int = now_month;
		}else{
			year_int = YearBox.getSelectedItem().toString();
			month_int = MonthBox.getSelectedIndex();
		}
		
		int year_sel = Integer.parseInt(year_int) - 1900;
		
		/**Date建構函式
		 *@param   year    the year minus 1900.
	     *@param   month   the month between 0-11.
	     *@param   date    the day of the month between 1-31.
		 */
		Date firstDay = new Date(year_sel, month_int, 1);
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(firstDay);
		
		//
		int days = 0; //本月有多少天
		int day_week = firstDay.getDay();  //星期幾
		if(month_int == 0 || month_int == 2 || month_int == 4 || month_int == 6 || month_int == 7 || month_int == 9 || month_int == 11 ){
			days = 31;
		}else if(month_int == 3 || month_int == 5|| month_int == 8 || month_int == 10 ){
			days = 30;
		}else{
			if(cal.isLeapYear(year_sel)){
				days = 29;
			}else{
				days = 28;
			}
		}
		
		//根據選定月份第一天是星期幾來確定按鈕的繪製位置 day_week就是我們繪製的起始位置。
		int count = 1;
		
		for(int i = day_week; i < day_week + days; count++, i++){
			if(i % 7 == 0 || i == 6 || i == 13 || i == 20 || i == 27 || i == 34 || i == 41){  //6+31 = 37
				if(i == day_week + now_date.getDate() - 1){
					button_day[i].setForeground(Color.blue);
					button_day[i].setText(count + "");
				}else{
					button_day[i].setForeground(Color.red);
					button_day[i].setText(count + "");
				}
			}else{
				if(i == day_week + now_date.getDate() - 1){
					button_day[i].setForeground(Color.blue);
					button_day[i].setText(count + "");
				}else{
					button_day[i].setForeground(Color.black);
					button_day[i].setText(count + "");
				}
			}
		}
		
		//
		if(day_week == 0){
			for(int i = days; i < 42; i++){
				button_day[i].setText("");
			}
		}else{
			//第一天不是週日,則將第一天前面的按鈕置空
			for(int i = 0; i < day_week; i++){
				button_day[i].setText("");
			}
			//最後一天後面的按鈕置空
			for(int i = day_week + days; i < 42; i++){
				button_day[i].setText("");
			}
		}
	}

	private void clearBtns(){
		for(int i = 0; i < 42; i++){
			button_day[i].setText("");
		}
	}
	
	//----->按鈕監聽函式
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button_ok){
			todayFlag = false;
			printDay();
		}else if(e.getSource() == button_today){
			todayFlag = true;
			YearBox.setSelectedIndex(10);
			MonthBox.setSelectedIndex(now_month);
			printDay();
		}	
	}
	
	
	//----->主函式
	public static void main(String[] args){
		CalenderTrain ct = new CalenderTrain();
		ct.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ct.setVisible(true);
	}	
}	

相關推薦

java swing元件實現gui 日曆程式

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent;

javaswing元件實現簡易的圖書管理系統

圖書管理系統在生活和學校中是最為常見的,這學期的java課程設計題目中的其中一個就是實現圖書管理系統, 做完課設後,在此記錄下。 我的圖書管理系統一共分為幾個模組。圖書查詢模組,管理員模組(預設只有一個管理員),讀者模組。 圖書管理系統結構圖如下所示: 1、管理員模組

Java POI元件實現多個Excel檔案整合成一個多Sheet的Excel檔案

程式碼: package com.weichai; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStre

java-Swing學習(實現兩個單選框互斥)

package test; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.Fo

JAVA練習:利用JAVA基本語句實現列印日曆

已知1900年1月1日是星期一,要求列印輸入年月的日曆。 輸出結果格式: 日    一    二    三    四    五    六                                           1      2      3       4 

java Swing元件大全超牛的例子

http://www.blogjava.net/tjsjrx2010/archive/2009/12/11/305663.htmlpackage com.mygame;import java.awt.BorderLayout;import java.awt.Color;imp

java swing 元件大全----測試Swing所有元件及其相應的事件

  package testSwing; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.tree.*; import javax.swing.even

java swing元件介紹

           Swing中的所有lightweightcomponent都繼承自JComponent(抽象類),除了JFrame,JDialog,JWindow與JApplet這四個元件是hevayweightcomponent外!JFrame繼承原有的AWT中的Frame類;JApplet繼承原有的

java 控制元件實現回車到下一個焦點控制元件,功能同tab鍵。

簡單示例(紅色為關鍵句):import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MyTest extends JFrame implements KeyListener{priv

java swing mysql實現的倉庫商品管理系統專案原始碼附帶視訊指導教程

大家好,今天給大家演示一下由Java swing實現的一款簡單的倉庫商品管理系統,資料庫採用的是mysql,本系統實現了兩個角色層面的功能,管理員可以管理使用者、倉庫、商品資訊等。普通使用者登入後可以檢視商品、倉庫資訊及個人資訊。系統功能比較簡單,但是非常適合Java初學者

Java呼叫Win32實現操作其他程式視窗

1、用到的包 ①jna-4.4.0.jar和jna-platform-4.4.0(下載地址) ②JNative.jar(下載地址) 2、使用方式:向QQ輸入文字為例 public class QQTest { public static void main(String[

自定義java Swing日曆選擇元件JCalendarChooser

package cn.net.iem.view.mainframe; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridBagConstraints; impo

使用InstallAnyWhere 2009打包釋出Java Swing GUI應用程式

        最近幾天開始做Java應用,Java Swing GUI的應用開發測試完畢,發現一個問題,就是怎麼移植到其他Windows機器上去?一直做.NET方面的開發,發現原來Java桌面應用程式

java swing實現日曆顯示

package com.cn9; import java.awt.BorderLayout;   import java.awt.Color;   import java.awt.FlowLayout;   import java.awt.GridLayout;   imp

Java Swing 圖形界面實現驗證碼(驗證碼可動態刷新)

string ble urn repaint xtend efault event adapt 內容 import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.To

Java Swing 實現系統托盤圖標

bubuko alt 匹配 fig ons 參數 mage 彈出 con 在實現托盤圖標時,出現彈出式菜單顯示中文亂碼,無法顯示正確的文字 查詢相關資料後發現是字符編碼不匹配,查詢資料出處 解決方法 1、通過修改Java項目的默認編碼為GBK; 2、在Run Configu

Calendar實現視覺化日曆程式

package com.data; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java

純前端表格控制元件SpreadJS與Java結合,實現模板上傳和下載等功能

安裝部署: 開發環境: 後臺伺服器端採用 Java 、SpringMVC。 資料儲存到 \demo_web\WEB-INF\FileDatabase.txt 檔案中,不需要依賴DB。 採用 Eclipse Java EE IDE for Web Develope

Java實現註冊登入系統——基於Java Swing實現

技術簡介:Java Swing 介紹 Swing 是一個為Java設計的GUI工具包。 Swing是JAVA基礎類的一部分。 Swing包括了圖形使用者介面(GUI)器件如:文字框,按鈕,分隔窗格和表。 Swing提供許多比AWT更好的螢幕顯示元素。它們用純Java寫成,所以同J

Java 圖形化實現一個驗證電話號碼是否合法的程式

package com.wxj; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton;