| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 498 人关注过本帖
标题:基础的线程问题~
只看楼主 加入收藏
xp_mysky
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-11-17
收藏
 问题点数:0 回复次数:6 
基础的线程问题~

小弟今天刚接触多线程~因为太笨了~想了3个多小时还是没搞明白~
那未前辈有时间看下下面的代码~用线程实现眨眼睛。在这先谢谢了~~
import java.awt.*;
import javax.swing.*;


class Sle extends JFrame
{
JLabel jla = new JLabel();
public Sle()
{

super("娃娃");
this.setSize(400,300);
this.setVisible(true);
}

public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.BLUE);
g.fillOval(100,50,200,220);

g.setColor(Color.white);
g.fillOval(130,120,55,15);


g.setColor(Color.white);
g.fillOval(200,120,55,15);

g.setColor(Color.white);
g.fillOval(175,200,30,30);

g.setColor(Color.black);
g.fillOval(150,121,10,10);

g.setColor(Color.black);
g.fillOval(220,121,10,10);


g.setColor(Color.black);
g.drawLine(130,110,180,110);
g.drawLine(210,110,260,110);
g.drawLine(190,130,180,180);
g.drawLine(180,180,200,180);


}


public static void main(String [] args)
{
Sle ss = new Sle();
}
}


搜索更多相关主题的帖子: 眼睛 public import super 
2007-01-18 23:27
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

起一个线程去实现一个标量,然后在paint里面去根据标量画不同的画,这样就实现了动画的效果

不过,推荐使用paintComponent方法来画图,写一个继承自JPanel的类,它画出来的不会闪烁

然后再把JPanel加入到JFrame中去


可惜不是你,陪我到最后
2007-01-18 23:41
xp_mysky
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-11-17
收藏
得分:0 
标量?能解释一下吗?
2007-01-18 23:43
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
比如一个boolean


你用线程去定时更改它,有时为true,有时为false

然后你在画的时候就判断,当为true时怎么画,当为false时怎么画

当然你也可以做其它的值做标量,比如,int值,定义了几个数字,比如123,为1时画什么,为2时画什么,为3时画什么,

123的值由线程来改,由paintComponent方法来取,

懂了不

可惜不是你,陪我到最后
2007-01-18 23:47
xp_mysky
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-11-17
收藏
得分:0 
嗯~~明白了~谢谢
我最开始想的是用fro循环
for(int i = 1;i<=1000000;i++)
{
if(i%2 ==1)
{

}
else
{


}
2007-01-18 23:55
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

不是用循环,那样不会实现的
我帮你简单的改了一下,你看看吧
[CODE]import java.awt.*;
import javax.swing.*;

public class Sle extends JPanel implements Runnable {
private volatile boolean open;//此标量由线程去修改,由paintComponent方法去取得
public Sle() {
initWindow();
}
private void initWindow(){
JFrame jf=new JFrame("画人");
jf.add(this,BorderLayout.CENTER);
jf.setSize(400,400);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Thread(this).start();
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillOval(100,50,200,220);
if(open){
g.setColor(Color.white);
g.fillOval(130,120,55,15);
g.setColor(Color.white);
g.fillOval(200,120,55,15);
g.setColor(Color.white);
g.fillOval(175,200,30,30);
} else{
g.setColor(Color.RED);
g.fillOval(130,120,55,15);
g.setColor(Color.RED);
g.fillOval(200,120,55,15);
g.setColor(Color.white);
g.fillOval(175,200,30,10);
}
g.setColor(Color.black);
g.fillOval(150,121,10,10);

g.setColor(Color.black);
g.fillOval(220,121,10,10);

g.setColor(Color.black);
g.drawLine(130,110,180,110);
g.drawLine(210,110,260,110);
g.drawLine(190,130,180,180);
g.drawLine(180,180,200,180);
}
public static void main(String [] args) {
Sle ss = new Sle();
}
public void run() {
while(true){
try{
Thread.sleep(1000);
open=!open;
repaint();
} catch(Exception exe){
exe.printStackTrace();
}
}
}
}[/CODE]


可惜不是你,陪我到最后
2007-01-18 23:57
xp_mysky
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2006-11-17
收藏
得分:0 
虽然不自己没有写出来~
但还是学到了很多东西~看了你写的程序~在查了一下API就明白了


十分感谢冰封版主~~
2007-01-19 00:17
快速回复:基础的线程问题~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026960 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved