JAVA实现名字用按钮按下后一直循环显示在 textArea里,直到按另一个按钮终止

 我来答
雪飞潇潇
2018-03-14 · TA获得超过6274个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:865万
展开全部

使用 javax.swing.Timer;即可实现,定时去执行某一个任务的功能

随即产生的效果图

参考代码

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

//本类继承自JFrame,实现了ActionListener接口
public class ButtonFrame extends JFrame implements ActionListener {
// 定义常量
public static final String[] NAMES = { "黄蓉", "小龙女", "东方不败", "阿珂", "任盈盈", "王语嫣", "周芷若" };
public static final String NEW_LINE = System.getProperty("line.separator"); // 获取当前系统换行符
public static final String INFO = "女神节快乐,随即抽取1人领取奖励.";
// 组件
JButton jbStart, jbClear;
JTextArea jta;
// 随即
Random random;

Timer t; // 定义一个计时器控件 javax.swing.Timer
int times = 0; // 刷新名字的次数

// 构造方法: 组件的初始化, 排版, 窗口的设置
public ButtonFrame() {
random = new Random();
jta = new JTextArea(INFO);
jta.setLineWrap(true);// 自动换行
JScrollPane jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
// 文本区域添加到滚动面板, 垂直滚动条需要的时候出现, 水平滚动条不需要.
add(jsp, BorderLayout.CENTER);
JPanel jps = new JPanel();
jbStart = new JButton("随即选择");
jbStart.addActionListener(this);// 添加事件处理
jbClear = new JButton("强制停止");
jbClear.addActionListener(this);
jps.add(jbStart);
jps.add(jbClear);
add(jps, BorderLayout.SOUTH);

setTitle("窗口");// 窗口标题
setSize(280, 220);// 窗口大小
setLocationRelativeTo(null);// 窗口居中
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 当窗口关闭时,程序结束

// 每隔100毫秒 执行一次actionPerformed的方法
t = new Timer(100, new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
times++;

String str = INFO+NEW_LINE+"Bingo!\t" + NAMES[random.nextInt(NAMES.length)];
jta.setText(str);
if (times >= 10) { // 如果计时器循环了10次 ,那么停止计时器
t.stop();//停止计时器
times = 0;//次数归零
jbStart.setEnabled(true);//按钮恢复点击
}
}
});
}

// 处理按钮点击事件
public void actionPerformed(ActionEvent e) {
JButton jbTemp = (JButton) e.getSource();

if (jbStart == jbTemp) {// 随即

if (!t.isRunning()) {// 如果计时器没有运行,
jbStart.setEnabled(false);//按钮不可点击
t.start();//启动计时器
}

} else if (jbClear == jbTemp) {// 停止
// jta.setText(INFO);
if (t.isRunning()) {// 如计时器正在运行中,
t.stop();
times = 0;
jbStart.setEnabled(true);
}
}
}

public static void main(String[] args) {
new ButtonFrame().setVisible(true);// 实例化窗口并可见
}
}



推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式