java - 绘图有问题

标签 java graphics applet drawing

现在,以下代码应该在黑色 Canvas 上绘制一个 onMouseDragged 圆圈。 不幸的是它没有(= 我错过了什么吗?

提前致谢...

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.applet.*;
import java.awt.Graphics.*;



public class IdrawApplet extends Applet  {  


    int mosX;
    int mosY;
    Panel pGadgets;
    Canvas myCanvas;
    Label lRed;
    TextField tfRed;
    TextField tfGreen;
    TextField tfBlue;
    Label lGreen;
    Label lBlue;

    Graphics g;

  public void init() {

    g = getGraphics();
    lRed = new Label("Red-value: ");
    lBlue = new Label("Blue-value: ");
    lGreen = new Label("Green-value: ");
    tfRed = new TextField();
    tfRed.setText("255");
    tfGreen = new TextField();
    tfGreen.setText("255");
    tfBlue = new TextField();
    tfBlue.setText("255");

    pGadgets = new Panel();
    pGadgets.setLayout(new GridLayout(1, 6, 5, 5));
    add(pGadgets);
    pGadgets.add(lRed);
    pGadgets.add(tfRed);
    pGadgets.add(lGreen);
    pGadgets.add(tfGreen);
    pGadgets.add(lBlue);
    pGadgets.add(tfBlue);

    myCanvas = new Canvas();
    myCanvas.setBackground(new Color(0,0,0));
    myCanvas.setBounds(0, 0, 600, 400);

    add(myCanvas);
    myCanvas.addMouseMotionListener(new MouseMotionListener() {

        public void mouseMoved(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        public void mouseDragged(MouseEvent e) {
            // TODO Auto-generated method stub
            paint(g);

        }
    });


  }

  public void paint(Graphics g) {
      g.setColor(Color.green);
      g.fillOval(mosX, mosY, 30, 30);

      }





}

最佳答案

两件事:

public void mouseDragged(MouseEvent e) 
{
   mosX = e.getX();
   mosY = e.getY();
   repaint(); //NOT paint(g);
}

//...
public void paint(Graphics g) 
{
    //draw on the canvas not on the component 
    //since the canvas gets drawn over it
    Graphics g2 = myCanvas.getGraphics();
    g2.setColor(Color.green);
    g2.fillOval(mosX, mosY, 30, 30);
}

如果您有任何更复杂的东西,您应该子类化 Canvas 并覆盖它的 paint() 方法。

关于java - 绘图有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5613496/

相关文章:

java - java JFrame 错误

java - 使用分段上传将文件放入 Amazon S3

Java:Heap数据结构的递归reheapUp(bubbleUp)方法

java - 在 Linux/Java/Scala 中枚举附加的 DVD 驱动器

java - 简单的线条画

java - 从图形对象获取 X 和 Y 坐标

java - 使用 Java Applet 在浏览器内滚动到顶部

java - 小程序删除图像

java - 仅加载一次 url

linux - 如何使用 Java 代码从远程计算机获取命令或 shell 脚本的响应