SHARE
TWEET

Untitled

a guest Jun 27th, 2012 464 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.GridLayout;
  4. import java.util.Calendar;
  5.  
  6. import javax.swing.BoxLayout;
  7. import javax.swing.JFrame;
  8. import javax.swing.JLabel;
  9. import javax.swing.JPanel;
  10. import javax.swing.JSpinner;
  11. import javax.swing.JTextField;
  12. import javax.swing.SpinnerListModel;
  13. import javax.swing.SpinnerNumberModel;
  14. import javax.swing.SwingConstants;
  15. import javax.swing.UIManager;
  16. import javax.swing.UnsupportedLookAndFeelException;
  17. import javax.swing.border.LineBorder;
  18. import javax.swing.event.ChangeEvent;
  19. import javax.swing.event.ChangeListener;
  20.  
  21. public class Main {
  22.         public static void main(String[] args) {
  23.                 JFrame frame = new JFrame("Swing Calender");
  24. //              frame.setSize(400,600);
  25.                 frame.add(new SwingCalendar());
  26.                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  27.                 frame.pack();
  28.                 frame.setVisible(true);
  29.         }
  30. }
  31.  
  32.  
  33. class SwingCalendar extends JPanel {
  34.         private JSpinner  monthChooser = new JSpinner();
  35.         private JSpinner  yearChooser = new JSpinner();
  36.        
  37.         private JLabel[]    weekLabels = new JLabel[7];
  38.         private JLabel[][]  dayLabels = new JLabel[6][7];
  39.        
  40.         private static final Color WEEK_BG = new Color(240,240,255);
  41.         private static final LineBorder WEEK_BORDER = new LineBorder(new Color(160,160,230), 2, false);
  42.        
  43.         private static final Color DAY_BG = new Color(250,250,255);
  44.         private static final Color DAY_FG = Color.BLACK;
  45.         private static final LineBorder DAY_BORDER = new LineBorder(new Color(40,40,40), 2, false);
  46.        
  47.         private static final Color TODAY_BG = new Color(255, 240, 240);
  48.         private static final Color TODAY_FG = new Color(105,50,50);
  49.         private static final LineBorder TODAY_BORDER = new LineBorder(new Color(175,50,50), 2, false);
  50.  
  51.        
  52.         private static final Dimension DAY_LABEL_SIZE = new Dimension(50,50);
  53.         private static final String[] WEEK_NAMES = new String[] {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
  54.         private static final String[] MONTH_NAMES = new String[] {"JAN", "FEB", "MAR", "APR", "MAY", "JUNE", "JULY", "AUG", "SEP", "OCT", "NOV", "DEC"};
  55.                
  56.         public SwingCalendar() {
  57.                 try {
  58.                         UIManager.setLookAndFeel(
  59.                                 "javax.swing.plaf.nimbus.NimbusLookAndFeel"
  60.                         );
  61.                 } catch (ClassNotFoundException | InstantiationException
  62.                                 | IllegalAccessException | UnsupportedLookAndFeelException e) {
  63.                         e.printStackTrace();
  64.                 }
  65.                
  66.                 /* MONTH CHOOSER */
  67.                 monthChooser.setModel(new SpinnerListModel(MONTH_NAMES));
  68.                 JTextField tm = ((JSpinner.DefaultEditor)monthChooser.getEditor()).getTextField();
  69.                 tm.setHorizontalAlignment(JTextField.CENTER);
  70.                
  71.                 ChangeListener monthYearListener = new ChangeListener(){
  72.                         public void stateChanged(ChangeEvent e) {
  73.                                 String value = (String) monthChooser.getValue();
  74.                                
  75.                                 int month = 0;
  76.                                 for( int i=0; i<MONTH_NAMES.length; i++ ){
  77.                                         if( value.equals(MONTH_NAMES[i]) ){
  78.                                                 month = i;
  79.                                                 break;
  80.                                         }
  81.                                 }
  82.                                
  83.                                 refreshDayLabels((int) yearChooser.getValue(), month);
  84.                         }
  85.                 };
  86.                
  87.                 monthChooser.addChangeListener(monthYearListener);
  88.                
  89.                 Dimension dm = monthChooser.getPreferredSize();
  90.                 dm.width += 10; //dm.height += 1;
  91.                 monthChooser.setPreferredSize(dm);
  92.                
  93.                 /* YEAR CHOOSER */
  94.                 yearChooser.setModel(new SpinnerNumberModel(2012, 0, 5000,1 ));
  95.                 JSpinner.NumberEditor editor = new JSpinner.NumberEditor(yearChooser, "#");
  96.                 yearChooser.setEditor(editor);
  97.                 yearChooser.addChangeListener(monthYearListener);
  98.                
  99.                 Dimension dy = yearChooser.getPreferredSize();
  100.                 dy.width += 10; //dy.height += 1;
  101.                 yearChooser.setPreferredSize(dy);
  102.                
  103.                 /* DAY PANEL */
  104.                 JPanel dayPanel = new JPanel();
  105.                 GridLayout layout = new GridLayout(7, 7);
  106.                 layout.setHgap(3);
  107.                 layout.setVgap(3);
  108.                 dayPanel.setLayout(layout);
  109.                
  110.                 for( int i=0; i<7; i++) {
  111.                         weekLabels[i] = new JLabel(WEEK_NAMES[i]);
  112.                         weekLabels[i].setHorizontalAlignment(SwingConstants.CENTER);
  113.                         weekLabels[i].setVerticalAlignment(SwingConstants.CENTER);
  114.                         weekLabels[i].setPreferredSize(DAY_LABEL_SIZE);
  115.                         weekLabels[i].setOpaque(true);
  116.                         weekLabels[i].setBackground(WEEK_BG);
  117.                         weekLabels[i].setBorder(WEEK_BORDER);
  118.                         if( i == 0 ) {
  119.                                 weekLabels[i].setForeground(Color.RED);
  120.                         } else if ( i == 6 ) {
  121.                                 weekLabels[i].setForeground(Color.BLUE);
  122.                         }
  123.                        
  124.                         dayPanel.add(weekLabels[i]);
  125.                 }
  126.                
  127.                 for( int i=0; i<6; i++) {
  128.                         for( int j=0; j<7; j++) {
  129.                                 dayLabels[i][j] = new JLabel();
  130.                                 dayLabels[i][j].setHorizontalAlignment(SwingConstants.CENTER);
  131.                                 dayLabels[i][j].setVerticalAlignment(SwingConstants.CENTER);
  132.                                 dayLabels[i][j].setOpaque(true);
  133.                                 dayLabels[i][j].setBackground(DAY_BG);
  134.                                 dayLabels[i][j].setPreferredSize(DAY_LABEL_SIZE);
  135.                                 dayLabels[i][j].setBorder(new LineBorder(Color.DARK_GRAY, 2, false));
  136.                                 dayPanel.add(dayLabels[i][j]);
  137.                         }
  138.                 }
  139.                
  140.                 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  141.                 JPanel chooserPanel = new JPanel();
  142.                 GridLayout l = new GridLayout(1,2);
  143.                 l.setHgap(10); l.setVgap(10);
  144.                 chooserPanel.add(yearChooser);
  145.                 chooserPanel.add(monthChooser);
  146.                
  147.                 add(chooserPanel);
  148.                 add(dayPanel);
  149.                
  150.                 Calendar cal = Calendar.getInstance();
  151.                 monthChooser.setValue(MONTH_NAMES[cal.get(Calendar.MONTH)]);
  152.                 yearChooser.setValue(cal.get(Calendar.YEAR));
  153.                 refreshDayLabels(cal, true);
  154.         }
  155.        
  156.         private void refreshDayLabels(int year, int month) {
  157.                 Calendar cal = Calendar.getInstance();
  158.                 if( month == cal.get(Calendar.MONTH) && year == cal.get(Calendar.YEAR)) {
  159.                         refreshDayLabels( cal, true);
  160.                 } else {
  161.                         cal.set(year, month, 1);
  162.                         refreshDayLabels(cal, false);
  163.                 }
  164.         }
  165.        
  166.         private void refreshDayLabels(Calendar calendar, boolean currentMonth) {
  167.                 int maxDate = calendar.getActualMaximum(Calendar.DATE);
  168.                 int today = calendar.get(Calendar.DATE);
  169.                
  170.                 calendar.set(Calendar.DATE, 1);
  171.                 int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
  172.                
  173.                 for( JLabel[] ll : dayLabels) {
  174.                         for( JLabel l : ll ) {
  175.                                 l.setText("");
  176.                         }
  177.                 }
  178.                
  179.                 for( int day=1; day<=maxDate; day++ ) {
  180.                         getDayLabel( day, firstDayOfWeek ).setText(Integer.toString(day));
  181.                 }
  182.  
  183.                 for( int i=0; i<dayLabels.length; i++) {
  184.                         for( int j=0; j<dayLabels[i].length; j++) {
  185.                                 JLabel l = dayLabels[i][j];
  186.                                 l.setBackground(DAY_BG);
  187.                                 l.setForeground(DAY_FG);
  188.                                 l.setBorder(DAY_BORDER);
  189.                                
  190.                                 if( l.getText().length() != 0 ) {
  191.                                         l.setVisible(true);
  192.                                 } else {
  193.                                         l.setVisible(false);
  194.                                 }
  195.                         }
  196.                 }
  197.                
  198.                 if( currentMonth ) {
  199.                         JLabel l = getDayLabel( today, firstDayOfWeek );
  200.                         l.setBackground(TODAY_BG);
  201.                         l.setForeground(TODAY_FG);
  202.                         l.setBorder(TODAY_BORDER);
  203.                 }
  204.         }
  205.        
  206.         private JLabel getDayLabel( int day , int firstDayOfWeek ) {
  207.                 return dayLabels[(day + firstDayOfWeek - 2)/7][(day + firstDayOfWeek - 2)%7];
  208.         }
  209. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top