Esse artigo é sobre uma classe do projeto Towel, para utiliza-la, baixe a biblioteca na pagina Towel Project desse blog.

Esse componente foi feito em 1999 pelo meu professor de Java enquanto ele fazia estagio na area, por esse motivo eu desculpo ele por ter usado null-layout, mas refatorei ele para ser mais generico e independente de LayoutManagers.

O CalendarView é um componente que exibe um JTextField e um JButton juntos.
O JTextField serve para digitar dadas no formato ‘dd/MM/yyyy’ e o JButton abre uma JWindow que permite escolher a data em um calendario.

Para utiliza-lo é bem simples:

import java.awt.event.*;
import javax.swing.*;

import com.towel.swing.calendar.CalendarView;

public class CalendarViewTest {
	public CalendarViewTest() {
		JFrame frame = new JFrame("CalendarView");
		JPanel content = new JPanel();
		final CalendarView view = new CalendarView();
		JButton button = new JButton("X");
		content.add(view);
		content.add(button);
		button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println(view.getSelectedDate());
			}
		});

		frame.setContentPane(content);
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		new CalendarViewTest();
	}
}

Esse codigo exibe a seguinte janela:

E quando pressionado o botao “..” a JWindow aparece com o DatePicker para escolher uma data.

Escolhendo alguma data o valor é exibido no campo de texto.

Para obter o valor que o usuario digitou (em uma ação por exemplo), temos dois métodos:

  • getText() que retorna o texto do TextField
  • getSelectedDate() que retorna um objeto Calendar com a data selecionada pelo usuario.
  • E no caso do código de exemplo, ao pressionar ‘X’ é exibido o toString do objeto Calendar que for escolhido.

    Como sempre, ainda é possivel melhorar esse componente, e essa é a lista do que já pode ser feito:

  • Um Layout melhor para o JWindow.
  • Internacionalizar os textos (nome do mês, inicial do dia, botão “hoje”)
  • Poder digitar datas no formato MM/dd/yyyy