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 类就没这些问题
java 导入JFrame类 用repaint()循环后不檫除原有的字,请帮修改一下代码
答案:3 悬赏:70 手机版
解决时间 2021-02-15 20:20
- 提问者网友:佞臣
- 2021-02-15 16:00
最佳答案
- 五星知识达人网友:骨子里都是戏
- 2021-02-15 17:02
1.Graphics基类是不是有一个drawhold()还是什么方法,可以在repaint()前加入保留之前已经在屏幕上的图形,这个我不确定。
2.可不可以把repaint()改成paint()呢?
然后paint方法里的g.drawString()就是按两格位移向下打印一竖列欢迎光临。
2.可不可以把repaint()改成paint()呢?
然后paint方法里的g.drawString()就是按两格位移向下打印一竖列欢迎光临。
全部回答
- 1楼网友:爱难随人意
- 2021-02-15 19:39
你上面使用的是 jframe
如果,是frame 就是 要调用 update 然后,在repaint 了
你可以试试,把你的继承类 换成 frame
jframe是轻量级的组件, java 做了很多的优化,不在简单的去update了
- 2楼网友:愁杀梦里人
- 2021-02-15 18:29
因为 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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯