thread 线程训练第一天

来源:互联网 发布:济宁网络教育报名 编辑:程序博客网 时间:2024/06/05 09:25
package threadDemo1;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class WelcomeJFrame1 extends JFrame {


public WelcomeJFrame1(String texts[]) {
super("滚动条");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setBounds(400, 300, 400, 300);


if (texts == null || texts.length == 0) {
this.getContentPane().add(new PollbyJPanel("welcome"));
} else {
this.getContentPane().setLayout(new GridLayout(texts.length, 1));
for (int i = 0; i < texts.length; i++) {
this.getContentPane().add(new PollbyJPanel(texts[i]));


}
}


this.setVisible(true);
}


public WelcomeJFrame1() {
this(null);
}


public static void main(String[] args) {
String texts[] = { "Welcome", "Hello", "欢迎光临..." };
new WelcomeJFrame1(texts);


}


}


class PollbyJPanel extends JPanel implements Runnable, ActionListener {
private JTextField text_word, text_sleep, text_last;
private JLabel lb1, lb2;
private JButton btnStart, btnBreak;
private int sleeptime;
private Thread thread_rollby;


public PollbyJPanel(String text) {
this.setLayout(new GridLayout(2, 1));
char space[] = new char[100];
java.util.Arrays.fill(space, ' ');// 用类全名表示


text_word = new JTextField(text + new String(space));
text_word.setHorizontalAlignment(JTextField.RIGHT);
this.add(text_word);// 加在第一行的第一列


JPanel panel_sub = new JPanel();
panel_sub.setLayout(new FlowLayout(FlowLayout.RIGHT));
this.add(panel_sub);// 这块面板加在第二行


// 往这块面板上加东西
// lb1=new JLabel("sleep");
panel_sub.add(new JLabel("sleep"));
sleeptime = (int) (Math.random() * 100);
text_sleep = new JTextField("" + sleeptime);
panel_sub.add(text_sleep);
text_sleep.addActionListener(this);


btnStart = new JButton("启动");
panel_sub.add(btnStart);
btnStart.addActionListener(this);


btnBreak = new JButton("中断");
panel_sub.add(btnBreak);
btnBreak.addActionListener(this);


thread_rollby = new Thread(this); // 让线程启动后,跑自己当前类中的run()方法
        btnBreak.setEnabled(false);
lb2 = new JLabel("state");
panel_sub.add(lb2);
text_last = new JTextField("" + thread_rollby.getState(), 10);
// text_last=new JTextField("NEW",10);
text_last.setEditable(false);
panel_sub.add(text_last);
}


@Override
public void run() {
while (true)
try {
// System.out.println("w");
String str = text_word.getText();
str = str.substring(1) + str.charAt(0);
text_word.setText(str);
Thread.sleep(sleeptime);
} catch (InterruptedException ex) {
break;
}
}


@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnStart) {
try {
sleeptime = Integer.parseInt(text_sleep.getText());
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(this, "\"" + text_sleep.getText()
+ "\"" + "不能转换成整数,请从新输入!");
}
thread_rollby = new Thread(this);// 每次从新开一个线程
thread_rollby.start();


text_last.setText("" + thread_rollby.getState());
btnStart.setEnabled(false);
btnBreak.setEnabled(true);
}
if (e.getSource() == btnBreak) {
thread_rollby.interrupt();// 设置中断
text_last.setText("" + thread_rollby.getState());
btnBreak.setEnabled(false);
}
if (e.getSource() == text_sleep) {
try {
sleeptime = Integer.parseInt(text_sleep.getText());


} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(this, "\"" + text_sleep.getText()
+ "\"" + "不能转换成整数,请重新新输入");


}
}


}
}
1 0
原创粉丝点击