初学java,问一个关于applet的程序

zhouf369 2007-12-20 11:44:13
我想在一个类似对话框的界面上输出两行不停左右移动的字符,一行在上,一行在下。
我能想到的就是在一个frame中嵌入两个applet,applet中有一个内部类继承了thread,用于不停移动字符,不知道有没有更好的方法,可以不用applet就可以达到目的的。
我的程序:
//将applet嵌套在frame中的用法示例2
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

class MovingText extends Applet
{
private int x = 100;
private MovingTextThread m = new MovingTextThread();
private Boolean Left= true;
private Panel p = new Panel();
private int width;

public MovingText(Boolean Left, Container c)
{
this.Left = Left;
this.width = c.getWidth();
}

public void init()
{
add(p);
}
public void paint(Graphics g)
{
g.drawString("a",x,10);
}

class MovingTextThread extends Thread
{
public MovingTextThread()
{
start();
}
public void run()
{
System.out.println(width);
while(true)
{
if(Left)
x = x+10;
else
x = x+width-10;

x = x % width;

repaint();
try
{
sleep(100);
}
catch(InterruptedException e){}
}
}
}
}

public class TwoAppletInFrame
{
public static void main(String[] args)
{
Frame myFrame = new Frame("zf's Frame");
myFrame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)

{System.exit(0);}
});
MovingText northApplet = new MovingText(true,myFrame);
MovingText southApplet = new MovingText(false,myFrame);
myFrame.add(northApplet,BorderLayout.NORTH);
myFrame.add(southApplet,BorderLayout.SOUTH);

northApplet.init();
northApplet.start();
southApplet.init();
southApplet.start();
myFrame.setSize(300,300);
myFrame.setVisible(true);
}
}

这个程序有两个问题,一个是我没办法得到frame的width,不知道为什么getWidth()总是返回0;还有就是为什么一定要在applet中重载init(),并且init()中一定要有add()函数,我开始重载init,其中没有add,frame上就没有任何输出,这是为什么?
还有就是如果我不用repaint()的话,可否用validate()实现重画,validate()有什么用?
问题有点多,请高手指教。谢谢
...全文
104 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2007-12-22
  • 打赏
  • 举报
回复
this.getBounds().height
this.getBounds().width
cursor_wang 2007-12-22
  • 打赏
  • 举报
回复
是javax.swing.Timer这个包的.
zhouf369 2007-12-21
  • 打赏
  • 举报
回复
再问一下,你的那个timer是在哪个包里面,是java.util中的那个吗,我看好像不是呀
麻烦了
zhouf369 2007-12-21
  • 打赏
  • 举报
回复
谢谢楼上的程序,但是我想知道你能不能知道窗口的大小,上个程序你是自己用setsize得到了窗口的size,但是如果你改变窗口的大小,比如说全屏,移动的字符还是在原来的范围内移动,这怎么办?
对了以字母j开头的控件是不是就是轻型控件,不知道具体和原来的有什么区别,是不是j开头的比原来的好
cursor_wang 2007-12-21
  • 打赏
  • 举报
回复
大概是这样吧

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class YiDong extends JFrame {
int i=0,j=0;
JPanel p=new JPanel();

ActionListener taskPerformer=new ActionListener(){
public void actionPerformed(ActionEvent ae){
if(j<400){
j=j+4;
}
else
j=0;

if(i>0){

i=i-4;
}
else
i=400;
repaint();
}
};

public YiDong(){
this.setContentPane(p);
this.setSize(400,300);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
new Timer (100,taskPerformer).start();
}

public void paint(Graphics g){
g.clearRect(0,0,400,400);
g.drawString("举头望明月",j,60);
g.drawString("低头思故乡",i,80);
}
public static void main(String[] args){
new YiDong();
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧