Rysowane kwadratów w javie przy użyciu mousedragged

0

Witam chciałem przerobić następujący program

 import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.JPanel;

public class MyPanel extends JPanel implements MouseListener{
	private static final int WIDTH=500;
	private static final int HEIGHT=400;
	private int x,y;
	ArrayList<Point> points= new ArrayList<Point>();
	public MyPanel (){
		addMouseListener (this);
		setPreferredSize (new Dimension (WIDTH,HEIGHT));
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		x=e.getX();
		y=e.getY();
		points.add(new Point(x,y));
		repaint();
		
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2d=(Graphics2D)g;
		g2d.setColor(Color.WHITE);
		g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
		g2d.setColor(Color.BLACK);
		drawRectangles(g2d);
	}
	private void drawRectangles(Graphics g2d){
		int  x,y;
		for (Point p:points){
			x=(int)p.getX();
			y=(int)p.getY();
			g2d.fillRect(x, y, 10, 10);
		}
	}
}

i ramka

 import java.awt.EventQueue;
import javax.swing.JFrame;
 
public class Frame extends JFrame {
    public Frame() {
        super("MouseTest");
 
        add(new MyPanel());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
        setResizable(false);
        setLocation(700,300);
    }
 
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Frame();
            }
        });
    }
}

na taki który po wciśnięciu przycisku i przesuwaniu następnie puszczeniu rysowałby w miejscu w którym był kursor kwadraciki próbowałem przenieść z mousePressed kod do mouseMoved ale nic się nie dzieje :/ gdyby ktoś mógłby mnie naprowadzić to byłbym wdzięczny :)

0

Przenieś kod do metody mouseReleased.

    @Override
    public void mousePressed(MouseEvent e) { 
    }
    @Override
    public void mouseReleased(MouseEvent e) {
        x=e.getX();
        y=e.getY();
        points.add(new Point(x,y));
        repaint(); 
    }
0

Robiłem to ale to nie ten efekt, chciałbym żeby to działało na zasadzie painta że jeżdżę wciśniętym kursorem po polu i rysuje mi się się linia z kwadracików

0

Nie mogłeś tego napisać w pierwszym poście?

class MyPanel extends JPanel implements MouseListener, MouseMotionListener  
    {
        private boolean all = true;
        public Panel()
        {
            //...
            addMouseListener(this);
            addMouseMotionListener(this);            
        }
        //-------------------
        public void paintComponent(Graphics g) 
        {
            if(all)
            {
                g.setColor(Color.WHITE);
                g.fillRect(0,0,getSize().width-1,getSize().height-1);                
                for (Rectangle r: rectangles) 
                {
                    g.setColor(Color.BLACK); 
                    g.fillRect((int)r.getX(),(int)r.getY(),10,10);
                }               
            }            
            else
            {
                Rectangle r = rectangles.get(rectangles.size()-1);
                g.setColor(Color.BLACK); 
                g.fillRect((int)r.getX(),(int)r.getY(),10,10);
            }            
        }
        //-------------------
        public void mouseClicked(MouseEvent evt) 
        {
        }
        //-------------------
        public void mouseEntered(MouseEvent evt) 
        {
        }
        //-------------------
        public void mouseExited(MouseEvent evt) 
        {
        }
        //-------------------
        public void mousePressed(MouseEvent evt) 
        {
        }
        //-------------------
        public void mouseReleased(MouseEvent evt) 
        {
            all = true;
        }
        //-------------------
        public void mouseMoved(MouseEvent evt) 
        {
        }
        //-------------------
        public void mouseDragged(MouseEvent evt) 
        {
            all = false;
            int x = evt.getX();
            int y = evt.getY();
            rectangles.add(new Rectangle(x,y,10,10));
            repaint();
        }
    }
0

Trochę źle to sformułowałem w pierwszym poście

1 użytkowników online, w tym zalogowanych: 0, gości: 1