首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

求,JFrame,JTextArea,打字效果,搞了一下午啦

2012-01-31 
求大虾,JFrame,JTextArea,打字效果,搞了一下午啦我要实现的效果:JFrame上有两个组件:JButton,JTextArea,当

求大虾,JFrame,JTextArea,打字效果,搞了一下午啦
我要实现的效果:JFrame上有两个组件:JButton,JTextArea,当按JButton后---JTextArea中会一个一个自动写入字。
出现的问题:如果不通过JButton,自己在main()中实例化,并调用write(),效果可实现;但是如果通过JButton的ActionListener(),则效果不能出现
代码如下:



import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Test12 extends JFrame {

  JTextArea jb = null;
  JScrollPane js = null;
  JButton jb2 = null;
public static void main(String[] args) {

//new Test12().write();
}

public Test12() {
this.setSize(500, 500);
this.setVisible(true);
this.setResizable(true);
this.setLayout(null);
jb = new JTextArea();
jb.setLineWrap(true);
js = new JScrollPane(jb);
js.setBounds(10, 10, 100, 100);
jb2 = new JButton("OK");
jb2.setBounds(100, 100, 100, 100);
jb2.addActionListener(new ActionListener(){
  @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
write();
}
});
this.add(jb2);
this.add(js);
this.repaint();
}


public void write() {

String c = "你好啊,放飞梦想共勉:让我们以一种平常";
int a = 0;
int x = 0;
int y = 1;


for(int i=0;i<c.length();i++){
for (int j1=0; j1<300000000; j1++) {
a = a + 1;
}
if(i==0){
jb.setText(c.substring(i, i+1));
}else{
jb.append(c.substring(i, i+1));

}

x++;
y++;
}
}
}


[解决办法]
对于你这个想要的按钮效果,采用javax.swing.Timer实现比较好,给你贴出来实现的实例

Java code
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;/** * 这个又是典型的SWING线程模型的问题 * 我不知道如何通过SwingUilities.invokerLater来解决 * 这个就说明自己对此模型理解的还是不到位 */public class Test12 extends JFrame {    final JTextArea jb;    JScrollPane js = null;    JButton jb2 = null;    public static void main(String[] args) {        new Test12();    }    public Test12() {        this.setSize(500, 500);        this.setVisible(true);        this.setResizable(true);        this.setLayout(null);        jb = new JTextArea();        jb.setLineWrap(true);        js = new JScrollPane(jb);        js.setBounds(10, 10, 100, 100);        jb2 = new JButton("OK");        jb2.setBounds(100, 100, 100, 100);        jb2.addActionListener(new ActionListener(){            @Override            public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub                SwingUtilities.invokeLater(new Runnable(){                    public void run(){                        write();                    }                });            }        });        this.add(jb2);        this.add(js);        this.setVisible(true);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }    public void write() {        String c = "你好啊,放飞梦想共勉:让我们以一种平常";        int a = 0;        int x = 0;        int y = 1;        for(int i=0;i<c.length();i++){//            for (int j1=0; j1<300000000; j1++) {//                a = a + 1;//            }      这里用线程休眠就可以了,还节约CPU资源            try{                Thread.sleep(500*1);            }catch(Exception e){                e.printStackTrace();            }            if(i==0){                final String t=c.substring(i, i+1);//                jb.setText(t);                SwingUtilities.invokeLater(new Runnable(){                    public void run(){                        try{                            Thread.sleep(100*1);                        }catch(Exception e){                            e.printStackTrace();                        }                        jb.setText(t);                    }                });            }else{                final String s=c.substring(i, i+1);//                jb.append(s);//                SwingUtilities.invokeLater(new Runnable(){                    public void run(){                        try{                            Thread.sleep(100*1);                        }catch(Exception e){                            e.printStackTrace();                        }                        jb.append(s);                    }                });            }            x++;            y++;            this.repaint();        }    }} 

热点排行