我是靠谱客的博主 贪玩星月,最近开发中收集的这篇文章主要介绍java 线程(多线程)thread,案例:汉字打字练习(AWT-EventQuecue,AWT-Windows),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

实验目的

当Java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue和 AWT-Windows。

  • AWT-EventQuecue线程负责处理GUI事件。
  • AWT-Windows线程负责将窗体或组件绘制到桌面。

JVM要保证各个线程都有使用CPU资源的机会。

  • 例如,程序中发生GUI界面事件时,JVM就会将CPU资源切换给AWT-EventQuecue线程,AWT-EventQuecue线程就会来处理这个事件。
  • 例如,你单击了程序中的按钮﹐触发ActionEvent事件,AWT-EventQuecue线程就立刻排队等候执行处理事件的代码。

实现要求

编写一个Java应用程序,在主线程中再创建一个Frame类型的窗口,在该窗口中再创建一个线程give Word。线程give Word每隔2秒钟给出一个汉字,用户使用一种汉字输入法将该汉字输入到文本框中。

代码

本案例包含三个类

test6_4_programm

public class test6_4_programm {
public static void main(String[] args) {
new ThreadFrame().setTitle("汉字打字练习");
}
}

WordThread

import javax.swing.*;
public class WordThread extends Thread {
char word;
int startPosition = 19968;
//Unicode表的19968位置至32320上的汉字
int endPosition = 32320;
JTextField showWord;
//显示汉字的文本区域
int sleepLength=6000;
public void setJTextField(JTextField t){
showWord=t;
showWord.setEditable(false);//使此文本区域不能被编辑
}
public void setSleepLength(int n){
sleepLength=n;
}
public void run(){
//线程运行
int k=startPosition;
while (true){
word=(char) k;
//
showWord.setText(""+word);//组件.setText(String str);将组件上的文字内容设置为str
try {
Thread.sleep(sleepLength);//线程类调用sleep方法使线程终端sleeplength毫秒
}catch (InterruptedException e){}
k++;
if (k>=endPosition){
k=endPosition;
}
}
}
}

ThreadFrame

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//主线程
public class ThreadFrame extends JFrame implements ActionListener {
JTextField showWord;
JButton button;
JTextField inputText,showScore;//输入框,展示得分
WordThread giveWord;//内部有一个giveword副线程
JLabel ID=new JLabel();
int score=0;
ThreadFrame(){
//设置显示文字区域的样式
showWord=new JTextField(6);
showWord.setFont(new Font("",Font.BOLD,72));
showWord.setHorizontalAlignment(JTextField.CENTER);
//设置副线程
giveWord=new WordThread();
giveWord.setJTextField(showWord);
giveWord.setSleepLength(5000);
//设置其他组件
button=new JButton("开始");
inputText=new JTextField(10);
showScore=new JTextField(5);
//设置其他组件监视器以及位置
button.addActionListener(this);
inputText.addActionListener(this);
add(button,BorderLayout.NORTH);
//
add(showWord,BorderLayout.CENTER); //
showScore.setEditable(false);
//BorderLayout布局 最下方插入面板,内含三个组件:标签,输入框,展示得分
JPanel southP=new JPanel();
southP.add(new JLabel("输入汉字(回车):"));
southP.add(inputText);
southP.add(showScore);
add(southP,BorderLayout.SOUTH);
//设置窗口基本样式
setBounds(100,100,350,180);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override//重写监视器
public void actionPerformed(ActionEvent e) {
//按钮监视器
if (e.getSource()==button){
if(!(giveWord.isAlive())){
//如果当前线程没开始,创建一个线程
giveWord=new WordThread();
giveWord.setJTextField(showWord);
giveWord.setSleepLength(5000);
}
try{
giveWord.start();
}catch (Exception exe){
}
}
//输入框监视器
else if (e.getSource()==inputText){
if (inputText.getText().equals(showWord.getText())){
score++;
//如果输入的汉字与showWord中的内容匹配 得1分
}
showScore.setText("得分:"+score);
inputText.setText(null);
}
}
}

setEditable(false)

使调用这个函数的控件不能被编辑,如果设为true或者不调用这个函数,则控件可以编辑

isAlive()

isAlive()方法: 判断当前的线程是否处于活动状态
活动状态是指线程已经启动且尚未终止,线程处于正在运行或准备开始运行的状态,就认为线程是存活的

getSource()

就是获得你目前这个事件的事件源,说通俗点,比如有一个按钮事件,你点击一个按钮,在处理事件中你用e.getSource(),就是获得这个按钮,你可以这样写

JButton a=(JButton)e.getSource();把事件源转换成你点击的那个对象类。这样你的a就可以用JButton里面的变量与方法了。
如果你有许多控件事件,这样写还可以区分你获得的是哪个控件事件的事件源。

本例是在监视器中处理事件时,产生KeyEvent e 然后通过getSource获取当前的文本框

最后

以上就是贪玩星月为你收集整理的java 线程(多线程)thread,案例:汉字打字练习(AWT-EventQuecue,AWT-Windows)的全部内容,希望文章能够帮你解决java 线程(多线程)thread,案例:汉字打字练习(AWT-EventQuecue,AWT-Windows)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部