2016-06-27 5 views
0

単純なJavaタイマーを作成していますが、「開始」ボタンをクリックすると時間を表示するJPanelは更新されません。私はJPanelを更新するためにスイングタイマーを使用したが、役に立たなかった。間違ったコンポーネントで使っていますか?ここで は私のコードです...Javaタイマープログラムは表示された時間を更新しません

のJFrame(メインタイマーコンポーネント)

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class theTimer extends JFrame{ 

    //Initialize fields 
    private TimerPanel tp = new TimerPanel(); 
    private JButton start,stop,reset; 
    private Dimension buttonSize = new Dimension(80,30); 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    //Main Method 
    public static void main(String[] args){ 
     theTimer tT = new theTimer(); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    //Constructor 
    public theTimer(){ 
     setLayout(new FlowLayout()); 
     setSize(400,400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setResizable(false); 
     add(tp); 
     addButtonAction(); 
     setButtonSize(); 
     add(start); add(stop); add(reset); 
     setTitle("Java Study Timer"); 
     setVisible(true); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    //Set the size of the timer buttons 
    private void setButtonSize(){ 
     start.setPreferredSize(buttonSize); 
     stop.setPreferredSize(buttonSize); 
     reset.setPreferredSize(buttonSize); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    //Gives the buttons functionality 
    private void addButtonAction(){ 
     start = new JButton("Start"); 
     stop = new JButton("Stop"); 
     reset = new JButton("Reset"); 
     start.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent event){ 
       tp.startTimer(); 

      } 
     }); 
     stop.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent event){ 
       tp.stopTimer(); 

      } 
     }); 
     reset.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent event){ 
       tp.resetTimer(); 
      } 
     }); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
} 

ここでのJPanelクラスは(何ディスプレイ時間)

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.*; 

public class TimerPanel extends JPanel{ 
    private int min,sec; 
    private String theTime = min + ":" + sec; 
    private int width=350, height=300; 
    private boolean timerStarted=false; 
    private Timer swingTimer = new Timer(900, new ActionListener(){ 
     public void actionPerformed(ActionEvent event){ 
      if(sec<60){ 
       sec++; 
       repaint(); 
      }else{ 
       min++; 
       sec=0; 
       repaint(); 
      } 
     } 
    }); 
    //Constructor 
    public TimerPanel(){ 

    setPreferredSize(new Dimension(350,300)); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

    //start the timer 
    public void startTimer(){ 
     swingTimer.start(); 
    } 

    //Stop the timer 
    public void stopTimer(){ 
     swingTimer.stop(); 
    } 

    //reset the timer 
    public void resetTimer(){ 
     sec=0; min=0; 
     repaint(); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    //Paint Method 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.WHITE); 
     g.setFont(new Font("Arial", Font.PLAIN, 40)); 
     g.drawString(theTime, width/2-45, height/2); 
     setBackground(Color.BLACK); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
} 
+1

このコードはどのようにコンパイルされますか?クラスに存在しないように見えるTimerPanelのメソッドupdateTime()を呼び出しています。 –

+0

...........こんにちは?繰り返しますが、そのコードはコンパイルされますか?お答えください。 –

+0

申し訳ありませんが、この回答は投稿されていません。 updateTime()メソッドが残っていて、私の一部でエラーが発生しました。それがなければ、コードがコンパイルされます。 –

答えて

1

ある中で、次の文を挿入してくださいTimerPanel.java

theTime = min + ":" + sec;

の前に、それぞれrepaint();が出現し、結果が表示されます。上記の変更により

、次のようにTimerPanel.javaがある:それは必要とされていないので

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.*; 

public class TimerPanel extends JPanel{ 
    private int min,sec; 
    private String theTime = min + ":" + sec; 
    private int width=350, height=300; 
    private boolean timerStarted=false; 
    private Timer swingTimer = new Timer(900, new ActionListener(){ 
     public void actionPerformed(ActionEvent event){ 
      if(sec<60){ 
       sec++; 
       theTime = min + ":" + sec; 
       repaint(); 
      }else{ 
       min++; 
       sec=0; 
       theTime = min + ":" + sec; 
       repaint(); 
      } 
     } 
    }); 
    //Constructor 
    public TimerPanel(){ 

    setPreferredSize(new Dimension(350,300)); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

    //start the timer 
    public void startTimer(){ 
     swingTimer.start(); 
    } 

    //Stop the timer 
    public void stopTimer(){ 
     swingTimer.stop(); 
    } 

    //reset the timer 
    public void resetTimer(){ 
     sec=0; min=0; 
     theTime = min + ":" + sec; 
     repaint(); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    //Paint Method 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.WHITE); 
     g.setFont(new Font("Arial", Font.PLAIN, 40)); 
     g.drawString(theTime, width/2-45, height/2); 
     setBackground(Color.BLACK); 
    } 
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

} 

また、theTimer.javaからtp.updateTime();の出現をすべて削除してください。お役に立てれば。

+0

ありがとう、それは問題を解決しました! –

関連する問題