前提・実現したいこと
Javaでリアルタイムで時間を表示するプログラムを作成しています。
homeのWatchボタンを押下すると、Watch画面に遷移し、時間がリアルタイムで表示したいです。
ここに質問の内容を詳しく書いてください。
watxhファイルのmain関数から実行するとリアルタイムで表示されますが、homeのボタン押下時にはリアルタイムで動作しません。
該当のソースコード
//home.java
import
1import javax.swing.*; 2import java.awt.event.*; 3 4 5public class home extends JPanel{ 6 public home(JFrame home){ 7 int i; 8 int x,y; 9 String[] app_name = {"Calc","Watch"}; 10 11 setLayout(null); 12 13 for(i = 0;i < app_name.length;i++) 14 { 15 x = (i % 3) * 50 + 50; 16 y = (int)(i / 3) * 50 + 50; 17 app_button nb = new app_button(x,y,app_name[i],home); 18 } 19 } 20 21 public class app_button{ 22 public app_button(int x,int y,String app_name,JFrame home){ 23 JButton ab = new JButton(app_name);//コンストラクタ 新しく生成 24 add(ab); ab.setBounds(x,y,50,50); 25 26 ab.addActionListener(new ActionListener() 27 { 28 public void actionPerformed(ActionEvent evt) 29 { 30 if(app_name == "Calc") 31 { 32 JFrame dentaku = new JFrame(); 33 dentaku.add(new dentaku(dentaku)); 34 dentaku.setSize(500,500); 35 dentaku.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 36 dentaku.setVisible(true); 37 home.setVisible(false); 38 } 39 else if(app_name == "Watch") 40 { 41 home.setVisible(false); 42 JFrame watch1 = new JFrame(); 43 44 while(true)//ここでリアルタイムで時間表示するためにwatchを呼び出し(できない) 45 { 46 watch1.add(new watch(watch1)); 47 watch1.setSize(500,500); 48 watch1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 49 watch1.setVisible(true); 50 } 51 52 } 53 } 54 }); 55 } 56 } 57 58 59 public static void main(String[] args){ 60 JFrame home = new JFrame(); 61 home.add(new home(home)); 62 home.setSize(500,500); 63 home.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 64 home.setVisible(true); 65 66 JFrame watch1 = new JFrame(); 67 68 } 69} 70 71コード
import javax.swing.*; import java.awt.event.*; import java.util.Date; public class watch extends JPanel{//JPanelを独自に変更 JLabel watch_Label = new JLabel("東京"); JLabel watch_time = new JLabel(); public watch(JFrame watch1) { setLayout(null); add(watch_Label); watch_Label.setBounds(50,50,100,50); home_back_button hbb = new home_back_button(watch1); time(); } public void time() { var nowtime = new Date(); var nowhour = nowtime.getHours(); var nowminute = nowtime.getMinutes(); var nowsecond = nowtime.getSeconds(); try { Thread.sleep(100); watch_time = new JLabel(nowhour + "時" + nowminute + "分" + nowsecond + "秒"); add(watch_time); watch_time.setBounds(50,100,100,50); } catch(Exception e) { System.out.println("Error"); } } public class home_back_button{ public home_back_button(JFrame watch1){ JButton hbb = new JButton("Home"); add(hbb); hbb.setBounds(50,300,200,50); hbb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JFrame home = new JFrame(); home.add(new home(home)); home.setSize(500,500); home.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); home.setVisible(true); watch1.setVisible(false); } }); } } public static void main(String[] args){ JFrame watch1 = new JFrame(); while(true)//ここでリアルタイムで時間表示するためにwatchを呼び出し(できる) { watch1.add(new watch(watch1)); watch1.setSize(500,500); watch1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); watch1.setVisible(true); } } } コード
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー