Java 代码赢了';不要正确地重新油漆
我试图让代码移动画布上绘制的东西。然而,我不知道该怎么做。到现在为止,每当我按下应该使对象向右或向左移动的键时,绘制的对象就会消失。但是,其他不应该移动的对象会留在屏幕上 更多信息:运行时,代码将简单地显示绘制的圆。然而,我认为它一直在被重新粉刷,因为图纸一直在闪烁。当我尝试按下与按键侦听器关联的按钮时,什么都没有发生 按下按钮几秒钟后,圆圈完全消失 以下是制作糟糕、组织混乱的代码:Java 代码赢了';不要正确地重新油漆,java,canvas,graphics,draw,keylistener,Java,Canvas,Graphics,Draw,Keylistener,我试图让代码移动画布上绘制的东西。然而,我不知道该怎么做。到现在为止,每当我按下应该使对象向右或向左移动的键时,绘制的对象就会消失。但是,其他不应该移动的对象会留在屏幕上 更多信息:运行时,代码将简单地显示绘制的圆。然而,我认为它一直在被重新粉刷,因为图纸一直在闪烁。当我尝试按下与按键侦听器关联的按钮时,什么都没有发生 按下按钮几秒钟后,圆圈完全消失 以下是制作糟糕、组织混乱的代码: import java.awt.*; import javax.swing.*; import java.awt
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
public class FaceFrame extends JFrame {
private FaceCanvas face;
public FaceFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 800);
setVisible(true);
setLayout(new BorderLayout());
face = new FaceCanvas();
add(face, BorderLayout.CENTER);
}
public static void main(String args[]) {
JFrame faceFrame = new FaceFrame();
}
}
class FaceCanvas extends Canvas
{ private int xpos, ypos;
public FaceCanvas()
{
setBackground( Color.BLUE );
setSize( 300, 300 );
xpos = ypos = 50;
}
public void paint( Graphics g )
{ // override paint method by re-defining it
g.setColor( Color.WHITE );
g.drawOval( xpos, ypos, 31, 31 );
g.drawLine( xpos + 10, ypos + 20, xpos + 20, ypos + 20 );
repaint();
}
class KeyListenerTester extends JFrame implements KeyListener {
public KeyListenerTester() {
}
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
}
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
addX(-10);
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
}
}
}
public void addX(int x)
{
xpos = xpos + 10;
repaint();
}
}
- 不要在paint方法中添加KeyListener
- 不要调用repaint,也不要调用任何可能在paint方法中从内部调用repaint的方法
- 尽量避免混合使用重量级(Canvas)和轻量级(JFrame)组件,它们在z排序和绘制方面存在问题
- 一定要打电话给super.xxx
- 除非您有这样做的特殊原因,否则请避免使用AWT组件,而是使用Swing组件,这样通常会得到更好的支持
- 更改某个图形对象(面)的状态时,应调用repaint以鼓励更新UI