ورود

View Full Version : سوال: تایمر در swing



mr.game
شنبه 21 بهمن 1396, 20:55 عصر
دوستان من میخوام تایمری که گذاشتم روی swing عمل کنه و نمایش داده بشه ، کجای کارم اشتباهه ؟ :متفکر:

package Tamrin;

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

public class Swing {

static Thread thread=new Thread();
public static int i=0;

public static void main(String[] args) {

Swing swing=new Swing();
swing.ui();


for (int t=0;t<60;t++){
try {
thread.sleep(1000);
System.out.println(t);
i--;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


public void ui(){

Dimension dimension=Toolkit.getDefaultToolkit().getScreenSiz e();
int x = dimension.width;
int y = dimension.height;

JFrame jFrame=new JFrame("Esm Famil");
jFrame.setBounds(x/4,y/4,x/2,y/2);
jFrame.setDefaultCloseOperation(WindowConstants.EX IT_ON_CLOSE);
jFrame.setVisible(true);
jFrame.setLayout(null);

JPanel jPanel=new JPanel(null);
jPanel.setVisible(true);
jPanel.setBounds(0,0,x/2,y/2);
jPanel.setBackground(Color.cyan);
jFrame.add(jPanel);

JLabel Timer=new JLabel(String.valueOf(i));
Timer.setVisible(true);
Timer.setBounds(x/4,0,50,50);
Timer.setHorizontalAlignment(JLabel.RIGHT);
jPanel.add(Timer);

}
}

mostafa3dmax
یک شنبه 22 بهمن 1396, 16:52 عصر
سلام
اول اینکه شما چنتا اشتباه دارید
اولیش اینه که باید به ترتیب کامپوننت هارو اد کنید مثلا اول jframe رو که ساختید بعدش jpanel رو میسازید و بعدش jlabel رو میسازید و مقدار دهی میکنید و به ترتیب از فرزن به پدر این هارو add میکنید ینی اول باید لیبل رو داخل پنل ادد کنید و در آخر همه ی کامپوننت هارو داخل فریم .
اشتباه بعدی هم اینه که شما همه ی کامپوننت هار و میسازید و بعد میاید i رو مقدارش رو عوض میکنید که هیچ تاثیری توی کامپوننت ها و تکست لیبلی که ساختید نداره ینی لیبل شما همون تکستی رو داره که (i=0 ) که همون اول ساختید و دیگه مقدارش عوض نمیشه ; برای عوض کردنش باید مقدار تکست لیبل رو هر بار که حلقه اجرا میشه عوض کنید .


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






public class Swing {

//static Thread thread=new Thread();
public static int i=0;
JFrame jFrame;
JPanel jPanel;
JLabel timer;
public static void main(String[] args) {

Swing swing=new Swing();
swing.ui();


for (int t=0;t<60;t++){
try {
Thread.sleep(1000);
System.out.println(t);
i--;
swing.setLabelText(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

private void setLabelText(int i) {
timer.setText(String.valueOf(i));
}
public void ui(){

Dimension dimension=Toolkit.getDefaultToolkit().getScreenSiz e();
int x = dimension.width;
int y = dimension.height;

jFrame=new JFrame("Esm Famil");
jFrame.setBounds(x/4,y/4,x/2,y/2);
jFrame.setDefaultCloseOperation(WindowConstants.EX IT_ON_CLOSE);
jFrame.setVisible(true);
jFrame.setLayout(null);

jPanel=new JPanel(null);
jPanel.setVisible(true);
jPanel.setBounds(0,0,x/2,y/2);
jPanel.setBackground(Color.cyan);

timer=new JLabel(String.valueOf(i));
timer.setVisible(true);
timer.setBounds(x/4,0,50,50);
timer.setHorizontalAlignment(JLabel.RIGHT);
jPanel.add(timer);
jFrame.add(jPanel);

}
}

vahid-p
یک شنبه 22 بهمن 1396, 23:03 عصر
ضمنا thread اصلی رو sleep نکنید. یا timer بسازید که event ایجاد کنه سر هر زمانی که میخواید یا یک thread درست کنید برای این تاخیرها و یک مقدار رو تغییر بده که نمایشگر هم همونو بخونه

mr.game
دوشنبه 23 بهمن 1396, 15:18 عصر
ضمنا thread اصلی رو sleep نکنید. یا timer بسازید که event ایجاد کنه سر هر زمانی که میخواید یا یک thread درست کنید برای این تاخیرها و یک مقدار رو تغییر بده که نمایشگر هم همونو بخونه

میشه لطفا کد تایمر را بنویسید ؟

saeedIRHA
چهارشنبه 25 بهمن 1396, 06:36 صبح
میشه لطفا کد تایمر را بنویسید ؟

https://www.journaldev.com/1050/java-timer-timertask-example
یا این از SwingWorker استفاده کنید
http://www.javacreed.com/swing-worker-example/

mr.game
چهارشنبه 25 بهمن 1396, 18:34 عصر
عجیبه لینک دوم ریدایرکت میشه به صفحه اصلی !