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

我写了二个跑马灯的程序,代码如下
第一个:
import java.awt.event.*;
import javax.swing.*;

public class PmdLabel extends JApplet implements Runnable
{
String strLabel, strPmd, strPmdTemp;
Thread T;
public void init()
{
strLabel = new String("☆欢迎光临当当的小站☆");
strPmdTemp = "";
T = new Thread(this);
T.start();
}

public void run()
{

while(true)
{
strPmd = "";
for(int i = 0; i < strLabel.length(); i++)
{
this.showStatus(strPmd);
strPmd += strLabel.charAt(i);
try
{
T.sleep(500);
}
catch(Exception e)
{
e.printStackTrace();
}
}

for(int i = 0; i < strPmd.length(); i++)
{
strPmdTemp = strPmd.substring(i, strPmd.length());
this.showStatus(strPmdTemp);
try
{
T.sleep(500);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
}

第二个:
import javax.swing.*;
import java.awt.*;

public class FontTest extends JApplet implements Runnable
{
String str, strTemp1, strTemp2;
JLabel lblstr;
Font f;
Thread T;
public void init()
{
this.getContentPane().setLayout(new FlowLayout());
str = "锄禾日当午";
lblstr = new JLabel();
this.getContentPane().add(lblstr);
f = new Font("楷体_GB2312", Font.PLAIN, 36);
T = new Thread(this);
T.start();
}

public void run()
{
while(true)
{
strTemp1 = "";
for(int i = 0; i < str.length(); i++)
{
if(i == 0)
strTemp1 = "";
else
{
for(int j = 0; j < str.length()-(str.length()-i); j++)
{
strTemp1 += " ";
}
}
try
{
T.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
strTemp2 =strTemp1 + str.charAt(i);
lblstr.setFont(f);
lblstr.setText(strTemp2);
lblstr.validate();
}
}
}
}
请大家先运行代码
我感觉第二个有些问题,总觉得空格没有控制好,请大家帮忙改正一下代码,谢谢!

搜索更多相关主题的帖子: 当当 public import 跑马灯 
2006-03-16 22:59
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

import javax.swing.*;
import java.awt.*;

public class FontTest extends JApplet implements Runnable
{
String str;
JLabel lblstr;
Font f;
Thread T;
public void init()
{
this.getContentPane().setLayout(new BorderLayout());
str = "锄禾日当午";
lblstr = new JLabel();
this.getContentPane().add(lblstr,BorderLayout.NORTH);
f = new Font("楷体_GB2312", Font.PLAIN, 36);
lblstr.setFont(f);
T = new Thread(this);
T.start();
}

public void run()
{
while(true)
{

for(int i = 0; i < str.length(); i++)
{String strTemp1 = "";

for(int j = 0; j < i; j++)
{
strTemp1 += " ";
}

try
{
T.sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
String strTemp2 =strTemp1 + str.charAt(i);
lblstr.setText(strTemp2);
lblstr.validate();
}
}
}
}
你的程序有几个要注意的问题
1,能用局部变量的尽量用局部变量,这样程序会快一些。
2,你的循环弄错了,应把strTemp1在每次进入循环增加空格的时候,都要规零,
否则的话就会出现你那种到后来距离越来越大的感觉
3,你要设置两个空格才能有一个中文字的大小,记住,空格的大小只有一个英文字母那么大。
4,窗口布局要设成BorderLayout才看得更明显一些,因为FlowLayout是居中排列的,也就是说把你的字符串按长度一分为二,一半在左,一半在右,这想必也不是你想看到的结果吧。
5,能简化代码就尽量简化代码,像你原来的代码中的
if(i == 0)
strTemp1 = "";
else
{
for(int j = 0; j < str.length()-(str.length()-i); j++)
{
strTemp1 += " ";
}
}
就是一个多余,没有必要先判断一次i是否等于0;而是直接写for就可以了吗,让for去判断岂不是更好,还有str.length()-(str.length()-i); 是什么东西,这不可以化简成i 吗,岂不是更好看
for(int j = 0; j < i; j++)
{
strTemp1 += " ";
}
是不是好看多了,也快捷多了


可惜不是你,陪我到最后
2006-03-17 11:31
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
谢谢指导,已经明白了。

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2006-03-17 14:21
快速回复:跑马灯的问题
数据加载中...
 
   



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

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