我正在编程一个bean(正在学习Java和Java bean),它是扩展了JLabel
的数字手表。显示的文字为hh:mm:ss
。
当我尝试在新项目中使用组件(手表)时,它默认显示系统日期(我将bean编程为以这种方式工作)。但是,我想允许开发人员(在本例中为我自己)可以编辑属性“ hora”以设置其他日期。因此,如果开发人员将组件插入新项目中,则文本必须是系统时间。但是,如果开发人员编辑属性“ hora”并设置新日期,例如再增加一小时,则显示的文本应为新值,在此示例中为system date + 1 hour
。
我当前的代码部分起作用:
上一张图片:
如何更改此行为?因此,当我运行项目时,显示的时间与在“ 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和Java Bean)
您应该知道,在视觉设计工具中使用JavaBeans作为组件从来没有流行。我很惊讶NetBeans仍然支持这一点。我建议您在该用例上不要花太多时间或精力。
它默认显示系统日期(我将bean编程为以这种方式工作。)
您正在使用可怕的日期时间类,这些日期和时间类被JSR 310中定义的现代java.time类取代了。
请勿使用Date
或SimpleDateFormat
。如果必须与尚未更新为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 ) ;