0

クリスマス ツリーを描画するアプレットを作成しようとしています。ボタンを使用して、ユーザーはツリーに装飾を描画できます (装飾ごとに異なるボタン)。

木に円を描くようにしていたのですが、新しく円を描くとこの円が消えてしまいます。装飾は変数 (マウス クリック座標など) を持つオブジェクトとして定義する必要があり、マウスがクリックされるたびに新しいインスタンスがオブジェクトの配列に追加されることが提案されました。

まず、装飾または「ボール」オブジェクトを作成してこれを画面に描画しようとしています。これが完了したら、配列に追加します。これまでのところ、ボールは描画されますが、左上隅にありますマウスのクリックは無効です。

助けやヒントがあれば大歓迎です。少し頭を悩ませ始めています! ここまでのコードです。(私はそこにいくつかの無意味なコードがあることを知っています.それはそれを機能させるための以前の試みからです.)

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

public class christmasTree extends Applet implements ActionListener, MouseListener, MouseMotionListener
{
    int[] xPoints = {200,50,350};
    int[] yPoints = {35,400,400};
    Button lights;
    Button decorations;
    Button stars;
    int mx;
    int my;
    Object source;
    ArrayList lightArray;
    Ball ball;



    public void init()
    {
        lights = new Button("Add Lights");
        decorations = new Button("Add Decorations");
        stars = new Button("Add Stars");
        add(lights);
        add(decorations);
        add(stars);
        addMouseListener( this );
        addMouseMotionListener( this );
        lights.addActionListener(this);
        decorations.addActionListener(this);
        lightArray = new ArrayList();
        ball = new Ball();

    }

    public void paint (Graphics g)
    {
        super.paint(g);
        g.setColor(Color.green);
        g.fillPolygon(xPoints, yPoints, 3);
        g.setColor(Color.black);
        g.fillRect(175, 400, 50, 50);
        g.drawString(Integer.toString(mx), 25, 85);
        g.drawString(Integer.toString(my), 25, 100);
        ball.display(g);

    }

    public void actionPerformed(ActionEvent ev)
    {
        if (ev.getSource() == lights){
            source = lights;
        }
        if (ev.getSource() == decorations){
            source = decorations;
        }
        repaint();

    }

    public void mousePressed(MouseEvent e)
    {
        mx = e.getX();
        my = e.getY();
        repaint();


    }

    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)
    {}



}

class Ball implements MouseListener, MouseMotionListener
{
    int mx1;
    int my1;


    public Ball()
    {


    }

    public void display(Graphics g)
    {
        g.setColor(Color.yellow);
        g.fillOval(mx1, my1, 20, 20);
    }

        public void mousePressed(MouseEvent e)
        {
            mx1 = e.getX();
            my1 = e.getY();



        }

        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)
    {}
}

ありがとう

4

1 に答える 1

1

Ball以下を追加して、場所の座標を修正します。

public void setLocation(int x, int y) {
   mx1 = x;
   my1 = y;
}

(純粋主義者はおそらくsetXsetYを選ぶでしょう。)

それ以外の場合は、デフォルトで 0 と 0 に設定されます (int の Java デフォルト)。

次に呼び出します。

ball.setLocation(mx, my); 

あなたのMouseListener

また、おそらく複数のBall装飾を作成したいでしょう...そのため、マウスをクリックするまで作成しないでください。これは演習として残しておきます...!:-)

于 2012-08-21T21:58:25.983 に答える