本想在網上找一個簡單的Java 日曆控制項,但是找了很久要不是就很花哨,要不是就寫的很複雜。下午加晚上花了幾個小時的時間,寫了個簡易的日曆控制項。現在放上來,以備不時之需。
package date;</p><p>import java.awt.BorderLayout;<br />import java.awt.Container;<br />import java.awt.Font;<br />import java.awt.GridLayout;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.ActionListener;<br />import java.util.Calendar;<br />import java.util.GregorianCalendar;</p><p>import javax.swing.Box;<br />import javax.swing.JButton;<br />import javax.swing.JFrame;<br />import javax.swing.JLabel;<br />import javax.swing.JPanel;</p><p>public class CalendarPanel extends JFrame {</p><p>private static final long serialVersionUID = 1L;<br />Calendar cal = null;<br />JPanel operationPanel = null;<br />JPanel dateContainerPanel = null;<br />JButton pMonth = new JButton("<");<br />JButton nMonth = new JButton(">");<br />JButton pYear = new JButton("<<");<br />JButton nYear = new JButton(">>");<br />JLabel monthLabel = new JLabel();</p><p>private int year;<br />private int month;</p><p>public CalendarPanel() {<br />Calendar cal = Calendar.getInstance();<br />this.year = cal.get(Calendar.YEAR);<br />this.month = cal.get(Calendar.MONTH);<br />buildJFrame(cal);<br />}</p><p>public void buildJFrame(Calendar cal) {<br />Container contentPane = getContentPane();<br />contentPane.add(getOprPanel(), BorderLayout.NORTH);<br />contentPane.add(getPanel(cal), BorderLayout.CENTER);<br />setSize(500, 500);<br />setVisible(true);<br />setLocationRelativeTo(null);<br />setResizable(false);<br />setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />}</p><p>public static void main(String args[]) {<br />new CalendarPanel();<br />}</p><p>// 操作按鈕及月份顯示<br />public JPanel getOprPanel() {<br />if (operationPanel == null) {<br />operationPanel = new JPanel();<br />}<br />Box hBox = Box.createHorizontalBox();<br />monthLabel.setText(this.year + "年 " + (this.month + 1) + "月");<br />hBox.add(pYear);<br />hBox.add(Box.createHorizontalStrut(20));<br />hBox.add(pMonth);<br />hBox.add(Box.createHorizontalStrut(20));<br />hBox.add(monthLabel);<br />hBox.add(Box.createHorizontalStrut(20));<br />hBox.add(nMonth);<br />hBox.add(Box.createHorizontalStrut(20));<br />hBox.add(nYear);<br />pYear.addActionListener(new previousYear());<br />nYear.addActionListener(new nextYear());<br />pMonth.addActionListener(new previousMonth());<br />nMonth.addActionListener(new nextMonth());<br />operationPanel.add(hBox);<br />return operationPanel;<br />}</p><p>// 日期面板產生<br />public JPanel getPanel(Calendar cal) {<br />if (dateContainerPanel == null) {<br />dateContainerPanel = new JPanel();<br />}<br />dateContainerPanel.removeAll();<br />cal.set(Calendar.DAY_OF_MONTH, 1);<br />cal.add(Calendar.MONTH, 1);<br />cal.add(Calendar.DAY_OF_MONTH, -1);<br />int weeks = cal.get(Calendar.WEEK_OF_MONTH);</p><p>GridLayout grid = new GridLayout(weeks + 1, 7);<br />dateContainerPanel.setLayout(grid);<br />cal.set(Calendar.DAY_OF_MONTH, 1);<br />int weekday = cal.get(Calendar.DAY_OF_WEEK);<br />cal.add(Calendar.DAY_OF_MONTH, 1 - weekday);</p><p>String[] weekTitle = { "日", "一", "二", "三", "四", "五", "六" };</p><p>// 其他月份日期字型<br />Font hFont = new Font("宋體", 2, 12);<br />for (int i = 0; i < weeks + 1; i++) {<br />for (int j = 0; j < 7; j++) {<br />if (i == 0) {<br />JButton button = new JButton(weekTitle[j]);<br />button.setEnabled(false);<br />dateContainerPanel.add(button);<br />} else {<br />JButton button = new JButton(cal.get(Calendar.DAY_OF_MONTH) + "");<br />if (cal.get(Calendar.MONTH) != month) {<br />button.setFont(hFont);<br />}<br />dateContainerPanel.add(button);<br />cal.add(Calendar.DAY_OF_MONTH, 1);<br />}<br />}<br />}<br />return dateContainerPanel;<br />}</p><p>// 向後翻一月<br />class nextMonth implements ActionListener {<br />public void actionPerformed(ActionEvent e) {<br />Calendar cal = new GregorianCalendar(year, month, 1);<br />cal.add(Calendar.MONTH, 1);<br />year = cal.get(Calendar.YEAR);<br />month = cal.get(Calendar.MONTH);<br />monthLabel.setText(year + "年 " + (month + 1) + "月");<br />getPanel(cal);<br />}<br />}</p><p>// 向前翻一月<br />class previousMonth implements ActionListener {<br />public void actionPerformed(ActionEvent e) {<br />Calendar cal = new GregorianCalendar(year, month, 1);<br />cal.add(Calendar.MONTH, -1);<br />year = cal.get(Calendar.YEAR);<br />month = cal.get(Calendar.MONTH);<br />monthLabel.setText(year + "年 " + (month + 1) + "月");<br />getPanel(cal);<br />}<br />}</p><p>// 向後翻一年<br />class nextYear implements ActionListener {<br />public void actionPerformed(ActionEvent e) {<br />Calendar cal = new GregorianCalendar(year, month, 1);<br />cal.add(Calendar.YEAR, 1);<br />year = cal.get(Calendar.YEAR);<br />month = cal.get(Calendar.MONTH);<br />monthLabel.setText(year + "年 " + (month + 1) + "月");<br />getPanel(cal);<br />}<br />}</p><p>// 向前翻一年<br />class previousYear implements ActionListener {<br />public void actionPerformed(ActionEvent e) {<br />Calendar cal = new GregorianCalendar(year, month, 1);<br />cal.add(Calendar.YEAR, -1);<br />year = cal.get(Calendar.YEAR);<br />month = cal.get(Calendar.MONTH);<br />monthLabel.setText(year + "年 " + (month + 1) + "月");<br />getPanel(cal);<br />}<br />}<br />}</p><p>