Java--设计滚动字演示线程状态及改变方法

import java.awt.FlowLayout;
import java.awt.GridLayout;
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 WelcomJFrame extends JFrame{

    public WelcomJFrame(String[] texts) {
        super("WelcomJFrame");//设置标题
        setBounds(300, 240, 500, 400);//设置界面位置和大小
        setDefaultCloseOperation(EXIT_ON_CLOSE);//设置红色关闭按钮
        getContentPane().setLayout(new GridLayout(texts.length, 1));//设置网格布局texts.length行,1列
        //防护texts的空指针异常
        if(texts==null || texts.length==0){
            getContentPane().add(new RollbyPanel("welcom"));
        }

        for(int i=0;i<texts.length;i++){
            getContentPane().add(new RollbyPanel( texts[i] ));//第二种多线程的创建方式
        }
        //显示框架
        setVisible(true);
    }

    public static void main(String[] args) {

        String texts[]={"Welcome","chengshixueyuan","hello"};
        new WelcomJFrame(texts);
    }

}
class RollbyPanel extends JPanel implements Runnable, ActionListener{

    private JTextField tfdText,tfdSleepTime,tfdThreadState;//滚动字,睡眠时间,线程状态
    private JButton btnStart,btnInterrupt;//启动按钮,中断按钮
    private int sleepTime;//睡眠时间
    private Thread threadRollby;
    //对于每一个线程设计面板和功能
    public RollbyPanel(String text) {
        setLayout(new GridLayout(2, 1));
        //方式1
//      char spaces[]=new char[150-text.length()];
//      Arrays.fill(spaces, ' ');//memset()
//      tfdText =new JTextField(text+new String(spaces));
        //方式2
        String str=String.format("%150s", text);
        tfdText =new JTextField(str);
        add(tfdText);
        JPanel panel=new JPanel( new FlowLayout(FlowLayout.LEFT));//对面板设置流布局并且左对齐
        add(panel);//加面板
        panel.add(new JLabel( "sleep" ));//标签
        sleepTime=(int)(Math.random()*100);//睡眠时用随机数间赋初值
        tfdSleepTime =new JTextField("" +sleepTime, 5);//对tfdSleepTime文本设置值,和文本长度
        panel.add(tfdSleepTime);
        btnStart =new JButton("启动");
        panel.add(btnStart);
        btnInterrupt =new JButton("中断");

        btnInterrupt.setEnabled(false);//第一次设置 中断 按钮不可编辑
        panel.add(btnInterrupt);
        panel.add(new JLabel( "state" ));
        tfdThreadState=new JTextField(10);//new并且设置tfdThreadState文本长度
        tfdThreadState.setEditable(false);//设置tfdThreadState文本按钮不可编辑
        panel.add(tfdThreadState);
        //监听
        btnStart.addActionListener(this);
        btnInterrupt.addActionListener(this);
        tfdSleepTime.addActionListener(this);

    }

    public void run() {
        while (true) {
            //使文本中的文字滚动
            String str = tfdText.getText();
            str = str.substring(1) + str.substring(0, 1);
            tfdText.setText(str);
            try {
                Thread.sleep(sleepTime);//睡眠:即滚动的速度
            } catch (InterruptedException e) {
                break;//出异常就中断
            }
        }
    }
    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == btnStart){
            threadRollby =new Thread(this);//当点击btnStart按钮时new一个线程
            int r=processSleepTime();//判断此时的sleepTime能不能转换成睡眠时间
            if(r==1){//如果leepTime不能转换成睡眠就中断,break用于循环,这里不能使用
                return;
            }

            threadRollby.start();//调动run()方法
            btnStart.setEnabled(false);
            btnInterrupt.setEnabled(true);
            tfdThreadState.setText(""+threadRollby.getState());//获得线程的状态,设置tfdThreadState文本
        }
        if(e.getSource() == btnInterrupt){
            threadRollby.interrupt();//线程中断,结束
            btnStart.setEnabled(true);
            btnInterrupt.setEnabled(false);
            tfdThreadState.setText(""+threadRollby.getState());//获得线程的状态,设置tfdThreadState文本

        }
        if(e.getSource()==tfdSleepTime){
            processSleepTime();//设置滚动字的速度
        }
    }

    private int processSleepTime() {//防护滚动字的速度
        try {
            sleepTime=Integer.parseInt(tfdSleepTime.getText());
            return 0;
        } catch (NumberFormatException e1) {
             //防止在运行时,改变速度出错,中断运行
            btnStart.setEnabled(true);
            btnInterrupt.setEnabled(false);
            threadRollby.interrupt();

            JOptionPane.showMessageDialog(this, "\""+tfdSleepTime.getText()+"\"不能转换成睡眠时间 ");
            tfdThreadState.setText(""+threadRollby.getState());
            return 1;
        }
    }

}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文字滚动-Java文字走马灯,这是大家熟悉的跑马灯特效,文字依次滚动,不停的循环滚动,就类似网页上的文字滚动效果,本例的文字由下到上滚动显示。// 文字跑马灯与信息窗口   public class MessageDemo extends MIDlet implements CommandListener {   private Display display; // 设备的显示器   private Form form; // 表单   private Command cancel; // 取消命令   private String message="随着越来越多手提电话和个人数助理开始融入到信息高速公路之上,从移动设备上访问Web站点变得越来越重要。Java开创了消费设备中小型的储存容量的先河,它是用于开发手机、传呼机及其他微型设备应用程序的理想语言。";   private StringItem messageItem; //信息显示Item   public MessageDemo() {    form = new Form("信息显示");    cancel = new Command("取消", Command.CANCEL, 1);    messageItem=new StringItem("",message);   }   // 重载抽象类MIDlet的抽象方法startApp()   protected void startApp() {    display = Display.getDisplay(this); //取得设备的显示器    Ticker ticker = new Ticker("使用J2ME设计无线网络应用程序"); // 创建滚动条    form.setTicker(ticker); // 把滚动条加到表单上    messageItem.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE)); //设置显示体    form.append(messageItem); // 把显示信息添加到表单上    form.addCommand(cancel); // 为表单加上取消命令    form.setCommandListener(this); // 为表单设置命令监听器    display.setCurrent(form); // 显示表单   }   // 重载抽象类MIDlet的抽象方法pauseApp()   protected void pauseApp() {   }   // 重载抽象类MIDlet的抽象方法destroyApp()   protected void destroyApp(boolean u) {    notifyDestroyed();   }   // 实现接口CommandListener的方法   public void commandAction(Command c, Displayable d) {    if (c == cancel) {    destroyApp(false); // 销毁程序    notifyDestroyed();    }   }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值