Проблема с рисунком - PullRequest
1 голос
/ 10 апреля 2011

На данный момент следующий код должен нарисовать кружок на MouseDragged на черном Canvas. К сожалению это не так (= Я что-то пропустил?

Заранее спасибо ...

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);

      }





}

Ответы [ 2 ]

4 голосов
/ 10 апреля 2011

Две вещи:

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() метод.

1 голос
/ 10 апреля 2011

Попробуйте:

public void mouseDragged(MouseEvent e) 
{
    mosX = e.getX();
    mosY = e.getY();

    repaint();
}

Проблема заключалась в том, что вы не обновляли свои координаты для события mouseDragged.Также вместо того, чтобы звонить paint() напрямую, вы должны позвонить repaint().Вызов repaint() обеспечит автоматический вызов paint().

EDIT:

Чтобы нарисовать объект Canvas, переопределите paint() объекта Canvas.

myCanvas = new Canvas()
{
    public void paint(Graphics g) 
    {
        g.setColor(Color.green);
        g.fillOval(mosX, mosY, 30, 30);
    }    
};

Теперь ваш метод mouseDragged становится следующим:

public void mouseDragged(MouseEvent e) 
{
    mosX = e.getX();
    mosY = e.getY();

    myCanvas.repaint();
}
...