Rysowane kwadratów w javie przy użyciu mousedragged

Odpowiedz Nowy wątek
2016-09-12 22:35

Rejestracja: 3 lata temu

Ostatnio: 1 rok temu

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 :)

edytowany 1x, ostatnio: bogdans, 2016-09-13 08:58

Pozostało 580 znaków

2016-09-13 09:05
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 rok temu

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(); 
    }

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2016-09-13 10:06

Pozostało 580 znaków

2016-09-13 13:20

Rejestracja: 3 lata temu

Ostatnio: 1 rok temu

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

Pozostało 580 znaków

2016-09-13 13:26
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 rok temu

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();
        }
    }

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 3x, ostatnio: bogdans, 2016-09-13 17:33

Pozostało 580 znaków

2016-09-13 13:28

Rejestracja: 3 lata temu

Ostatnio: 1 rok temu

0

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

Pozostało 580 znaków

Odpowiedz

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