?? mainframe.java
字號:
package clock;
/** *//**
* MainFrame.java
*/
import java.awt.BorderLayout;
//borderlayout類是一個布置容器的邊框布局,它可以對容器組件進行安排,并調整其大小,使其符合下列五個區域:北、南、東、西、中。
import java.awt.Color;
//GridLayout 類是一個布局處理器,它以矩形網格形式對容器的組件進行布置。容器被分成大小相等的矩形,一個矩形中放置一個組件。
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.util.Calendar;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;
class MainFrame extends JFrame {
/** *//**
*
*/
private static final long serialVersionUID = 1L;
JPanel panel = new JPanel(new BorderLayout());
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel(new GridLayout(7, 7));
JPanel panel3 = new JPanel();
JLabel[] label = new JLabel[49];
JLabel y_label = new JLabel("年份");
JLabel m_label = new JLabel("月份");
JComboBox com1 = new JComboBox();
JComboBox com2 = new JComboBox();
int re_year, re_month;
int x_size, y_size;
String year_num;
Calendar now = Calendar.getInstance(); // 實例化Calendar
//getinstance 使用指定時區和語言環境獲得一個日歷。
//Calendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等
MainFrame() {
super("萬年歷");
setSize(300, 350);
x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth());
y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());
setLocation((x_size - 300) / 2, (y_size - 350) / 2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1.add(y_label);
panel1.add(com1);
panel1.add(m_label);
panel1.add(com2);
for (int i = 0; i < 49; i++) {
label[i] = new JLabel("", JLabel.CENTER);// 將顯示的字符設置為居中
panel2.add(label[i]);
}
panel3.add(new Clock(this)); //調用Clock類實例,來實現對當前時間的顯示
panel.add(panel1, BorderLayout.NORTH); //布局北面存放所要選擇的年份和月份
panel.add(panel2, BorderLayout.CENTER); //存放日歷
panel.add(panel3, BorderLayout.SOUTH); //存放當前時間
panel.setBackground(Color.cyan);
panel1.setBackground(Color.cyan);
panel2.setBackground(Color.white);
panel3.setBackground(Color.cyan);
try {
Init();
} catch (java.text.ParseException e) {
// TODO 自動生成 catch 塊
e.printStackTrace();
}
com1.addActionListener(new ClockAction());
com2.addActionListener(new ClockAction());
setContentPane(panel);
setVisible(true);
setResizable(false);
}
class ClockAction implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
int c_year, c_month, c_week;
c_year = Integer.parseInt(com1.getSelectedItem().toString()); // 得到當前所選年份
c_month = Integer.parseInt(com2.getSelectedItem().toString())-1; // 得到當前月份,并減1,計算機中的月為0-11
c_week = use(c_year, c_month); // 調用函數use,得到星期幾
try {
Resetday(c_week, c_year, c_month);
} catch (java.text.ParseException e) {
// TODO 自動生成 catch 塊
e.printStackTrace();
} // 調用函數Resetday
}
}
public void Init() throws java.text.ParseException {
int year, month_num, first_day_num;
String log[] = { "日", "一", "二", "三", "四", "五", "六" };
for (int i = 0; i < 7; i++) {
label[i].setText(log[i]);
}
for (int i = 0; i < 49; i = i + 7) {
label[i].setForeground(Color.red); // 將星期日的日期設置為紅色
}
for (int i = 6; i < 49; i = i + 7) {
label[i].setForeground(Color.green);// 將星期六的日期設置為綠色
}
for (int i = 1950; i < 2050; i++) {
com1.addItem("" + i);
}
for (int i = 1; i < 13; i++) {
com2.addItem("" + i);
}
month_num = (int) (now.get(Calendar.MONTH)); // 得到當前時間的月份
year = (int) (now.get(Calendar.YEAR)); // 得到當前時間的年份
com1.setSelectedIndex(year - 1950); // 設置下拉列表顯示為當前年,1950對應下拉框中是0
com2.setSelectedIndex(month_num); // 設置下拉列表顯示為當前月
first_day_num = use(year, month_num);//得到這個月第一天是星期幾
Resetday(first_day_num, year, month_num);
}
public int use(int reyear, int remonth) {
int week_num;
now.set(reyear, remonth, 1); // 設置時間為所要查詢的年月的第一天
week_num = (int) (now.get(Calendar.DAY_OF_WEEK));// 得到第一天的星期
return week_num;
}
@SuppressWarnings("deprecation")
//確定日期
public void Resetday(int week_log, int year_log, int month_log) throws java.text.ParseException {
int month_num = (int) (now.get(Calendar.MONTH))+1; // 得到當前時間的月份
int month_day_score; // 存儲月份的天數
int count; //存放日期
month_day_score = 0;
count = 1;
Date date = new Date(year_log, month_log + 1, 1); // now
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -1); // 前個月
month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 最后一天
for (int i = 7; i < 49; i++) { // 初始化標簽
label[i].setText("");
}
week_log = week_log + 6; // 將星期數加6,使顯示正確
month_day_score = month_day_score + week_log;
for (int i = week_log; i < month_day_score; i++, count++) {
label[i].setText(count + "");
// 設置label的浮動提示
try {
now.setTime(Lunar.chineseDateFormat.parse(year_log+"年"+(month_log+1)+"月"+count+"日"));
} catch (ParseException e) {
e.printStackTrace();
}
String f=new Lunar(now).WorldFestival(month_num,count);
if(f!=null)
{
label[i].setText(count+f);
}
label[i].setToolTipText("農歷:"+new Lunar(now).cyclical()+new Lunar(now)+" 生肖:"+new Lunar(now).animalsYear()+".節日:"+f);
}
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
new MainFrame(); //實例化,運行構造函數顯示界面
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -