DatePicker
DatePicker seleciona uma data num calendário mensal, com navegação por mês, por ano e grades de seleção rápida de mês/ano. Segue o padrão dos pickers: devolve o valor via getAnswer() consumido por show(onAnswer) ao fechar (ver Picker).
🟡 · Pacote:
dev.crossfly.ui.picker· Estende:Picker· Estilo:DatePickerStyle
Quando usar
- Coletar uma data (aniversário, agendamento, vencimento) com UI de calendário.
Quando NÃO usar
- Coletar hora → use
TimePicker.
Aparência
Cartão com barra de título, linha de mês (< Nome >), linha de ano (< 2026 >) e uma grade de 6×7 células de dias. Dimensiona-se em ~90% de Screen.minSize.
Exemplo completo (copiar, colar e rodar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.picker.*;
/** Tela principal executável. Aponte o launcher (classname) e rode: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
Button abrir = new Button("Escolher data");
abrir.onAction(c ->
{
DatePicker dp = new DatePicker().title("Data de nascimento");
dp.show(answer -> Hint.show("Data: " + (String) answer, 2000));
});
add(LAY_AUTO, abrir);
}
}
Os trechos abaixo mostram só o miolo (o que vai dentro de
onShow()). Para rodar, coloque-os no esqueletoMainWindowacima.
Uso básico
DatePicker dp = new DatePicker();
dp.show(answer -> campoData.setText((String) answer));
Construtores
| Construtor | Descrição |
|---|---|
DatePicker() |
Sem parâmetros; inicia na data de hoje. |
Propriedades e personalização (fluentes)
| Método | Tipo | Default | O que faz |
|---|---|---|---|
setDate(int year, int month, int day) |
ano, mês 0-based, dia 1-based | hoje | Pré-seleciona a data. |
title(String) |
String |
"Date Picker" |
Texto da barra de título. |
yearRange(int before, int after) |
int, int |
30, 10 | Anos antes/depois para a grade de anos. |
style(DatePickerStyle) |
estilo | skin | Estilo customizado. |
getSelectedDay() |
int |
— | Dia selecionado (1-based). |
getDisplayYear() / getDisplayMonth() |
int |
— | Ano / mês exibidos (mês 0-based). |
Callbacks e eventos
| Callback | Quando dispara |
|---|---|
onSelect(Action) |
ao tocar num dia (recebe o próprio DatePicker). |
show(onAnswer) |
ao fechar, entrega a String da data (se confirmada). |
getAnswer() retorna a data no formato de DateTimeUtils.formatDate — a ordem (DMY/MDY/YMD) e o separador dependem de LocaleFormats, não é fixo dd/MM/yyyy.
Estados
- Navegar entre meses zera
selectedDaypara-1(nenhum dia marcado até o usuário escolher). - Estilos por estado: hoje, selecionado, outro mês, normal (via
DatePickerStyle).
Data de nascimento
DatePicker dp = new DatePicker()
.title("Data de nascimento")
.yearRange(100, 0) // até 100 anos atrás, nenhum no futuro
.setDate(2000, 0, 1); // 01/Jan/2000 (mês 0-based!)
dp.onSelect(p ->
{
DatePicker d = (DatePicker) p;
Debug.log("dia=" + d.getSelectedDay() + " mes=" + (d.getDisplayMonth() + 1));
});
dp.show(answer ->
{
String data = (String) answer; // ex.: "01/01/2000" conforme LocaleFormats
campoData.setText(data);
});
Boas práticas
- Lembre que
monthé 0-based emsetDate. - Para localizar nomes de meses/dias, reatribua as constantes públicas
MONTH_NAMES/MONTH_SHORT.
Erros comuns
- Passar mês 1-based em
setDate— janeiro é0. - Esperar formato fixo — a saída segue
LocaleFormats.dateFormat/dateSeparator. yearRangecomo clamp de seleção — ele só limita a navegação de anos; qualquer dia do mês exibido é selecionável.
Veja também
- Guia da área:
ui/· Receitas:cookbook/ - Base do padrão:
Picker - Componentes relacionados:
TimePicker
Esta página foi útil?Obrigado pelo feedback!