下面写了4个按钮,点击start前3个按钮背景色变换import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.importent.AA;public class ex1 implements ActionListener
{
private JFrame frame;
private JPanel pan;
private JButton jb1=new JButton("1");
private JButton jb2=new JButton("2");
private JButton jb3=new JButton("3");
private JButton start=new JButton("Start");
private JButton[] jb={jb1,jb2,jb3};
private int i=0;
public static void main(String[] args)
{
new ex1().in();
}
public void in()
{
frame=new JFrame();
pan=new JPanel();
pan.setLayout(null);
jb1.setBounds(20, 50, 50, 50);
jb1.setBackground(Color.blue);
pan.add(jb1);
jb2.setBounds(70, 50, 50, 50);
jb2.setBackground(Color.blue);
pan.add(jb2);
jb3.setBounds(120, 50, 50, 50);
jb3.setBackground(Color.blue);
pan.add(jb3);
start.setBounds(300, 50, 80, 50);
pan.add(start);
start.addActionListener(this);
frame.add(pan);
frame.setSize(650, 660);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((screenSize.width - frame.getWidth())/2,
(screenSize.height - frame.getHeight())/2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==start)///*.........
{
for(int i=0;i<jb.length;i++)
{
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
jb[i].setBackground(Color.black);//背景色变黑
if(i>0)
jb[i-1].setBackground(Color.blue);//上一个背景色还原
}
}//.........*/
}
}
程序运行时,点start,只显示最后结果,即第3个按钮变成黑色,看不到3个按钮色彩变换的过程,但是我把/*...*/的内容放到另一个线程类中,调用这个线程就能看到过程,我想问为什么在单线程的状态下看不到过程
import java.awt.event.*;
import javax.swing.*;
import com.importent.AA;public class ex1 implements ActionListener
{
private JFrame frame;
private JPanel pan;
private JButton jb1=new JButton("1");
private JButton jb2=new JButton("2");
private JButton jb3=new JButton("3");
private JButton start=new JButton("Start");
private JButton[] jb={jb1,jb2,jb3};
private int i=0;
public static void main(String[] args)
{
new ex1().in();
}
public void in()
{
frame=new JFrame();
pan=new JPanel();
pan.setLayout(null);
jb1.setBounds(20, 50, 50, 50);
jb1.setBackground(Color.blue);
pan.add(jb1);
jb2.setBounds(70, 50, 50, 50);
jb2.setBackground(Color.blue);
pan.add(jb2);
jb3.setBounds(120, 50, 50, 50);
jb3.setBackground(Color.blue);
pan.add(jb3);
start.setBounds(300, 50, 80, 50);
pan.add(start);
start.addActionListener(this);
frame.add(pan);
frame.setSize(650, 660);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((screenSize.width - frame.getWidth())/2,
(screenSize.height - frame.getHeight())/2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==start)///*.........
{
for(int i=0;i<jb.length;i++)
{
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
jb[i].setBackground(Color.black);//背景色变黑
if(i>0)
jb[i-1].setBackground(Color.blue);//上一个背景色还原
}
}//.........*/
}
}
程序运行时,点start,只显示最后结果,即第3个按钮变成黑色,看不到3个按钮色彩变换的过程,但是我把/*...*/的内容放到另一个线程类中,调用这个线程就能看到过程,我想问为什么在单线程的状态下看不到过程
对swing里的线程不太懂
把这部分代码放到其他线程之后,UI线程没有被阻塞,自然可以每次收到一次新号就重绘一次界面.