ورود

View Full Version : درخواست کمک برای کار با تایمر در netBeans



alex_barry2003
جمعه 19 اردیبهشت 1393, 11:13 صبح
یک تایمر تعریف کردم و کدی را داخل آن نوشتم که هر یک ثانیه آن را اجرا کند . می خواهم که بعد از اجرا با زدن یک دکمه تایمر شروع به کار کند .
این قطعه کدی که نوشتم ولی با زدن دکمه ، تایمر اجرا نمی شود.
import javax.swing.Timer;

Timer timer;
//کلاس تایمر
public class timer2 extends JFrame implements ActionListener {


@Override
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}


public timer2(){
timer =new Timer(100,this);
Random rand=new Random();
int randT=rand.nextInt(10);
jTextField1.setText(String.valueOf(randT));
}
}
//دکمه شروع تایمر
private void startButtonActionPerformed(java.awt.event.ActionEv ent evt) {

timer.start();
}

vahid-p
شنبه 20 اردیبهشت 1393, 11:47 صبح
کدتون خیلی خیلی مشکل داره. یعنی از لحاظ syntax حتی مشکل داره. مثلا اون Timer timer; بالای تعریف کلاس چیکار میکنه؟ اونجا فقط محل مشخص کردن package و import هست.
یا متد startButtonActionPerformed رو خارج از کلاس تعریف کردید؟
شما با برنامه نویسی جاوا آشنایی دارید؟ البته شاید هم سوء تفاهم شده و مثلا منظورتون این بوده هر کدوم از فایل دیگری است.
به هر حال کد تصحیح شدش اینه :
package main;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.Timer;

public class Timer2 extends JFrame implements ActionListener {

Timer timer;
private JTextField JTextField1;
public Timer2() {
super();
timer = new Timer(100, this);
Random rand = new Random();
int randT = rand.nextInt(10);
JTextField1.setText(String.valueOf(randT));
}

@Override
public void actionPerformed(ActionEvent e) {
timer.start();
}
}

ناگفته نماند که من اصلا نفهمیدم اینجا قراره چه کاری انجام بشه. چون این کد فکر نمیکنم کاری واستون انجام بده یا اینکه تو یه لوپ میفته و هر تایمر هر 100 میلی ثانیه یه تایمر دیگه درست میکنه و اونو استارت میکنه و همینطور ادامه پیدا میکنه. اگه میگفتید این کد قراره چیکار بکنه ( دقیق نه کلی ) میتونستم بهتر راهنمایی کنم.

vahid-p
شنبه 20 اردیبهشت 1393, 12:10 عصر
فکر کنم شما چیزی شبیه به این میخواید : ( این کد تست شده )
کلاس Main.java
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Timer;


public class Main{
public static void main(String[] args) {
Timer2 win=new Timer2();
win.setVisible(true);
Timer timer=new Timer(1000, win);
timer.start();
try {
Thread.sleep(100*1000); //هر چیز دیگری، اینجا برای این است که بلافاصله برنامه تمام نشود.
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.S EVERE, null, ex);
}
timer.stop();
}
}

کلاس Timer2.java
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Timer2 extends JFrame implements ActionListener{
private JTextField showTimeField;
private int i=0;
public Timer2() throws HeadlessException {
super();
setBounds(0, 0, 100, 75);
setDefaultCloseOperation(EXIT_ON_CLOSE);
showTimeField=new JTextField();
showTimeField.setEnabled(false);
add(showTimeField);
}

@Override
public void actionPerformed(ActionEvent e) {
i++;
showTimeField.setText(String.valueOf(i));
}
}