效果展示:
需求:
点击开始按钮实现自动打字效果,一行达到20个字实现换行,并有一个线程状态显示文本,结束按钮停止打字
代码:
package com.GUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test01 implements Runnable, ActionListener {
JTextArea jTextArea;
JButton startBtn;
JButton endBtn;
JTextField status;
Thread t;
public Test01() {
init();//布局,添加事件监听
}
private void init() {
//JFrame中间一个jTextArea,底部一个panel
JFrame jFrame = new JFrame();
jTextArea = new JTextArea();
jTextArea.setEditable(false);
Panel panel = new Panel();
jFrame.add(jTextArea);
jFrame.add(panel,BorderLayout.SOUTH);
//底部panel
startBtn=new JButton("开始");
endBtn=new JButton("结束");
endBtn.setEnabled(false);
status=new JTextField();
status.setEditable(false);
panel.add(startBtn);
panel.add(endBtn);
panel.add(status);
//添加事件监听事件
startBtn.addActionListener(this);
endBtn.addActionListener(this);
jFrame.setSize(250,400);
jFrame.setLocationRelativeTo(null);
jFrame.setResizable(false);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source==startBtn) {
t=new Thread(this);
t.start();
startBtn.setEnabled(false);
endBtn.setEnabled(true);
status.setText(t.getState()+"");
}
if(source==endBtn) {
t.stop();
startBtn.setEnabled(true);
endBtn.setEnabled(false);
status.setText(t.getState()+"");
}
}
@Override
public void run() {
String text=jTextArea.getText();
while (true) {
//求出最后一行的长度,未达到20个字符就不断输出a
int lastLineLength=text.length()%21;//加上\n一行有21
while (lastLineLength<20){
text+="a";
lastLineLength++;
try {
Thread.sleep(100);
jTextArea.setText(text);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
text+="\n";//换行操作
}
}
public static void main(String[] args) {
new Test01();
}
}