簡體   English   中英

使用鼠標偵聽器Java小程序在屏幕上繪制對象

[英]Draw object to screen using mouse listener java applet

我正在嘗試創建一個繪制聖誕樹的小程序,然后使用按鈕用戶可以在樹上繪制裝飾(每種裝飾都有一個不同的按鈕)。

我這樣做是為了在樹上畫一個圓圈,但是當畫一個新的圓圈時,這個圓圈會消失。 我建議將裝飾定義為具有變量的對象(例如,鼠標單擊坐標),然后每次單擊鼠標時,都會將新實例添加到對象數組中。

首先,我嘗試創建裝飾或“球”對象並將其繪制到屏幕上,一旦完成,我將其添加到數組中,到目前為止,它已繪制了球,但位於左上角和鼠標單擊無效。

任何幫助或提示將不勝感激,它馬上就開始發揮我的作用! 這是到目前為止的代碼。 (我知道那里有一些毫無意義的代碼,這是以前嘗試使其工作的嘗試。)

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

謝謝

通過添加以下內容來固定Ball位置的坐標:

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

(純粹主義者可能會選擇setXsetY 。)

否則,它們默認為0和0。(int的Java默認值)

然后致電:

ball.setLocation(mx, my); 

在您的MouseListener

另外,您可能希望創建多個Ball裝飾...因此,在單擊鼠標之前不要創建任何裝飾。 我將把它留作練習...! :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM