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渲染线程(用于页面渲染).浏览器事件触发线程(用于控制交互). 除此之外 ...
随机推荐
- C++ Primer 随笔 Chapter 9 顺序容器
参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html 1..顺序容器:vector(快速随机访问):list(快速插入 ...
- vijos1053Easy sssp
P1053Easy sssp 描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的带权有向图. 要求你写一个程序, 判断这个有向图 ...
- Hierarchy Viewer显示视图性能指标
Hierarchy Viewer默认打开“Tree View”窗口无法显示显示Performance indicators: 但选中根视图再点击按钮“Obtain layout times for t ...
- kafka log4j配置
kafka日志文件分为5种类型,依次为:controller,kafka-request,server,state-change,log-cleaner,不同类型log数据,写到不同文件中: 区别于c ...
- PowerDesigner自定义Word导出格式
本文主要讲解如何将PDM的表结构导出成word以及如何自定义导出格式和显示效果,希望对大家有所帮助...(以下步骤以PowerDesigner 15版本为例) 一.新建导出报表,进入报表设计界面: 1 ...
- 例6.1:学生选课系统设计(界面设计、类图、数据库ER图)
- [IE9] GPU硬件加速
IE9 的一个重大改进就是使用了GPU硬件加速来渲染网页. 那么GPU硬件加速到底能够带来多大的性能提升? 你可以在IE的测试案例网站(http://ie.microsoft.com/testdr ...
- Eclipse Python配置
Macbook上面安装pydev后,发现新建project后并没有PyDev的选项.在官网上搜索后发现是JDK版本太久.上Oracle官网下载了最新JDK(url: http://www.oracle ...
- Ternary Search Tree 应用--搜索框智能提示
前面介绍了Ternary Search Tree和它的实现,那么可以用Ternary Search Tree来实现搜索框的只能提示,因为Ternary Search Tree的前缀匹配效率是非常高的, ...
- (转)void指针(void *的用法)
指针有两个属性:指向变量/对象的地址和长度 但是指针只存储地址,长度则取决于指针的类型 编译器根据指针的类型从指针指向的地址向后寻址 指针类型不同则寻址范围也不同,比如: int*从指定地址向后寻找4 ...