Mega Code Archive

 
Categories / Java / Swing Components
 

Calendar in a JWindow

/* Swing Hacks Tips and Tools for Killer GUIs By Joshua Marinacci, Chris Adamson First Edition June 2005   Series: Hacks ISBN: 0-596-00907-0 Pages: 542 website: http://www.oreilly.com/catalog/swinghks/ */ import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Point; import java.awt.RenderingHints; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; public class CalendarHack extends JPanel {   protected Image background = new ImageIcon("calendar.png").getImage();   protected Image highlight = new ImageIcon("highlight.png").getImage();   protected Image day_img = new ImageIcon("day.png").getImage();   protected SimpleDateFormat month = new SimpleDateFormat("MMMM");   protected SimpleDateFormat year = new SimpleDateFormat("yyyy");   protected SimpleDateFormat day = new SimpleDateFormat("d");   protected Date date = new Date();   public void setDate(Date date) {     this.date = date;   }   public CalendarHack() {     this.setPreferredSize(new Dimension(300, 280));   }   public void paintComponent(Graphics g) {     ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,         RenderingHints.VALUE_ANTIALIAS_ON);     g.drawImage(background, 0, 0, null);     g.setColor(Color.black);     g.setFont(new Font("SansSerif", Font.PLAIN, 18));     g.drawString(month.format(date), 34, 36);     g.setColor(Color.white);     g.drawString(year.format(date), 235, 36);     Calendar today = Calendar.getInstance();     today.setTime(date);     Calendar cal = Calendar.getInstance();     cal.setTime(date);     cal.set(Calendar.DATE, 1);     cal.add(Calendar.DATE, -cal.get(Calendar.DAY_OF_WEEK) + 1);     for (int week = 0; week < 6; week++) {       for (int d = 0; d < 7; d++) {         Image img = day_img;         Color col = Color.black;         // only draw if it's actually in this month         if (cal.get(Calendar.MONTH) == today.get(Calendar.MONTH)) {           if (cal.equals(today)) {             img = highlight;             col = Color.white;           }           g.drawImage(img, d * 30 + 46, week * 29 + 81, null);           g.drawString(day.format(cal.getTime()), d * 30 + 46 + 4, week * 29 + 81 + 20);         }         cal.add(Calendar.DATE, +1);       }     }   }   public static void main(String[] args) {     JFrame frame = new JFrame();     CalendarHack ch = new CalendarHack();     ch.setDate(new Date());     frame.getContentPane().add(ch);     frame.setUndecorated(true);     MoveMouseListener mml = new MoveMouseListener(ch);     ch.addMouseListener(mml);     ch.addMouseMotionListener(mml);     frame.pack();     frame.setVisible(true);   } } class MoveMouseListener implements MouseListener, MouseMotionListener {   JComponent target;   Point start_drag;   Point start_loc;   public MoveMouseListener(JComponent target) {     this.target = target;   }   public static JFrame getFrame(Container target) {     if (target instanceof JFrame) {       return (JFrame) target;     }     return getFrame(target.getParent());   }   Point getScreenLocation(MouseEvent e) {     Point cursor = e.getPoint();     Point target_location = this.target.getLocationOnScreen();     return new Point((int) (target_location.getX() + cursor.getX()),         (int) (target_location.getY() + cursor.getY()));   }   public void mouseClicked(MouseEvent e) {   }   public void mouseEntered(MouseEvent e) {   }   public void mouseExited(MouseEvent e) {   }   public void mousePressed(MouseEvent e) {     this.start_drag = this.getScreenLocation(e);     this.start_loc = this.getFrame(this.target).getLocation();   }   public void mouseReleased(MouseEvent e) {   }   public void mouseDragged(MouseEvent e) {     Point current = this.getScreenLocation(e);     Point offset = new Point((int) current.getX() - (int) start_drag.getX(), (int) current.getY()         - (int) start_drag.getY());     JFrame frame = this.getFrame(target);     Point new_location = new Point((int) (this.start_loc.getX() + offset.getX()),         (int) (this.start_loc.getY() + offset.getY()));     frame.setLocation(new_location);   }   public void mouseMoved(MouseEvent e) {   } }