gui线程

package thread;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Thread1 extends JFrame implements Runnable ,ActionListener {

    private JPanel contentPane;
    private JTextField text;
    private JLabel ah = new JLabel("a");
    private Thread giveLetter=new Thread(this);
    private int score=0;
    private     JLabel defen = new JLabel("\u5F97\u52060");
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Thread1 frame = new Thread1();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Thread1() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 670, 129);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        
        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);
        
        JLabel label = new JLabel("\u663E\u793A\u5B57\u6BCD");
        panel.add(label);
        
        panel.add(ah);
        
        JLabel label_1 = new JLabel("\u8F93\u5165\u663E\u793A\u7684\u5B57\u6BCD");
        panel.add(label_1);
        
        text = new JTextField();
        panel.add(text);
        text.setColumns(10);
        
        panel.add(defen);
        
        text.addActionListener(this);
        giveLetter.start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO 自动生成的方法存根
        String letter=ah.getText().trim();
        String daan=text.getText();
        if(letter.equals(daan)){
            score++;
            defen.setText("score"+score);
            text.setText(null);
            validate();
            giveLetter.interrupt();
        }
        text.setText(null);
    }

    @Override
    public void run() {
        // TODO 自动生成的方法存根
        char c='a';
        for(;;){
            ah.setText(""+c+" ");
            validate();
            c=(char)(c+1);
            if(c>'z')
                c='a';
            System.out.println(c);
            try{
                Thread.sleep(2000);
            }
            catch(Exception e){
                System.out.println(e.getMessage());
            }
        }
            
    }

}
View Code

 计时器

package thread;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

public class Thread1 extends JFrame implements Runnable ,ActionListener {

    private JPanel contentPane;
    private Thread thread1=new Thread(this);
    private boolean live=true;
    JTextArea text = new JTextArea();
    JButton start = new JButton("New button");
    JButton stop = new JButton("New button");
    SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss");
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Thread1 frame = new Thread1();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Thread1() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 343, 417);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        
        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);
        
        panel.add(start);
        
        panel.add(stop);
        
        JPanel panel_1 = new JPanel();
        contentPane.add(panel_1, BorderLayout.CENTER);
        
        JScrollPane scrollPane = new JScrollPane();
        panel_1.add(scrollPane);
        
        text.setRows(14);
        text.setColumns(17);
        scrollPane.setViewportView(text);
        start.addActionListener(this);
        stop.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==start){
            thread1.start();
            
        }
        else if(e.getSource()==stop){
            live=false;
        }
    }

    @Override
    public void run() {
        for(;;){
            Date date1=new Date();
            text.append(format.format(date1)+"\n");
            try{
                Thread.currentThread().sleep(1000);
            }
            catch(Exception e){
                System.out.println(e.getMessage());
            }
            if(!live)
                return;
        }
    }

}
View Code

 计时器线程

一个很方便的Timer类,在javax.swing包中,

它感觉就像一个有for循环的线程一样,隔一段时间调用一次,不过他的调用了通过监听器实现的

两个构造方法

Timer(int a)

Timer(int a,Object b)b是实现了ActionListener接口中actionPerformed方法的类,而且还要是JFrame,JButton等组件类的实例

还有三个方法 start(),stop(),restart()

相当线程的 strat(),wart(),notify()

测试代码

package thread;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.Timer;

public class Thread1 extends JFrame implements ActionListener {

    private Timer time=new Timer(1000,this);
    private JPanel contentPane;
    private Thread thread1;
    private boolean live=true;
    JButton start = new JButton("start");
    JButton continue1 = new JButton("continue");
    JButton stop = new JButton("stop");
    SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss");
    private JTextField text;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Thread1 frame = new Thread1();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Thread1() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 502, 181);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        
        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);
        
        panel.add(start);
        
        panel.add(stop);
        
        panel.add(continue1);
        
        JPanel panel_1 = new JPanel();
        contentPane.add(panel_1, BorderLayout.CENTER);
        
        text = new JTextField();
        panel_1.add(text);
        text.setColumns(13);
        start.addActionListener(this);
        stop.addActionListener(this);
        continue1.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==time){
            Date date=new Date();
            text.setText(format.format(date));
            int x=text.getBounds().x;
            int y=text.getBounds().y;
            y+=2;
            x-=2;
            text.setLocation(x,y);
        }
        else if(e.getSource()==start){
            time.start();
        }
        else if(e.getSource()==stop){
            time.stop();
        }
        else if(e.getSource()==continue1){
            time.restart();
        }
    }


}
View Code

 

转载于:https://www.cnblogs.com/vhyc/p/6084937.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值