0

画面に円(オブジェクトとして定義)を描画するアプレットを作成しようとしています。この円は、マウスを使用して画面上でドラッグできます。これまでのところ、マウスを押すとオブジェクトが描画されてドラッグできますが、アプレットの起動時にオブジェクトを描画してから、ユーザーがオブジェクトをクリックしてドラッグできるようにします。どんな助けや手がかりも大歓迎です。コードは次のとおりです。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class sheepDog extends Applet implements ActionListener, MouseListener, MouseMotionListener
{
    manAndDog dog;
    int xposR;
    int yposR;

    public void init()
    {
        addMouseListener(this);
        addMouseMotionListener(this);

    }
    public void paint(Graphics g)
    {
        dog.display(g);

    }
    public void actionPerformed(ActionEvent ev)
    {}
    public void mousePressed(MouseEvent e)
    {

    }
    public void mouseReleased(MouseEvent e)
    {


    }
    public void mouseEntered(MouseEvent e)
    {}
    public void mouseExited(MouseEvent e)
    {}
    public void mouseMoved(MouseEvent e)
    {
    }
    public void mouseClicked(MouseEvent e)
    {}
    public void mouseDragged(MouseEvent e)
    {
        dog = new manAndDog(xposR, yposR);
        xposR = e.getX();
        yposR = e.getY();
        repaint();

    }
}

class manAndDog implements MouseListener, MouseMotionListener
{
    int xpos;
    int ypos;
    int circleWidth = 30;
    int circleHeight = 30;
    Boolean mouseClick;

    public manAndDog(int x, int y)
    {
        xpos = x;
        ypos = y;
        mouseClick = true;
        if (!mouseClick){
            xpos = 50;
            ypos = 50;
        }

    }

    public void display(Graphics g)
    {
        g.setColor(Color.blue);
        g.fillOval(xpos, ypos, circleWidth, circleHeight);
    }

    public void mousePressed(MouseEvent e)
    {
        mouseClick = true;
    }
    public void mouseReleased(MouseEvent e)
    {

    }
    public void mouseEntered(MouseEvent e)
    {}
    public void mouseExited(MouseEvent e)
    {}
    public void mouseMoved(MouseEvent e)
    {}
    public void mouseClicked(MouseEvent e)
    {}
    public void mouseDragged(MouseEvent e)
    {
        if (mouseClick){
            xpos = e.getX();
            ypos = e.getY();
        }


    }
}

ありがとう

4

2 に答える 2

1

アプレットのメソッドで、オブジェクトstartの場所を割り当てて、manAndDogrepaint

Reimeusはより正確であり、このinit方法はmanAndDogを初期化するためのより良い場所です。

あなたがいくつかのフィードバックを気にしないことを願っています;)

  1. メソッドを呼び出す必要がありsuper.paint(g)ますpaintJApplet実際、使用してオーバーライドすることをお勧めしますpaintComponentが、それは私だけです
  2. manAndDogオブジェクトを継続的に再作成する必要はないと思います。

例えば。メソッドを追加したsetLocation場合は、マウスをドラッグしたときに「setLocation」を呼び出すだけで済みます。

public void mouseDragged(MouseEvent e) {
    dog.setLocation(xposR, yposR);
    xposR = e.getX();
    yposR = e.getY();
    repaint();
}

これは、短命のオブジェクトを継続的に作成しないため、より効率的です。manAndDogまた、アニメーションの適用など、オブジェクトをさらに活用できることも意味します。私見では

于 2012-08-25T00:14:54.053 に答える
1

最も簡単な方法は、メソッドで次のようなManAndDogオブジェクトを作成することです。init()

dog = new ManAndDog(0, 0);
于 2012-08-25T00:15:46.640 に答える