事件循环
package my;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Swing2
{
private static void createGUI()
{
JFrame frame = new MyFrame("Swing Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 300);
frame.setVisible(true);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run()
{
createGUI();
}
});
}
}
package my;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MyFrame extends JFrame
{
JTextField textField = new JTextField(20);
JButton okButton = new JButton("OK");
public MyFrame(String title)
{
super(title);
JPanel root = new JPanel();
this.setContentPane(root);
root.setLayout(new FlowLayout());
root.add(textField);
root.add(okButton);
okButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e)
{
textField.setText("2019-02-14");
}
});
}
}
界面卡顿
package my;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MyFrame extends JFrame
{
JTextField textField = new JTextField(20);
JButton okButton = new JButton("OK");
public MyFrame(String title)
{
super(title);
JPanel root = new JPanel();
this.setContentPane(root);
root.setLayout(new FlowLayout());
root.add(textField);
root.add(okButton);
okButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e)
{
onMouseClicked();
}
});
}
private void onMouseClicked()
{
try
{
System.out.println("Ma");
Thread.sleep(3000);
System.out.println("Mi");
Thread.sleep(3000);
System.out.println("Hong");
Thread.sleep(3000);
} catch (Exception e1){}
}
}
创建工作线程
package my;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MyFrame extends JFrame
{
JTextField textField = new JTextField(20);
JButton okButton = new JButton("OK");
public MyFrame(String title)
{
super(title);
JPanel root = new JPanel();
this.setContentPane(root);
root.setLayout(new FlowLayout());
root.add(textField);
root.add(okButton);
okButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e)
{
onMouseClicked();
}
});
}
private void onMouseClicked()
{
MyWorkThread th = new MyWorkThread();
th.start();
}
private class MyWorkThread extends Thread
{
@Override
public void run()
{
try
{
System.out.println("Ma");
Thread.sleep(3000);
System.out.println("Mi");
Thread.sleep(3000);
System.out.println("Hong");
Thread.sleep(3000);
} catch (Exception e1){}
}
}
}
更新界面
package my;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame
{
JTextField textField = new JTextField(20);
JButton okButton = new JButton("OK");
public MyFrame(String title)
{
super(title);
JPanel root = new JPanel();
this.setContentPane(root);
root.setLayout(new FlowLayout());
root.add(textField);
root.add(okButton);
okButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e)
{
onMouseClicked();
}
});
}
private void onMouseClicked()
{
MyWorkThread th = new MyWorkThread();
th.start();
}
private class MyWorkThread extends Thread
{
@Override
public void run()
{
try
{
updateUI("Ma");
Thread.sleep(3000);
updateUI("Mi");
Thread.sleep(3000);
updateUI("Hong");
Thread.sleep(3000);
} catch (Exception e1){}
}
private void updateUI(String progress)
{
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run()
{
textField.setText( progress );
}
});
}
}
}
倒计时练习
package my;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame
{
JLabel display = new JLabel("准备");
JButton okButton = new JButton("开始");
public MyFrame(String title)
{
super(title);
JPanel root = new JPanel();
this.setContentPane(root);
root.setLayout(new BorderLayout());
root.add(okButton, BorderLayout.PAGE_START);
root.add(display, BorderLayout.CENTER);
display.setFont(new Font("宋体", Font.PLAIN, 80));
display.setHorizontalAlignment(SwingConstants.CENTER);
display.setOpaque(true);
display.setBackground(Color.WHITE);
display.setForeground(Color.BLUE);
okButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e)
{
onMouseClicked();
}
});
}
private void onMouseClicked()
{
okButton.setEnabled(false);
MyWorkThread th = new MyWorkThread();
th.start();
}
private class MyWorkThread extends Thread
{
@Override
public void run()
{
int n = 5;
while(n > 0)
{
final String text = String.valueOf(n);
SwingUtilities.invokeLater ( ()->{
display.setText( text );
});
n -= 1;
try { Thread.sleep(1000);}catch(Exception e) {}
}
SwingUtilities.invokeLater ( ()->{
display.setText("新年快乐");
okButton.setEnabled(true);
});
}
}
}
匿名内部类访问局部变量
package my;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame
{
JLabel display = new JLabel("准备");
JButton okButton = new JButton("开始");
public MyFrame(String title)
{
super(title);
JPanel root = new JPanel();
this.setContentPane(root);
root.setLayout(new BorderLayout());
root.add(okButton, BorderLayout.PAGE_START);
root.add(display, BorderLayout.CENTER);
display.setFont(new Font("宋体", Font.PLAIN, 80));
display.setHorizontalAlignment(SwingConstants.CENTER);
display.setOpaque(true);
display.setBackground(Color.WHITE);
display.setForeground(Color.BLUE);
okButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e)
{
onMouseClicked();
}
});
}
private void onMouseClicked()
{
okButton.setEnabled(false);
MyWorkThread th = new MyWorkThread();
th.start();
}
private class MyWorkThread extends Thread
{
@Override
public void run()
{
int n = 5;
while(n > 0)
{
final String text = String.valueOf(n);
SwingUtilities.invokeLater ( new Runnable() {
@Override
public void run()
{
display.setText( text );
}
});
n -= 1;
try { Thread.sleep(1000);}catch(Exception e) {}
}
}
}
private class MyUpdater implements Runnable
{
String text;
public MyUpdater(String text)
{
this.text = text;
}
@Override
public void run()
{
display.setText( text );
}
}
}