33.md 4.2 KB
Newer Older
W
wizardforcel 已提交
1
# Vaadin `DateField`教程
W
wizardforcel 已提交
2 3 4 5 6

> 原文: [http://zetcode.com/vaadin/datefield/](http://zetcode.com/vaadin/datefield/)

在 Vaadin DateField 教程中,我们学习 Vaadin `DateField`组件的基础。 在 Vaadin DateField 示例中,所选日期将转换为回教日期,并显示在`Label`组件中。

W
wizardforcel 已提交
7
## Vaadin
W
wizardforcel 已提交
8

W
wizardforcel 已提交
9
Vaadin 是一种流行的 Java Web 开发框架,用于构建单页 Web 应用。
W
wizardforcel 已提交
10

W
wizardforcel 已提交
11
## Vaadin `DateField`
W
wizardforcel 已提交
12 13 14

`DateField`是日期输入组件,它将实际的日期选择器显示为弹出窗口。

W
wizardforcel 已提交
15
## Vaadin `DateField`示例
W
wizardforcel 已提交
16 17 18

以下程序演示了 Vaadin `DateField`组件的用法。 所选日期将转换为回教日期,并显示在`Label`组件中。

W
wizardforcel 已提交
19
NetBeans IDE 可用于轻松创建 Vaadin Web 应用。 我们需要安装 NetBeans Vaadin 插件,然后创建一个新的 Vaadin Web 应用项目。
W
wizardforcel 已提交
20 21 22

`MyUI.java`

W
wizardforcel 已提交
23
```java
W
wizardforcel 已提交
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
package com.zetcode.main;

import javax.servlet.annotation.WebServlet;

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.data.HasValue;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.zetcode.service.DateConvert;
import java.time.LocalDate;
import java.time.chrono.HijrahDate;

@Theme("mytheme")
public class MyUI extends UI {

    @Override
    protected void init(VaadinRequest vaadinRequest) {

        VerticalLayout layout = new VerticalLayout();

        DateField field = new DateField();
        Label lbl = new Label();

        field.addValueChangeListener((HasValue.ValueChangeEvent<LocalDate> event) -> {

            LocalDate date = (LocalDate) event.getValue();

            HijrahDate hjdate = DateConvert.toIslamic(date);
            lbl.setValue(hjdate.toString() + "!");
        });

        layout.addComponents(field, lbl);
        layout.setMargin(true);
        layout.setSpacing(true);

        setContent(layout);
    }

    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
    public static class MyUIServlet extends VaadinServlet {
    }
}

```

这是`MyUI`类。

W
wizardforcel 已提交
78
```java
W
wizardforcel 已提交
79 80 81 82 83 84
VerticalLayout layout = new VerticalLayout();

```

在我们的示例中,我们在`VerticalLayout`列中显示两个组件。

W
wizardforcel 已提交
85
```java
W
wizardforcel 已提交
86 87 88 89 90 91
DateField field = new DateField();

```

创建一个`DateField`组件。

W
wizardforcel 已提交
92
```java
W
wizardforcel 已提交
93 94 95 96 97 98
Label lbl = new Label("");

```

`Label`组件将支付从日期字段中选择的值。

W
wizardforcel 已提交
99
```java
W
wizardforcel 已提交
100 101 102 103 104 105 106 107 108 109 110 111
field.addValueChangeListener((HasValue.ValueChangeEvent<LocalDate> event) -> {

    LocalDate date = (LocalDate) event.getValue();

    HijrahDate hjdate = DateConvert.toIslamic(date);
    lbl.setValue(hjdate.toString() + "!");
});

```

使用`addValueChangeListener()`,我们为`DateField`中的值更改添加了一个侦听器。 我们用`getValue()`方法获得`DateField`当前选择的项目。 使用`DateConvert.toIslamic()`将检索到的值转换为回教日期,并使用`setValue()`方法将其设置为标签。

W
wizardforcel 已提交
112
```java
W
wizardforcel 已提交
113 114 115 116 117 118
layout.addComponents(field, lbl);

```

通过`addComponents()`方法将这两个组件添加到`VerticalLayout`

W
wizardforcel 已提交
119
```java
W
wizardforcel 已提交
120 121 122 123 124 125 126 127
layout.setMargin(true);

```

我们在`VerticalLayout`周围留了一些余量。

`DateConvert.java`

W
wizardforcel 已提交
128
```java
W
wizardforcel 已提交
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
package com.zetcode.service;

import java.time.LocalDate;
import java.time.chrono.HijrahChronology;
import java.time.chrono.HijrahDate;

public class DateConvert {

    public static HijrahDate toIslamic(LocalDate date) {

        HijrahDate hjdate = HijrahChronology.INSTANCE.date(date);

        return hjdate;
    }
}

```

`DateConvert`类中,我们使用`HijrahChronology`计算伊斯兰日期。

![Vaadin DateField](img/e1d1901f1c9bc1deaad0c71e33490033.jpg)

Figure: Vaadin DateField

在本教程中,我们展示了 Vaadin `DateField`组件的基础。 您可能也对相关教程感兴趣: [Vaadin 网格教程](/vaadin/grid/)[Vaadin 链接教程](/vaadin/link/)[Vaadin Button 教程](/vaadin/button/)[Vaadin 滑块教程](/vaadin/slider/)[Vaadin CheckBox 教程](/vaadin/checkbox/)[Java 教程](/lang/java/)