Java tutorial
import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.SystemColor; import java.util.Calendar; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; class MonthPanel extends JPanel { int month; int year; protected String[] monthNames = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; protected String[] dayNames = { "S", "M", "T", "W", "T", "F", "S" }; public MonthPanel(int month, int year) { this.month = month; this.year = year; JPanel monthPanel = new JPanel(true); monthPanel.setLayout(new BorderLayout()); monthPanel.add(createTitleGUI(), BorderLayout.NORTH); monthPanel.add(createDaysGUI(), BorderLayout.SOUTH); this.add(monthPanel); } protected JPanel createTitleGUI() { JPanel titlePanel = new JPanel(true); titlePanel.setLayout(new FlowLayout()); titlePanel.setBackground(Color.WHITE); JLabel label = new JLabel(monthNames[month] + " " + year); label.setForeground(SystemColor.activeCaption); titlePanel.add(label, BorderLayout.CENTER); return titlePanel; } protected JPanel createDaysGUI() { JPanel dayPanel = new JPanel(true); dayPanel.setLayout(new GridLayout(0, dayNames.length)); Calendar today = Calendar.getInstance(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.DAY_OF_MONTH, 1); Calendar iterator = (Calendar) calendar.clone(); iterator.add(Calendar.DAY_OF_MONTH, -(iterator.get(Calendar.DAY_OF_WEEK) - 1)); Calendar maximum = (Calendar) calendar.clone(); maximum.add(Calendar.MONTH, +1); for (int i = 0; i < dayNames.length; i++) { JPanel dPanel = new JPanel(true); dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); JLabel dLabel = new JLabel(dayNames[i]); dPanel.add(dLabel); dayPanel.add(dPanel); } int count = 0; int limit = dayNames.length * 6; while (iterator.getTimeInMillis() < maximum.getTimeInMillis()) { int lMonth = iterator.get(Calendar.MONTH); int lYear = iterator.get(Calendar.YEAR); JPanel dPanel = new JPanel(true); dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); JLabel dayLabel = new JLabel(); if ((lMonth == month) && (lYear == year)) { int lDay = iterator.get(Calendar.DAY_OF_MONTH); dayLabel.setText(Integer.toString(lDay)); } dPanel.add(dayLabel); dayPanel.add(dPanel); iterator.add(Calendar.DAY_OF_YEAR, +1); count++; } for (int i = count; i < limit; i++) { JPanel dPanel = new JPanel(true); dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); dPanel.add(new JLabel()); dayPanel.add(dPanel); } return dayPanel; } } public class Main { public static void main(String[] args) { MonthPanel panel = new MonthPanel(5, 2015); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new FlowLayout()); frame.add(panel); frame.pack(); frame.setVisible(true); } }