这是我的示例GUI草案,我只是想创建一个具有今天对应日期和日期的面板,该面板可以更改其今天计划的内容。

是否可以创建带有“今天的日期”和“今天的日期”标签的面板,该面板根据今天的日期和今天的数据更改内容?

最佳答案

这是一个简单的示例JFrame,带有显示当前日期的标签:

public class FrameWithTodaysDate extends JFrame {

    JLabel todayLabel = new JLabel();

    public FrameWithTodaysDate() {
        super("Day Demo");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setTodaysDate();
        add(todayLabel);

        pack();
    }

    private void setTodaysDate() {
        String today = LocalDate.now(ZoneId.of("Asia/Tokyo"))
                .format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));
        todayLabel.setText(today);
    }

    public static void main(String[] args) {
        new FrameWithTodaysDate().setVisible(true);
    }

}


今天在我的计算机上,它看起来像:

java - 创建一个带有今天日期标签的面板,该面板会根据今天的数据更改内容-LMLPHP

请填写我放置亚洲/东京的所需时区。

如果您需要在新的一天开始时(午夜)更新框架中的日期,请使用Sergiy Medvynskyy在a comment中建议的计时器。我正在重写setTodaysDate

private void setTodaysDate() {
    ZonedDateTime now = ZonedDateTime.now(zone);
    LocalDate today = now.toLocalDate();
    String todayString = today.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));
    todayLabel.setText(todayString);

    int millisUntilTomorrow = (int) ChronoUnit.MILLIS.between(now,
            today.plusDays(1).atStartOfDay(zone));
    Timer nextUpdate = new Timer(millisUntilTomorrow, e -> setTodaysDate());
    nextUpdate.setRepeats(false);
    nextUpdate.start();
}


由于我考虑了夏令时(DST)等因素,因此看起来有点复杂:一天可能是23或25个小时,并且可能不会从00:00开始。

为了使方法有效,我们需要

    private ZoneId zone = ZoneId.of("Asia/Tokyo");


就是这样。

关于java - 创建一个带有今天日期标签的面板,该面板会根据今天的数据更改内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49941143/

10-12 16:55