[英]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;
}
(純粹主義者可能會選擇setX , setY 。)
否則,它們默認為0和0。(int的Java默認值)
然后致電:
ball.setLocation(mx, my);
在您的MouseListener
。
另外,您可能希望創建多個Ball
裝飾...因此,在單擊鼠標之前不要創建任何裝飾。 我將把它留作練習...! :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.