java jpanel调用构造函数的时候就开始执行repaint,这个JPanel上的动画为什么没有擦去原先的?...

这个博客讨论了一个Java Swing应用的问题,该应用创建了一个窗口,其中一个小字母可以根据键盘输入的上下左右键移动。作者遇到的问题是,字符移动时原有的位置没有被清除。尽管已经尝试了调用父类的`paintComponent`方法,但问题仍然存在。博客内容涉及Java图形用户界面编程和键盘事件处理。
摘要由CSDN通过智能技术生成

这个是一个简单的练习程序,窗口上有个小字母会根据键盘输入的上下左右移动。

然而我发现移动的同时,原先的字母没有被擦去?

网上说paint方法需要调用父方法才不会这样,可是我已经调用了啊?

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class KeyEventDemo extends JFrame

{

private KeypboardPanel keyboardPanel=new KeypboardPanel();

public KeyEventDemo()

{

add(keyboardPanel);

keyboardPanel.setFocusable(true);

}

public static void main(String[] args)

{

JFrame frame=new KeyEventDemo();

frame.setTitle("KeyEventDemo");

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

frame.setSize(300,300);

frame.setVisible(true);

}

static class KeypboardPanel extends JPanel

{

private int x=100,y=100;

private char keyChar='A';

public KeypboardPanel()

{

addKeyListener(

new KeyAdapter()

{

public void keyPressed(KeyEvent e)

{

switch(e.getKeyCode())

{

case KeyEvent.VK_DOWN:y+=10;break;

case KeyEvent.VK_UP:y-=10;break;

case KeyEvent.VK_LEFT:x-=10;break;

case KeyEvent.VK_RIGHT:x+=10;break;

default:keyChar=e.getKeyChar();

}

repaint();

}

});

}

protected void paintComponent(Graphics g)

{

super.paintComponents(g);

g.setFont(new Font("TimesRoman",Font.PLAIN,24));

g.drawString(String.valueOf(keyChar),x,y);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值