Olá. Criei uma aplicação com um Jframe, onde necessito inserir um relógio dentro do meu Jframe.
Encontrei essa thread interessante na internet:
publicclassRelogioThreadextendsJFrame{JLabellabel;// label onde será impressa a hora atualpublicRelogioThread(){//construtorsuper("RELÓGIO");//seta o título do JFramesetSize(250,60);//seta o tamanho do JFramesetVisible(true);//seta visívelContainertela=getContentPane();//container onde ficara o labellabel=newJLabel();//instancia o labeltela.add(label);//adiciona o label à telalabel.setBounds(65,0,45,85);//seta a posição do labeliniciaRelogio();//inicia o relógio}publicvoidiniciaRelogio(){newThread(){//instancia nova thread já implementando o método run()@Overridepublicvoidrun(){//sobrescreve o método run()while(0==0){//while para fazer o loop infinitoGregorianCalendargc=newGregorianCalendar();//novo gregorian calendar, onde temos a data atualinthora=gc.get(Calendar.HOUR_OF_DAY);//pega as horasintminuto=gc.get(Calendar.MINUTE);//pega os minutosintsegundo=gc.get(Calendar.SECOND);//pega os segundosStringhoraString;//nova string horasStringminString;//nova string minutosStringsegundoString;//nova string segundosif(hora<10){//se hora for menor que 10 precisa colocar um 0 à esquerdahoraString="0"+hora;}else{horaString=""+hora;}if(minuto<10){//se minuto for menor que 10 precisa colocar um 0 à esquerdaminString="0"+minuto;}else{minString=""+minuto;}if(segundo<10){//se segundo for menor que 10 precisa colocar um 0 à esquerdasegundoString="0"+segundo;}else{segundoString=""+segundo;}label.setText(horaString+":"+minString+":"+segundoString);//seta hora atual no labeltry{sleep(1000);//faz a thread entrar em estado de espera por 1000 milissegundos ou 1 segundo}catch(Exceptione){}}}}.start();//inicia a thread.}
Contudo não gostaria de criar uma janela nova, e sim acoplar esta thread dentro de um label na minha Jframe.
É possível? Vlw =]
O segundo mostra com Threads, java.util.Timer e javax.Swing.Timer.
Não recomendo baixar uma API externa pra tão pouco.
A
andrestrindade
Na verdade, a minha dificuldade é com o Jframe/NETBEANS.
Como criar um Jframe dinâmico? Eu possuo outros elementos gráficos, botões com eventos, tudo OK.
O que tá pegando é esse Label dinâmico que não sei como fazer mesmo
Esses exemplos não foram esclarecedores, eu já havia pesquisado.
O segundo mostra com Threads, java.util.Timer e javax.Swing.Timer.
Não recomendo baixar uma API externa pra tão pouco.
O Thread está funcionando. Como falei, a dificuldade com o Jframe/NETBEANS, o problema é que não sei como inserir meu thread dentro do meu JFrame, pois tenho outros elementos neles, como botões, etc.
E
entanglement
Não use threads à toa. Use um javax.swing.Timer, que usa apenas 1 thread para todos os timers necessários (mesmo que você crie N instâncias de javax.swing.Timer no seu programa).
E como de costume, veja mais uma vez o exemplo dado em:
packageguj;importjava.awt.BorderLayout;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.SwingUtilities;publicclassExemploRelogioextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateJPaneljContentPane=null;privateJPanelpnlMain=null;privateRelogiorel01=null;privateRelogiorel02=null;privateRelogiorel03=null;privateRelogiogetRel01(){if(rel01==null){rel01=newRelogio();rel01.setFormato("dd/MM/yyyy HH:mm:ss.SSS");}returnrel01;}privateRelogiogetRel02(){if(rel02==null){rel02=newRelogio();rel02.setFormato("hh:mm:ss a");}returnrel02;}privateRelogiogetRel03(){if(rel03==null){rel03=newRelogio();rel03.setFormato("EEEEE, dd 'de' MMMMM 'de' yyyy, HH:mm:ss");}returnrel03;}privateJPanelgetPnlMain(){if(pnlMain==null){pnlMain=newJPanel();pnlMain.setLayout(newBorderLayout());pnlMain.add(getRel01(),BorderLayout.NORTH);pnlMain.add(getRel02(),BorderLayout.CENTER);pnlMain.add(getRel03(),BorderLayout.SOUTH);}returnpnlMain;}publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){ExemploRelogiothisClass=newExemploRelogio();thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thisClass.setVisible(true);}});}publicExemploRelogio(){super();initialize();}privatevoidinitialize(){this.setSize(300,200);this.setContentPane(getJContentPane());this.setTitle("Exemplo de Relógio em um JFrame");}privateJPanelgetJContentPane(){if(jContentPane==null){jContentPane=newJPanel();jContentPane.setLayout(newBorderLayout());jContentPane.add(getPnlMain(),BorderLayout.NORTH);}returnjContentPane;}}
A
andrestrindade
Agradeço a todos que tentaram ajudar, eu já ví exemplos interessantes de relógio, existem váários no forum.
Não vou mais criar uma thread pra isso, porém a minha dúvida não é no relógio, e sim em inserir isso no meu Jframe.
O Netbeans parece super engessado! Está muito difícil =/
E
entanglement
Mas é na verdade bastante simples. Vou pegar o mesmo exemplo (que criei no Eclipse), e pô-no no Netbeans para você ver.
A
andrestrindade
entanglement:
Mas é na verdade bastante simples. Vou pegar o mesmo exemplo (que criei no Eclipse), e pô-no no Netbeans para você ver.
Eu sou noob no Jframe… Programar a parte gráfica na unha é melhor? Eu não uso netbeans, só baixei pra este projeto por causa do Jframe, mas achei engessado!
Acho que vou estudar essa parte de interface gráfica. Como neste projeto a “beleza e organização gráfica” são o de menos, baixei o Jframe pra ser mais rápido =)
Muito obrigado pela ajuda e boa vontade!
E
entanglement
Copie o arquivo Relogio.java (o que já postei acima) em algum lugar do seu projeto.
Compile seu projeto.
Arraste Relogio.java onde você quiser que ele fique no seu JFrame.
Acerte a propriedade “Formato” como você quiser que fique seu relógio.
0) Copie o arquivo Relogio.java (o que já postei acima) em algum lugar do seu projeto.
Compile seu projeto.
Arraste Relogio.java onde você quiser que ele fique no seu JFrame.
Acerte a propriedade “Formato” como você quiser que fique seu relógio.
Pronto! Agora deve funcionar.
Tá brincando que eu posso arrastar a classe pra dentro do projeto? :shock:
Quando chegar em casa eu vou tentar, desde já te agradeço MUITO pela boa vontade!
Te devo uma breja
E
entanglement
Não pule o passo 1 (Compilar o projeto). Se pular isso, o .class do Relogio.java não terá sido gerado, e você não conseguirá arrastar o componente para dentro do frame. OK?
A
andrestrindade
Pode deixar, quando eu mexer nisso posto aqui os resultados! :>
A
andrestrindade
Cara, deu certíssimo! Além de ser uma solução simples, consegui entender coisas fundamentais sobre JFrame.
Muitissimo obrigado! :>
E
entanglement
Isso pode fazer parte de uma série “Como é fácil criar componentes visuais no NetBeans”. Se eu tiver muita paciência, talvez faça um relógio analógico.
A
andrestrindade
É possível o usuário setar um horário? Se eu criar um JTextField ou algo do tipo, como limito a quantidade de caracteres e aplico uma máscara? E limito pra numérico? vlw =)