package org.welcomejframe;import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class WelcomeJFrame extends JFrame {
    public WelcomeJFrame(String texts[])
    {
     super("滚动字");
     this.setBounds(300, 240, 400, 300);
     this.setDefaultCloseOperation(EXIT_ON_CLOSE);
     if(texts==null || texts.length==0)
     this.getContentPane().add(new RollbyJPanel("Welcome!"));
     else
     {
     this.getContentPane().setLayout(new GridLayout(texts.length,1));
     for(int i=0;i<texts.length;i++)
     {
     this.getContentPane().add(new RollbyJPanel(texts[i]));
     }
     }
     this.setVisible(true);
    }
    public WelcomeJFrame()
    {
     this(null);
    }
    private class RollbyJPanel extends JPanel implements ActionListener,Runnable
    {
     JTextField text_word,text_sleep;
     JButton button_start,button_interrupt;
     JTextField text_state;
     Thread thread_rollby;
     int sleeptime;
    
     RollbyJPanel(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));
     this.add(text_word);
    
     JPanel panel_sub = new JPanel(new FlowLayout(FlowLayout.LEFT));
     this.add(panel_sub);
     panel_sub.add(new JLabel("sleep"));
     this.sleeptime = (int)(Math.random()*100);
     text_sleep = new JTextField(""+sleeptime,5);
     panel_sub.add(text_sleep);
     text_sleep.addActionListener(this);
    
     button_start = new JButton("启动");
     panel_sub.add(button_start);
     button_start.addActionListener(this);
     button_interrupt = new JButton("中断");
         panel_sub.add(button_interrupt);
         button_interrupt.addActionListener(this);
         
         thread_rollby = new Thread(this);
         button_interrupt.setEnabled(false);
     panel_sub.add(new JLabel("state"));
     text_state = new JTextField(""+thread_rollby.getState(),10);
     text_state.setEditable(false);
     panel_sub.add(text_state);
     }
     public void run()
     {
     while(true)
     try
     {
     String str = text_word.getText();
     str = str.substring(1)+str.substring(0,1);
     text_word.setText(str);
     thread_rollby.sleep(sleeptime);
     }
     catch(InterruptedException e)
     {
     break;
     }
     }
     public void actionPerformed(ActionEvent e)
     {
     if(e.getSource()==button_start)
     {
     thread_rollby = new Thread(this);
     thread_rollby.start();
     text_state.setText(""+thread_rollby.getState());
     button_start.setEnabled(false);
     button_interrupt.setEnabled(true);
     }
     if(e.getSource()==button_interrupt)
     {
     thread_rollby.interrupt();
     text_state.setText(""+thread_rollby.getState());
     button_start.setEnabled(true);
     button_interrupt.setEnabled(false);
     }
     if(e.getSource()==text_sleep)
     {
     try
     {
     sleeptime = Integer.parseInt(text_sleep.getText());
     }
     catch(NumberFormatException nfe)
     {
     JOptionPane.showMessageDialog(this, "\""+text_sleep.getText()+"\" 不能转换成整数,请重新输入!!");
     }
     }
     }
    }
public static void main(String[] args) {
String []texts = {"Welcome","Hello","Rollby","wo ca "};
new WelcomeJFrame(texts); }}
好像这里有个自动设置等待时间的语句没执行,请问代码哪里需要修改

解决方案 »

  1.   

    if(e.getSource()==text_sleep)
      {
      try
      {
      sleeptime = Integer.parseInt(text_sleep.getText());
      }
      catch(NumberFormatException nfe)
      {
      JOptionPane.showMessageDialog(this, "\""+text_sleep.getText()+"\" 不能转换成整数,请重新输入!!");
      }
    感觉这句好像没执行一样
      

  2.   

    首先提醒你解决问题记得结贴给分哦改成下面这样就可以了,你上面写的这段代码任何时候都不会执行,因为e.getSource()在你这里只能是按钮,所以应该在启动按钮之后执行import javax.swing.JFrame;
    import java.awt.*;
    import java.awt.event.*;import javax.swing.*;public class WelcomeJFrame extends JFrame {
        public WelcomeJFrame(String texts[])
        {
            super("滚动字");
            this.setBounds(300, 240, 400, 300);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            if(texts==null || texts.length==0)
                this.getContentPane().add(new RollbyJPanel("Welcome!"));
            else
            {
                this.getContentPane().setLayout(new GridLayout(texts.length,1));
                for(int i=0;i<texts.length;i++)
                {
                    this.getContentPane().add(new RollbyJPanel(texts[i]));
                }
            }
            this.setVisible(true);
        }
        public WelcomeJFrame()
        {
            this(null);
        }
        private class RollbyJPanel extends JPanel implements ActionListener,Runnable
        {
            JTextField text_word,text_sleep;
            JButton button_start,button_interrupt;
            JTextField text_state;
            Thread thread_rollby;
            int sleeptime;        RollbyJPanel(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));
                this.add(text_word);            JPanel panel_sub = new JPanel(new FlowLayout(FlowLayout.LEFT));
                this.add(panel_sub);
                panel_sub.add(new JLabel("sleep"));
                this.sleeptime = (int)(Math.random()*100);
                text_sleep = new JTextField(""+sleeptime,5);
                panel_sub.add(text_sleep);
                text_sleep.addActionListener(this);            button_start = new JButton("启动");
                panel_sub.add(button_start);
                button_start.addActionListener(this);
                button_interrupt = new JButton("中断");
                panel_sub.add(button_interrupt);
                button_interrupt.addActionListener(this);            thread_rollby = new Thread(this);
                button_interrupt.setEnabled(false);
                panel_sub.add(new JLabel("state"));
                text_state = new JTextField(""+thread_rollby.getState(),10);
                text_state.setEditable(false);
                panel_sub.add(text_state);
            }
            public void run()
            {
                while(true)
                    try
                    {
                        String str = text_word.getText();
                        str = str.substring(1)+str.substring(0,1);
                        text_word.setText(str);
                        thread_rollby.sleep(sleeptime);
                    }
                    catch(InterruptedException e)
                    {
                        break;
                    }
            }
            public void actionPerformed(ActionEvent e){
                if(e.getSource()==button_start){
                    //added by ioe_gaoyong
                    try{
                        this.sleeptime = Integer.parseInt(text_sleep.getText());
                    }catch(NumberFormatException nfe){
                        JOptionPane.showMessageDialog(this, "\""+text_sleep.getText()+"\" 不能转换成整数,请重新输入!!");
                    }  //added ended
                    thread_rollby = new Thread(this);
                    thread_rollby.start();
                    text_state.setText(""+thread_rollby.getState());
                    button_start.setEnabled(false);
                    button_interrupt.setEnabled(true);
                }
                if(e.getSource()==button_interrupt){
                    thread_rollby.interrupt();
                    text_state.setText(""+thread_rollby.getState());
                    button_start.setEnabled(true);
                    button_interrupt.setEnabled(false);
                }
    //            if(e.getSource()==text_sleep)
    //            {
    //
    //            }
            }
        }
        public static void main(String[] args) {
            String []texts = {"Welcome","Hello","Rollby","wo ca "};
            new WelcomeJFrame(texts);    }}
      

  3.   

    文本框不会触发ActionEvent这个是因为你没有设置文本框的相应坚挺,ActionListner监听不到文本框相关的,能监听到的就是按钮提交、多选框的选择这样的事件