Calendario anual

Bom dia,

Tenho um calendario e preciso fazer com que mostrasse todos os meses na tela.
Tipo de Janeiro a dezembro, acredito que seria só fazer um for, mas nao desenha na tela.
alguem poderia me ajudar?

segue minha classe:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;

@SuppressWarnings("serial")
public class Calendario extends JFrame implements ActionListener {
	private static final ArrayList<String> meses;
	static {
		meses = new ArrayList<String>(12);
		meses.add("Janeiro");
		meses.add("Fevereiro");
		meses.add("Marco");
		meses.add("Abril");
		meses.add("Maio");
		meses.add("Junho");
		meses.add("Julho");
		meses.add("Agosto");
		meses.add("Setembro");
		meses.add("Outubro");
		meses.add("Novembro");
		meses.add("Dezembro");
	};
	private GregorianCalendar calendario;
	private JLabel labelmes;
	private JLabel labelano;
	private JPanel Paneldia;

	public Calendario ( GregorianCalendar d) {
		Border loweredbevel;
		calendario = d;
		setLayout(new FlowLayout());
		JPanel panel1 = new JPanel();
		JPanel panel2 = new JPanel();
		JButton[] buttons = new JButton[32];
		JButton sair = new JButton("Sair");

		panel2.add(buttons[0] = new JButton("\u22B2"));
		panel2.add(labelmes = new JLabel(String.valueOf(meses.get(calendario.get(GregorianCalendar.MONTH))), JLabel.CENTER));
		panel2.add(buttons[1] = new JButton("\u22B3"));

		panel1.add(buttons[2] = new JButton("\u22B4"));
		panel1.add(labelano = new JLabel(String.valueOf(calendario.get(GregorianCalendar.YEAR)),JLabel.CENTER), BorderLayout.CENTER);
		panel1.add(buttons[3] = new JButton("\u22B5"));

		TitledBorder titulo21 = null;
		loweredbevel = BorderFactory.createRaisedBevelBorder();
		titulo21 = BorderFactory.createTitledBorder(loweredbevel,"Mes");
		panel2.setBorder(titulo21);

		TitledBorder titulo22 = null;
		loweredbevel = BorderFactory.createRaisedBevelBorder();
		titulo22 = BorderFactory.createTitledBorder(loweredbevel,"Ano");
		panel1.setBorder(titulo22);

		for (int i=0; i<4; i++) {
			buttons[i].addActionListener(this);
		}

		JPanel panel = new JPanel();
		panel.setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10));
		panel.add(panel2);
		panel.add(panel1);
		panel.add(sair);
		Paneldia = new JPanel(new GridLayout(7, 7));
		updateDayGrid();
		add(panel, BorderLayout.NORTH);
		add(Paneldia, BorderLayout.CENTER);
		pack();
		setVisible(true);

		sair.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});

	}

	public GregorianCalendar getCal () {
		return calendario;
	}
	public void actionPerformed (ActionEvent evt) {
		String label = ((JButton) evt.getSource()).getText();
		if (label.equals("\u22B2")) {
			int m = meses.indexOf(labelmes.getText());
			m = prevMonth(m);
			labelmes.setText((String) meses.get(m));
			updateDayGrid();
		}
		else if (label.equals("\u22B3")) {
			int m = meses.indexOf(labelmes.getText());
			m = nextMonth(m);
			labelmes.setText((String) meses.get(m));
			updateDayGrid();
		} 

		else if (label.equals("\u22B4")) {
			int y = 0;
			try {
				y = Integer.parseInt(labelano.getText());
			}
			catch (NumberFormatException e) {
				System.err.println(e.toString());
			}
			labelano.setText(String.valueOf(--y));
			updateDayGrid();
		}
		else if (label.equals("\u22B5")) {
			int y = 0;
			try {
				y = Integer.parseInt(labelano.getText());
			}
			catch(Exception e){}
			labelano.setText(String.valueOf(++y));
			updateDayGrid();
		}
		else {
			int m = meses.indexOf(labelmes.getText());
			int y = 0;
			int d = 0;
			try {
				y = Integer.parseInt(labelano.getText());
				d = Integer.parseInt(label);
			}
			catch(Exception e){}
			calendario = new GregorianCalendar(y, m, d);
			calendario.setLenient(false);
		}
	}



	private void updateDayGrid () {
		Paneldia.removeAll();
		
			int m = meses.indexOf(labelmes.getText());
			int y = 0;
			try {
				y = Integer.parseInt(labelano.getText());
			}
			catch(Exception e){}
			GregorianCalendar temp = new GregorianCalendar(y, m, 1);
			temp.setLenient(false);
			int offset = 0;
			switch(temp.get(GregorianCalendar.DAY_OF_WEEK)) {
			case GregorianCalendar.SUNDAY : offset = 0; break;
			case GregorianCalendar.MONDAY : offset = 1; break;
			case GregorianCalendar.TUESDAY : offset = 2; break;
			case GregorianCalendar.WEDNESDAY : offset = 3; break;
			case GregorianCalendar.THURSDAY : offset = 4; break;
			case GregorianCalendar.FRIDAY : offset = 5; break;
			case GregorianCalendar.SATURDAY : offset = 6; break;
			}
			String daynames[]={"Dom","Seg","Ter","Qua","Qui","Sex","Sab"};
			JLabel l[]=new JLabel[7];
			for(int i=0;i<7;i++){
				l[i]=new JLabel(daynames[i], JLabel.CENTER);
				Paneldia.add(l[i]);
				l[0].setForeground(Color.red);
				l[i].setForeground(Color.black);
			}
			for (int i=1; i<=offset; i++) {
				Paneldia.add(new JLabel(""));
			}
			JButton day;
			for (int i=1; i<=getLastDay(); i++) {
				Paneldia.add(day = new JButton(String.valueOf(i)));
				day.addActionListener(this);
				day.setForeground(Color.blue);
				Paneldia.setBackground(Color.white);
				if (i == calendario.get(Calendar.DATE) &&
						m == calendario.get(Calendar.MONTH) &&
						y == calendario.get(Calendar.YEAR)) {
					day.setForeground(Color.red);
				}
				for (int i1=0; i1<JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT; i1++) {
					day.addActionListener(new ActionListener() {  
						public void actionPerformed(ActionEvent e) {  
							CadastroEmpresa l = new CadastroEmpresa();
							l.setVisible(true);
							l.setSize(new Dimension(800,500));
						}  
					});  
				}  
			}
			for (int i=(offset+getLastDay()+1); i<=42; i++) {
				Paneldia.add(new JLabel(""));
			}
			repaint();
		}
		private int nextMonth (int month) {
			if (month == 11) {
				return(0);
			}
			return(++month);
		}
		private int prevMonth (int month) {
			if (month == 0) {
				return(11);
			}
			return(--month);
		}
		private int getLastDay () {
			int m = (meses.indexOf(labelmes.getText()) + 1);
			int y = 0;
			try {
				y = Integer.parseInt(labelano.getText());
			}
			catch(Exception e){}
			if ((m==4) || (m==6) || (m==9) || (m==11)) {
				return(30);
			}
			else if (m==2) {
				if (calendario.isLeapYear(y)) {
					return(29);
				}
				return(28);
			}
			return(31);
		}
	
	@SuppressWarnings("unused")
	public static void main(String[]args){
		GregorianCalendar cal=new GregorianCalendar();
		Calendario e =new Calendario(cal);
	}
}

Desde já agradeço a atenção.

você tem botões de navegação entre meses, como você quer fazer? Listar numa JTable, ou então em Jtextfilds, como quer mostra-los?

Já que tenho eventos nos botoes, poderia até abrir uma outra janela. Tipo clicar em algum botao (do mes ou do ano, ou criar outro) e abrir a opcao de ver o calendario do ano todo.

Nao sei se fui claro!

Isso é pra fins didáticos né?

pois se não use o JCalendar.

http://www.toedter.com/en/jcalendar/

Não sei se lhe vai ser útil, mas para fazer o que queres, um for resolve, basta escolher como queres imprimir.
A busca dos meses da-se por isto:

for(int i=0;i<=11;i++) {
       System.out.println("mes: "+meses.get(i));
   }

no código acima imprimi os meses no console, como falei, agora basta você imprimi-los onde quiser, JTable, buttons, Jtext, onde quiser ;}

O que eu quero é exibir todos os meses do ano,
assim como o exemplo acima que esta com apenas um mes visivel.(ou seja replicar o que eu tenho
de acordo com os meses corretos).