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());
}
} } }
计时器
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;
}
} }
计时器线程
一个很方便的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();
}
} }
gui线程的更多相关文章
- [Sciter系列] MFC下的Sciter–5.Sciter中GUI线程研究
[Sciter系列] MFC下的Sciter–5.Sciter中GUI线程研究,目前MFC存在问题,win32没问题. 本系列文章的目的就是一步步构建出一个功能可用,接口基本完善的基于MFC框架的Sc ...
- 在非gui线程使用QMessageBox
最近我写项目的时候遇到一个奇怪的需求,要在工作线程内,根据某个情况弹出一个MessageBox 但是Qt提供的MessageBox只可以在gui线程(主线程)使用,于是我就对QMessageBox封装 ...
- Windows中的Work线程和GUI线程
Windows线程分为两种:Worker线程.GUI线程 worker线程:是指完全不牵扯到图形用户界面(GUI),纯粹做运算的线程. GUI线程:负责建造窗口以及处理消息循环(拥有消息队列).任何一 ...
- Java之线程———GUI线程(包含打字游戏和计时器俩个GUI实列)
当java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue 和 AWT-Windows. AWT-EventQ ...
- GUI线程 :打字母游戏
代码: /** * */ package com.niit.syntronized; import java.awt.Color; import java.awt.FlowLayout; import ...
- Qt多线程编程总结(一)(所有GUI对象都是线程不安全的)
Qt对线程提供了支持,基本形式有独立于平台的线程类.线程安全方式的事件传递和一个全局Qt库互斥量允许你可以从不同的线程调用Qt方法. 这个文档是提供给那些对多线程编程有丰富的知识和经验的听众的.推荐阅 ...
- Qt多线程和GUI界面假死(run()是线程的入口,就像main()对于应用程序的作用。分析QThread::exec函数的源码,旧的QMutexLocker模式其实很好用,挡住别人进入抢占资源,可照抄)good
QThread的常见特性: run()是线程的入口,就像main()对于应用程序的作用.QThread中对run()的默认实现调用了exec(),从而创建一个QEventLoop对象,由其处理该线程事 ...
- [C#] 走进异步编程的世界 - 在 GUI 中执行异步操作
走进异步编程的世界 - 在 GUI 中执行异步操作 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5877042.html 序 这是继<开始接 ...
- JavaScript线程机制
浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:JS引擎线程(用于处理JS).GUI渲染线程(用于页面渲染).浏览器事件触发线程(用于控制交互). 除此之外 ...
随机推荐
- Word Pattern
package cn.edu.xidian.sselab.hashtable; import java.util.HashMap;import java.util.Map; /** * * @au ...
- linux内核空间与用户空间信息交互方法
linux内核空间与用户空间信息交互方法 本文作者: 康华:计算机硕士,主要从事Linux操作系统内核.Linux技术标准.计算机安全.软件测试等领域的研究与开发工作,现就职于信息产业部软件与 ...
- Unix/Linux运维首选工具Xmanager Enterprise 3.0的使用教程
管理Uinx和Linux服务器的兄弟们应该很熟悉Xmanager,一个窗口可以同时控制上百台Linux和Unix服务器,功能非常强大!^_^请看: manager是一个简单易用的高性能的运行在Wind ...
- 数据结构(线段树):NOI 2016 区间
[问题描述] [输入格式] [输出格式] [样例输入] 6 3 3 5 1 2 3 4 2 2 1 5 1 4 [样例输出] 2 [样例说明] [更多样例] 下载 [样例 2 输入输出] 见目录下的 ...
- 动态规划:NOI 2009 管道取珠
[NOI2009] 管道取珠 输入文件:ballb.in 输出文件:ballb.out 简单对比 时间限制:1 s 内存限制:512 MB #include <iostream> ...
- C#程序注销、重启、关机和锁定电脑
一:截图 二:源代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- 根据标点符号分行,StringBuilder的使用;将字符串的每个字符颠倒输出,Reverse的使用
一:根据标点符号分行,上图,代码很简单 二:代码 using System; using System.Collections.Generic; using System.ComponentModel ...
- 一些正则在js使用方法
输入框直接正则判断 <input type="password" name="pwd" placeholder="密码只能以数字\英文\@\.& ...
- mongoDb +Java+springboot
前言 :mongoDb 是一种比较常用的非关系数据库,文档数据库, 格式为json ,redis 有五种格式. 1. 项目中要使用,这里简单做个示例.首先是连接mongoDB,用的最多的robomon ...
- slides 带手势的图片滑动效果(用于移动终端)
slidesjs 是基于jQuery开发的一款功能强大,是简单的幻灯片插件,但是需要要应用于移动终端的话,还需要考虑手势滑动时候图片切换功能. 此次,我就在slidesjs基础上扩展了两个swipe属 ...