1. Timer的使用
举例:点击按钮,按进度条没隔一秒就增加十分之一
import java.awt.BorderLayout;
public class TestTimer extends JFrame {
private JPanel contentPane;
int value=0;
private JProgressBar progressBar;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestTimer frame = new TestTimer();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TestTimer() {
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);
progressBar = new JProgressBar();
contentPane.add(progressBar, BorderLayout.NORTH);
JButton btnRun = new JButton("start");
btnRun.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
value +=10;
progressBar.setValue(value);
if (value==100) {
value=0;
}
}
});
timer.setRepeats(true);
timer.start();
}
});
contentPane.add(btnRun, BorderLayout.CENTER);
}
}
2. SwingWorker
举例:点击按钮,在文本框内获取网站的数据
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingWorker;
import javax.swing.border.EmptyBorder;
public class TestSwingworker extends JFrame {
private JPanel contentPane;
private JTextArea textArea;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestSwingworker frame = new TestSwingworker();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TestSwingworker() {
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);
JButton btnNewButton = new JButton("run");
btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
webRead();
}
});
contentPane.add(btnNewButton, BorderLayout.NORTH);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
textArea = new JTextArea();
scrollPane.setViewportView(textArea);
}
public void webRead() {
new SwingWorker<StringBuilder,String>(){
@Override
protected StringBuilder doInBackground() throws Exception {
URL url = new URL("http://www.baidu.com");
URLConnection connection = url.openConnection();
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(),"utf-8"));
String line;
StringBuilder builder = new StringBuilder();
while((line = reader.readLine())!=null){
//publish(line);//调用process()方法
builder.append(line).append("\n");
}
reader.close();
return builder;
}
@Override
protected void process(List<String> chunks) {
for (String line:chunks) {
textArea.append(line);
textArea.append("\n");
}
super.process(chunks);
}
@Override
protected void done() {
try {
//get得到的是doInBackground()返回值
textArea.setText(get().toString());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.done();
}
}.execute();
}
}