[英]difficulty with javax.swing.Timer
按對勾按鈕時出現運行時錯誤。 我試圖在按下對勾按鈕以觸發事件時使用javax.swing.Timer。因此,如果有人有任何建議,我將不勝感激。 我當前正在使用Eclipse,並且按下對勾按鈕時出現運行時錯誤。
線程“ AWT-EventQueue-0”中的異常java.lang.Error:未解決的編譯問題:ClockPanel類型必須在ClockPanel.actionPerformed(ClockPanel.java:10)處實現繼承的抽象方法ActionListener.actionPerformed(ActionEvent)
這是我正在使用的代碼(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();
}
}
根據我的評論,您的問題是您必須給ClockPanel類一個actionPerformed方法,該方法在此類的范圍內。 您甚至不應該嘗試運行無法編譯的類,而應該在嘗試運行代碼之前首先修復所有編譯錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.