本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
如何创建带选择器的日期或时间字段
用途。 创建一个字段,在被点击时打开 DatePicker(日历)或 TimePicker(时钟),并按 locale 格式填入字段。用户也可以直接用掩码输入。
用到的 API
campo.setMode(EditMode.DATE, true)— 带maskedEdit的日期模式。根据 locale 推导掩码:LocaleFormats.dateFormat == YMD → "9999-99-99",否则为"99/99/9999"(使用LocaleFormats.dateSeparator);validChars = "0123456789";keyboard = DATE。点击时打开DatePicker。campo.setMode(EditMode.TIME, true)— 带掩码"99:99"(使用LocaleFormats.timeSeparator)的时间模式;keyboard = TIME。点击时打开TimePicker。TextField.getText()— 带分隔符的格式化文本("15/03/2024"、"14:30")。TextField.getTextWithoutMask()— 只有数字("15032024"、"1430")。
内部行为(自动,无需额外代码):
- 打开时,如果当前值可解析,字段会用当前值预填充选择器(日期用
DateTimeUtils.parseDate;时间用数字hhmm)。 - 在选择器中确认时,内部的
onSelect会用格式化的值调用setText(...),并将焦点恢复到文本末尾(restoreFocusAtEnd)。 DatePicker/TimePicker按实例创建一次(惰性)并被复用。
要手动打开选择器(在字段之外),请使用
new DatePicker().onSelect(...).show()或new TimePicker().onSelect(...).show()。有用的 getter:DatePicker.getSelectedDay()/getDisplayMonth()/getDisplayYear()、TimePicker.getHour()/getMinute()/getTimeText()。
完整示例(复制、粘贴并运行)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*; // TextFieldStyle(在样式中配置)
/** 可执行的主界面。将 launcher 指向此类(classname)并运行:gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// 日期字段 — 点击时打开 DatePicker
TextField data = new TextField("");
data.caption("Data");
data.setMode(EditMode.DATE, true);
// 时间字段 — 点击时打开 TimePicker
TextField hora = new TextField("");
hora.caption("Hora");
hora.setMode(EditMode.TIME, true);
Label resultado = new Label("");
Button salvar = new Button("Salvar");
salvar.onAction(o ->
{
String dataFmt = data.getText(); // "15/03/2024"
String horaFmt = hora.getText(); // "14:30"
if (dataFmt.isEmpty() || horaFmt.isEmpty())
{
Hint.show("Preencha data e hora", 2000);
return;
}
resultado.setText("Agendado para " + dataFmt + " às " + horaFmt);
});
add(LAY_FILL, data);
add(LAY_FILL, hora);
add(LAY_AUTO, salvar);
add(LAY_FILL, resultado);
}
}
下面的片段只展示核心部分。要运行它,请将其放入上面的
MainWindow骨架中。
最小片段
import dev.crossfly.ui.*;
import dev.crossfly.ui.style.*;
import static dev.crossfly.ui.UIConstants.EditMode;
// 日期字段 — 点击时打开 DatePicker
TextField data = new TextField("");
data.caption("Data");
data.setMode(EditMode.DATE, true);
// 时间字段 — 点击时打开 TimePicker
TextField hora = new TextField("");
hora.caption("Hora");
hora.setMode(EditMode.TIME, true);
Button salvar = new Button("Salvar");
salvar.onAction(o ->
{
String dataFmt = data.getText(); // "15/03/2024"
String horaFmt = hora.getText(); // "14:30"
String dataDig = data.getTextWithoutMask(); // "15032024"
// ... 持久化
});
深入了解
- DatePicker · 掩码与键盘
- 姊妹配方:CPF/CEP/日期掩码 · 数字键盘
这个页面有帮助吗?感谢你的反馈!