Java Swing 日曆控制項

來源:互聯網
上載者:User

本想在網上找一個簡單的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>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.