Tenho um Frame com um JInternalFrame que carrega uma telinha com a data(dd/MM/yyyy) e a hora(HH:mm:ss) eu queira que a a hora fosse atualizada a cada segundo.
publicvoidmostrahorario(){GridBagConstraintscons=newGridBagConstraints();GridBagLayoutlayout=newGridBagLayout();setLayout(layout);cons.anchor=GridBagConstraints.CENTER;cons.fill=GridBagConstraints.BOTH;cons.insets=newInsets(4,4,4,4);DateFormatformatdate=newSimpleDateFormat("dd/MM/yyyy HH:mm:ss");Datedata=newDate();JLabeltitulodataJL=newJLabel("DATA DO SISTEMA");titulodataJL.setFont(newFont(null,Font.BOLD,20));JLabeldataJL=newJLabel(formatdate.format(data));dataJL.setFont(newFont(null,Font.BOLD,20));JLabelnomecontaJL=newJLabel();getContentPane().add(titulodataJL,cons);cons.gridy=3;getContentPane().add(dataJL,cons);cons.gridy=2;getContentPane().add(nomecontaJL,cons);cons.gridy=2;}
A resposta mais simples para seu problema é Threads. Talvez o padrão Observer ajude, pois seria uma das maneiras mais fáceis de atualizar o seu dataJL. Na seção de tutoriais tem uma explicação bem legal sobre Observer (apesar que talvez nem seja necessário, dependendo da situação somente Threads podem resolver).
Só mais uma dica: prefira usar a class Calendar a usar a Date, que já tem vários métodos e construtores deprecated.
J
javando
cara, o amigo que falou das threads está corretíssimo
porém é uma grande perda de performance vc usar uma thread só fazer um relogio … (a não ser que o seu objetivo seja aprender)
pega na net um relógio feito em flash ou en outra coisa … sei lah … mas um thread só pra fazer um relógio, é jogar memória pela janela rsrs …XD
falows
M
marcobiscaro2112
sergio_ferraz:
Se for usar threads, pode fazer algo semelhante a isso:
publicclassSampleimplementsRunnable{publicvoidrun(){while(true){Dated=newDate();DateFormatdf=newSimpleDateFormat("dd/MM/yyyy HH:mm:ss");System.out.println(df.format(d));//Aqui você atualizaria seu Labeltry{Thread.sleep(1000);}catch(InterruptedExceptione){e.printStackTrace();}}}publicstaticvoidmain(String[]args){Threadt=newThread(newSample());t.start();}}
Lembrando que não é garantido que o método run() irá executar sempre à cada 1 segundo, e sim pelo menos à cada 1 segundo.
Imagine ter criar um objeto Date e um SimpleDateFormat a cada iteração. O processamento vai parar onde? Crie apenas um, algo como: