Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- import java.text.*;
- import java.util.*;
- import javax.swing.*;
- public class MyWidget extends JFrame implements ActionListener, Runnable {
- String[] w = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", };
- String[] m = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", };
- JPanel p2;
- JLabel lblMonthYear, lblTime;
- JButton btnPrevMonth, btnNextMonth;
- int year, month;
- Calendar calendar;
- DateFormat formatter;
- public MyWidget() {
- this.setResizable(false);
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.setLayout(new BorderLayout());
- JPanel p1 = new JPanel(new BorderLayout());
- this.p2 = new JPanel(new GridLayout(0, 7));
- this.calendar = Calendar.getInstance();
- this.year = calendar.get(Calendar.YEAR);
- this.month = calendar.get(Calendar.MONTH);
- this.btnPrevMonth = new JButton("<");
- this.btnPrevMonth.addActionListener(this);
- this.lblMonthYear = new JLabel();
- this.lblMonthYear.setHorizontalAlignment(JLabel.CENTER);
- this.btnNextMonth = new JButton(">");
- this.btnNextMonth.addActionListener(this);
- p1.add(btnPrevMonth, BorderLayout.WEST);
- p1.add(lblMonthYear, BorderLayout.CENTER);
- p1.add(btnNextMonth, BorderLayout.EAST);
- this.lblTime = new JLabel();
- this.formatter = new SimpleDateFormat("HH:mm:ss");
- JPanel pnlHeader = new JPanel(new BorderLayout());
- JPanel pnlCenter = new JPanel(new BorderLayout());
- JPanel pnlFooter = new JPanel();
- pnlHeader.add(p1, BorderLayout.NORTH);
- pnlCenter.add(p2, BorderLayout.CENTER);
- pnlFooter.add(lblTime);
- this.add(pnlHeader, BorderLayout.NORTH);
- this.add(pnlCenter, BorderLayout.CENTER);
- this.add(pnlFooter, BorderLayout.SOUTH);
- showCalendar();
- this.pack();
- }
- private void showCalendar() {
- p2.removeAll();
- p2.repaint();
- for(int i=0; i<7; i++) {
- JLabel l = new JLabel(w[i]);
- l.setHorizontalAlignment(JLabel.CENTER);
- p2.add(l);
- }
- this.lblMonthYear.setText(m[month] + " " + year);
- JLabel[][] days = new JLabel[7][7];
- calendar.set(Calendar.YEAR, year);
- calendar.set(Calendar.MONTH, month);
- calendar.set(Calendar.DATE, 1);
- int dayOfWeekOn1st = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7;
- for(int i=0; i<dayOfWeekOn1st; i++) {
- days[0][i] = new JLabel();
- days[0][i].setHorizontalAlignment(JLabel.CENTER);
- p2.add(days[0][i]);
- }
- int day = 1;
- for(int i=dayOfWeekOn1st; i<7; i++) {
- days[0][i] = new JLabel("" + (day++));
- days[0][i].setHorizontalAlignment(JLabel.CENTER);
- p2.add(days[0][i]);
- }
- here: for(int r=1; r<7; r++) {
- days[r] = new JLabel[7];
- for(int i=0; i<7; i++) {
- if(day > calendar.getActualMaximum(Calendar.DATE)) { break here; }
- days[r][i] = new JLabel("" + day);
- days[r][i].setHorizontalAlignment(JLabel.CENTER);
- day += 1;
- p2.add(days[r][i]);
- }
- }
- }
- @Override public void run() {
- for( ; ; ) {
- try {
- Calendar now = Calendar.getInstance();
- lblTime.setText(formatter.format(now.getTime()));
- Thread.sleep(500);
- } catch(InterruptedException ex) {
- ex.printStackTrace();
- }
- }
- }
- @Override public void actionPerformed(ActionEvent e) {
- Object source = e.getSource();
- if(source == btnNextMonth) {
- if(month == 11) {
- year += 1;
- month = 0;
- } else {
- month += 1;
- }
- showCalendar();
- } else if(source == btnPrevMonth) {
- if(month == 0) {
- year -= 1;
- month = 11;
- } else {
- month -= 1;
- }
- showCalendar();
- }
- }
- public static void main(String[] args) {
- MyWidget self = new MyWidget();
- new Thread(self).start();
- self.setVisible(true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement