2012-02-17 15 views
0

私は目盛りボタンを押すとランタイムエラーが発生します。私はイベントを発生させるためにチックボタンが押されたときにjavax.swing.Timerを使用しようとしています。誰かが何か提案があれば、私はそれを感謝します。私は現在Eclipseを使用していますが、目盛りボタンを押すとランタイムエラーが発生します。javax.swing.Timerの問題点

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: The type ClockPanel must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent) at ClockPanel.actionPerformed(ClockPanel.java:10)

ここに私が使用しているコード(3クラス)があります。

import java.util.Calendar; 
import java.util.GregorianCalendar; 

class Clock 
{ 
    int hour; 
    int minute; 
    int second; 

    Calendar gregcal = new GregorianCalendar(); 
    int h = gregcal.get(Calendar.HOUR_OF_DAY); 
    int m = gregcal.get(Calendar.MINUTE); 
    int s = gregcal.get(Calendar.SECOND); 

    //default constructor 
    Clock() 
    { 
     hour = h; 
     minute = m; 
     second = s; 
    } 

    //parameterized constructor 
    Clock(int hour, int minute, int second) 
    { 
     this.hour = hour; 
     this.minute = minute; 
     this.second = second;  
    } 

    public int getHour() 
    { 
     return hour; 
    } 

    public int getMinute() 
    { 
     return minute; 
    } 


    public int getSecond() 
    { 
     return second; 
    } 

    public String toString() 
    { 
     return "The time is: " + hour + ":" + minute + ":" + second ;  
    } 

    public void tick() 
    { 
     second += 1; 
     if(second > 60) 
     { 
      second = 0; 
      minute++; 
     } 
     if(minute > 60) 
     { 
      minute =0; 
      hour++; 
     } 
     if(hour > 24) 
     { 
      hour = 0; 
     } 
     System.out.println(this.toString()); 
    } 
} 

// next class 


import java.awt.*; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

import javax.swing.*; 

public class TestClock 
{ 
    public static void main(String[] args) 
    { 
     Calendar gregcal = new GregorianCalendar(); 
     int h = gregcal.get(Calendar.HOUR_OF_DAY); 
     int m = gregcal.get(Calendar.MINUTE); 
     int s = gregcal.get(Calendar.SECOND); 

     Clock c = new Clock(h, m, s); 

     JFrame application = new JFrame("Clock"); 
     ClockPanel panel = new ClockPanel(c); 

     application.add(panel); 
     application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     application.setSize(160,80); 
     application.setVisible(true); 
    } 

} 


// the last class here is the problem 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.JLabel; 
import javax.swing.JButton; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.Timer; 

class ClockPanel extends JPanel implements ActionListener 
{ 
    Clock myck = new Clock(); 
    private javax.swing.Timer timer; 
    JTextField txt1, txt2, txt3; 
    JLabel jl1, jl2; 
    JButton tick; 
    JPanel top, buttom; 



    ClockPanel(Clock ck) 
    { 

     this.setLayout(new GridLayout(2,1)); 
     top = new JPanel(); 
     top.setLayout(new GridLayout(1,5)); 

     String hour = "" + ck.getHour(); // easier way 
     txt1 = new JTextField(hour); 
     top.add(txt1); 

     jl1 = new JLabel(" : "); 
     top.add(jl1); 

     String minute = Integer.toString(ck.getMinute()); // harder convertion 
     txt2 = new JTextField(minute); 
     top.add(txt2); 

     jl2 = new JLabel(" : "); 
     top.add(jl2); 

     String second = Integer.toString(ck.getSecond()); 
     txt3 = new JTextField(second); 
     top.add(txt3); 
     this.add(top); 


     buttom = new JPanel(new GridLayout(1,1)); 


     tick = new JButton("tick"); 
     buttom.add(tick); 
     tick.addActionListener(this); 
     this.add(buttom); 

    } 

    javax.swing.Timer t = new javax.swing.Timer(1000, new ActionListener() { 



    public void actionPerformed(ActionEvent ae) 
    { 

     if(ae.getSource().equals(tick)) 
     { 

      myck.tick(); 
      txt1.setText(Integer.toString(myck.getHour())); 
      txt2.setText(Integer.toString(myck.getMinute())); 
      txt3.setText(Integer.toString(myck.getSecond())); 
     } 
    } 
    }); 
    public void start() 
    { 
     t.start(); 
    } 
} 
+1

um ...エラーメッセージは何ですか? –

+0

私はここにそれについて忘れてしまった、それはスレッドで – Kiril

+0

例外で申し訳ありません「AWT-EventQueueの-0」でjava.lang.Error:未解決のコンパイルの問題: \t型ClockPanelが継承された抽象メソッドActionListener.actionPerformed(のActionEvent)を実装する必要があります \t at ClockPanel.actionPerformed(ClockPanel.java:10) – Kiril

答えて

5

は、私のコメントを1として、あなたの問題は、あなたのClockPanelクラスこのクラスのスコープ内にあるactionPerformedメソッドを与えなければならないということです。コンパイルしないクラスを実行しようとしてはいけませんが、コードを実行しようとする前にすべてのコンパイルエラーを修正する必要があります。

+0

あなたは正しい+1です – mKorbel