如何为Java bean属性设置新值(日期)?

问题描述 投票:3回答:1

我正在编程一个bean(正在学习Java和Java bean),它是扩展了JLabel的数字手表。显示的文字为hh:mm:ss

当我尝试在新项目中使用组件(手表)时,它默认显示系统日期(我将bean编程为以这种方式工作)。但是,我想允许开发人员(在本例中为我自己)可以编辑属性“ hora”以设置其他日期。因此,如果开发人员将组件插入新项目中,则文本必须是系统时间。但是,如果开发人员编辑属性“ hora”并设置新日期,例如再增加一小时,则显示的文本应为新值,在此示例中为system date + 1 hour

我当前的代码部分起作用:

Use of the bean in a new project with the date changed.

上一张图片:

  • 在右侧,属性“ hora”具有值:系统日期+ 1小时。
  • 在左侧,NetBeans的预览视图显示正确的时间(系统时间+ 1小时)。分钟数的差异是因为手表可以工作,并且每秒钟都会改变时间。屏幕快照是在编辑属性值后几分钟生成的。
  • 在中心,项目正在运行,并显示错误的日期(系统日期)。
  • 请忽略按钮和微调器,它们仅用于测试目的。

如何更改此行为?因此,当我运行项目时,显示的时间与在“ hora”属性中选择的时间相同?

相关代码:

public class Reloj extends JLabel implements Serializable {
    private Date hora = new Date();
    private SimpleDateFormat formatoHora;
    private boolean doceHoras = false;

    public Reloj() {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
             public void run() {
                setHora(new Date((getHora().getTime())+1000));

            }
        }, 0, 1000);
    }

    public Date getHora() {
        return this.hora;
    }

    public void setHora(Date hora) {
        this.hora = hora;
        this.setText(this.getFormatoHora().format(hora));
        this.repaint();
    }

    public SimpleDateFormat getFormatoHora() {
        if (this.isDoceHoras()) {
            this.formatoHora = new SimpleDateFormat("hh:mm:ss a");
        } else {
            this.formatoHora = new SimpleDateFormat("HH:mm:ss");
        }
        return this.formatoHora;
    }

    public void setDoceHoras(boolean doceHoras) {
        this.doceHoras = doceHoras;
        this.setHora(hora);
    }
}

感谢您的帮助,对不起我的英语。

java date netbeans javabeans jlabel
1个回答
0
投票

((我正在学习Java和Java Bean)

您应该知道,在视觉设计工具中使用JavaBeans作为组件从来没有流行。我很惊讶NetBeans仍然支持这一点。我建议您在该用例上不要花太多时间或精力。

它默认显示系统日期(我将bean编程为以这种方式工作。)

您正在使用可怕的日期时间类,这些日期和时间类被JSR 310中定义的现代java.time类取代了。

请勿使用DateSimpleDateFormat。如果必须与尚未更新为java.time

的旧代码进行互操作,请在java.time中进行所有逻辑处理,最后使用添加到旧类中的新方法进行转换。

对于一天中唯一的值,没有日期,没有时区,请使用LocalTime

获取当前时刻涉及获取当前时刻。这需要一个时区。对于任何给定时刻,日期和时间都会在全球各地按时区变化。

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalTime lt = LocalTime.now( z ) ;

因此,如果开发人员将组件插入新项目中,则文本必须是系统时间。

您可以解析用户输入的文本。如果采用24小时制[H]:MM:SS的标准ISO 8601格式,则无需指定格式格式。 java.time类在解析/生成文本时默认使用标准格式。

String input = "23:01:23" ;
LocalTime lt = LocalTime.parse( input ) ;
© www.soinside.com 2019 - 2024. All rights reserved.