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渲染线程(用于页面渲染).浏览器事件触发线程(用于控制交互). 除此之外 ...
随机推荐
- linux系统开机过程描述
本文描述linux系统开机过程,属于个人理解范畴,如果文中表述有误请大家批评指正! 计算机开机之后,首先要加载BIOS(基本输入输出系统)信息,BIOS包含了很多重要的信息,包括CPU信息,设备启动顺 ...
- 在InnoDB,记录在 non-clustered indexes(也被称为secondary indexes) 包含了主键值
In InnoDB, the records in non-clustered indexes (also called secondary indexes) contain the primary ...
- Unity 随机数的使用
脚本语言:C# 一个比较常用的例子是游戏中的主角碰到场景中的NPC时,NPC会随机做出反应,例如有50%几率来友好的致敬,25%几率走开,20%几率反身攻击和%%的几率赠送礼物. 创建一个NPCTes ...
- common tar command
Compress tar -cvzf jy2653.2.tgz jy2653.2 Decompress tar -xvf jy2653.1.tgz
- Linux系统下用户行为审计
以下内容在RHEL 6.4下测试通过. 1.编写脚本Command_history.sh,生产历史命令记录文件,内容如下 #!/bin/bash [ -d /usr/lib/.cmdlog ] || ...
- Delhpi TdxComponentPrinter怎样联上dxdbgrid中的数据打印
有谁知道TdxComponentPrinter怎样联上dxdbgrid中的数据打印? 有谁知道TdxComponentPrinter怎样联上dxdbgrid中的数据打印? 回复人: ...
- Nodejs in Visual Studio Code 07.学习Oracle
1.开始 Node.js:https://nodejs.org OracleDB: https://github.com/oracle/node-oracledb/blob/master/INSTAL ...
- bzoj1433 [ZJOI2009]假期的宿舍(最大流)
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1717 Solved: 754[Submit][Stat ...
- Registering Shell Extension Handlers
最近在做Windows shell extension 的开发工作,对shell extension handler的注册机制有点疑问,以下摘自MSDN:http://msdn.microsoft.c ...
- [Locked] Group Shifted Strings
Group Shifted Strings Given a string, we can "shift" each of its letter to its successive ...