package Test124;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
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.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
public class ThreadTest extends JFrame {
private JPanel contentPane;
private JTextArea textArea1;
private JTextArea textArea2;
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
public void run(){
ThreadTest frame=new ThreadTest();
frame.setVisible(true);
}
});
}
public ThreadTest(){
setTitle("\u65B0\u5EFA\u6CA1\u6709\u8FD4\u56DE\u503C\u7684\u7EBF\u7A0B");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,450,300);
contentPane=new JPanel();
contentPane.setBorder(new EmptyBorder(5,5,5,5));
contentPane.setLayout(new BorderLayout(0,0));
setContentPane(contentPane);
JPanel buttonPanel=new JPanel();
contentPane.add(buttonPanel,BorderLayout.NORTH);
buttonPanel.setLayout(new GridLayout(1,2,5,5));
JButton button1=new JButton("\u5355\u7EBF\u7A0B\u7A0B\u5E8F");
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
do_button1_actionPerformed(e);
}
});
button1.setFont(new Font("微软雅黑",Font.PLAIN,16));
buttonPanel.add(button1);
JButton button2=new JButton("\u591A\u7EBF\u7A0B\u7A0B\u5E8F");
button2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
do_button2_actionPerformed(e);
}
});
button2.setFont(new Font("微软雅黑",Font.PLAIN,16));
buttonPanel.add(button2);
JPanel contentPanel=new JPanel();
contentPane.add(contentPanel,BorderLayout.CENTER);
contentPanel.setLayout(new GridLayout(1,2,5,5));
JScrollPane scrollPane1=new JScrollPane();
contentPanel.add(scrollPane1);
textArea1=new JTextArea();
textArea1.setFont(new Font("微软雅黑", Font.PLAIN, 16));
scrollPane1.setViewportView(textArea1);
JScrollPane scrollPane2=new JScrollPane();
contentPanel.add(scrollPane2);
textArea2 =new JTextArea();
textArea2.setFont(new Font("微软雅黑", Font.PLAIN, 16));
scrollPane2.setViewportView(textArea2);
}
protected void do_button1_actionPerformed(ActionEvent e){
StringBuilder sb=new StringBuilder();
for(int i=0;i<5;i++){
sb.append("《Java编程词典》\n");
}
for(int i=0;i<5;i++){
sb.append("《视频学Java》\n");
}
textArea1.setText(sb.toString());
}
protected void do_button2_actionPerformed(ActionEvent e){
final StringBuilder sb=new StringBuilder();
for(int i=0;i<5;i++){
new Thread(){
public void run(){
sb.append("《Java编程词典》\n");
textArea2.setText(sb.toString());
}
}.start();
}
for(int i=0;i<5;i++){
new Thread(){
public void run(){
sb.append("《视频学Java》\n");
textArea2.setText(sb.toString());
}
}.start();
}
}
}
注:
String类的特性:
1) Java.lang.String使用了final修饰,不能被继承;
2) 字符串底层封装了字符数组及针对字符数组的操作方法;
3)字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值;
2 StringBuilder类简介
StringBuilder类的特性:
1) StringBuffer类的对象能够被多次的修改,并且不产生新的未使用对象。
2)StringBuilder 类在 Java 5 中被提出, StringBuilder 的方法不是线程安全的(不能同步访问)。
3)由于 StringBuilder有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则不能选用。
3 延伸:StringBuilder 和StringBuffer
作用:
1)StringBuffer也是一个关于字符串处理的类
2)StringBuffer和StringBuilder类拥有的方法基本相同,但是两者底层原来的区别如下:
3)StringBuffer是线程安全的,同步处理的,性能稍慢,如果需要线程安全的情况下要用StringBuffer。
4)StringBuilder是非线程安全的,并发处理的,性能稍快,一般建议用StringBuilder
注2:setViewportView()
setViewportView
public void setViewportView(Component view)创建一个视口(如果有必要)并设置其视图。不直接为 JScrollPane 构造方法提供视图的应用程序应使用此方法指定将显示在滚动窗格中的滚动组件子级。