永发信息网

java 导入JFrame类 用repaint()循环后不檫除原有的字,请帮修改一下代码

答案:3  悬赏:70  手机版
解决时间 2021-02-15 20:20
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class xq44
{
public static void main(String[] args)
{
xq44_1 a=new xq44_1();
}
}

class xq44_1 extends JFrame implements Runnable
{
int x=5;
Thread trd=new Thread(this);
xq44_1()
{
setBounds(100,100,300,180);
setVisible(true);
setBackground(Color.yellow);
setForeground(Color.blue);
setFont(new Font("隶书",Font.BOLD,36));
trd.start();
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){setVisible(true);System.exit(0);}});
}
public void run()
{
while(true)
{
x=x+2;
if(x>200) x=5;

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

public void paint(Graphics g)
{
g.drawString("欢迎光临",x,80);
}
}

我添加后可以达到我要的效果,但是会覆盖背景色 不知道是怎么回事
public void paint(Graphics g)
{
super.paint(g);
g.drawString("欢迎光临",x,80);
}

而且如果继承的是Frame 类就没这些问题
最佳答案
1.Graphics基类是不是有一个drawhold()还是什么方法,可以在repaint()前加入保留之前已经在屏幕上的图形,这个我不确定。

2.可不可以把repaint()改成paint()呢?
然后paint方法里的g.drawString()就是按两格位移向下打印一竖列欢迎光临。
全部回答
你上面使用的是 jframe 如果,是frame 就是 要调用 update 然后,在repaint 了 你可以试试,把你的继承类 换成 frame jframe是轻量级的组件, java 做了很多的优化,不在简单的去update了
因为 repaint 以后系统会重新调用 paint 方法,“欢迎光临”又会画上去了。 首先我想说明一下,改成 paint() 通常是不可取的,除非实在没有办法的情况下才用。也没有 drawHold 这样的方法。 ----------------------------------------------------------- 如果楼主要不擦除原有的字,你有两个办法,一个是需要一个列表来存储每一次的文字(或相关信息)。例如你这里可以存储 x 坐标。把 x 改成一个数组: int x[] = new int[98]; for (int i=0; i<98; i++) x[i] = 5 + 2 * i; 再定义一个标记,记录当前的位置。 int y = 1; 然后把你的 run 和 paint 都修改了: public void run() { while(true) { y++; if(y>98) y = 98; try { trd.sleep(100); } catch (InterruptedException e) { } repaint(); } } public void paint(Graphics g) { super.paint(g); for (int i=0; i
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯