思路:
将主类的jlable传到子类中的jlable1,这里类似于指针,相当于我两个都指向与这个东西,然后我子类改变jlable1就可以改变jlable;
注意:
这里子类的jlable1是不可以初始化的,因为new相当于,给他重新分配地址。
package work1;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.function.IntToDoubleFunction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class TestMain {
JFrame jFrame;//成员变量,未设置访问类型,默认包内访问,先创建一个JF对象
String stringx;//保存第一个变量
public static void main(String[] args) {
// TODO 自动生成的方法存根
TestMain testMain=new TestMain();
testMain.initView();
}
boolean isRun=true;//全局变量控制循环体,从而控制循环的暂停;
public void initView() {
jFrame=new JFrame("好好学习");//第一步,初始化
jFrame.setBounds(500, 500, 600, 600);//第二步,设置位置大小
jFrame.setLayout(null);//控制布局 null为不使用系统所给的任何一种布局
JLabel jLabel=new JLabel("");
jLabel.setBounds(250, 250,200, 200);
jFrame.add(jLabel);
TestMain2 mTestMain2=new TestMain2();
mTestMain2.setL(jLabel);
mTestMain2.start();
jFrame.setVisible(true);//第三部,让界面显示出来,这句话一定在最后
//但凡是成对的元素,必须要先写出来再将光标移到中间写其他的代码
}
}
线程子类
package work1;
import javax.swing.JLabel;
//第二种创建子线程的方法方法2,继承,写自己的线程方法
public class TestMain2 extends Thread {
int h=0,m=0,s=0;
private JLabel jLabel1;
public void setL (JLabel jLabel) {
this.jLabel1=jLabel;
}
@Override
public void run() {
super.run();
while(true)
{
try {
Thread.sleep(1000);
s++;
jLabel1.setText(""+s);
//显示在jlabel控件上
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
if(s==60)
{
m++;
s=0;
}
if(m==60)
{
m=0;
h++;
}
}
}
}