• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rysowanie prostej linii na zasadzie "drag and drop" klasą Graphics2D

Aruba Cloud - Virtual Private Server VPS
0 głosów
581 wizyt
pytanie zadane 1 listopada 2016 w Java przez Jonki Dyskutant (8,180 p.)

Potrzebuje okodzić funkcję rysowania prostej linii poprzez naciśnięcie, przeciągnięcie i puszczenie. W ten sposób powinna powstawać prosta linia. Mam to zrobione w połowie. Chodzi o to, że przez tą całą drogę, którą przebędzie myszka, rysuje mi proste linie. Jak zrobić, aby była taka jedna linia i podążała za wskaźnikiem myszki.Tak wygląda obecny efekt: https://zapodaj.net/9b7059cecc04a.png.html

 

A to kod funkcji: 

else if(type.equals("LINE")) {
				panelPaint.addMouseListener(new MouseAdapter() {
					@Override
					public void mousePressed(MouseEvent e) {
						point1 = e.getPoint();
					}
				});
				panelPaint.addMouseMotionListener(new MouseMotionAdapter() {
					@Override
					public void mouseDragged(MouseEvent e) {
						point2 = e.getPoint();
						
						g2.draw(new Line2D.Double(point1, point2));
		                
		                panelPaint.repaint();
					}
				});
			}

I jeszcze mam pytanie odnośnie tej całej klasy Graphics2D. Na początku programu domyslnie wykonuję ten kod: 

if(type.equals("PEN")) {
			panelPaint.addMouseListener(new MouseAdapter() {
				@Override
				public void mousePressed(MouseEvent e) {
					oldX = e.getX();
					oldY = e.getY();
				}
			});
			panelPaint.addMouseMotionListener(new MouseMotionAdapter() {
				@Override
				public void mouseDragged(MouseEvent e) {
					currentX = e.getX();
					currentY = e.getY();

					strokeSize = new BasicStroke(1);
					g2.drawLine(oldX, oldY, currentX, currentY);
					
					panelPaint.repaint();
					
					oldX = currentX;
					oldY = currentY;
				}
			});
		}

Wtedy można rysować linie według własnego upodobania. Natomiast później gdy za pomocą buttona przełączę sobie na rysowanie tych prostych linii, to pozostaje ta metoda 'g2.drawLine(oldX, oldY, currentX, currentY);', tak jakby była aktywna, mimo, że teraz używam metody do rysowania prostych linii.

 

Większa część kodu: http://pastebin.com/14Bqmzx7

 

komentarz 3 listopada 2016 przez Mateusz51 Nałogowiec (28,180 p.)
Aby to działało za każdym przesunięciem myszki musisz odświeżyć "płótno". Nie zabardzo znam strukture twojego kodu.

Ale możesz zrobić to tak że w klasie w której rysujesz masz jakaś strukture w której zapisujesz już namalowane linie. A w zdarzeniach tworzysz linie tymczasową i wykonujesz repaint.

W metodzie paint zerujesz tło a nastepnie rysujesz linie tymczasową oraz linie zapisane w strukturze.

1 odpowiedź

0 głosów
odpowiedź 3 listopada 2016 przez Javowiec Pasjonat (21,560 p.)
edycja 4 listopada 2016 przez Javowiec

Jakość kodu pozostawia wiele do życzenia (np. inicjalizowanie zmiennej statycznej w konstruktorze), dlatego tylko naprowadzę na szybkie rozwiązanie. Nadpisz tę metodę i tam rysuj linię:

@Override
public void paint(Graphics g) {
    super.paint(g);
    g.drawLine(point1.x, point1.y, point2.x, point2.y);
}

A MouseMotionListener będzie wyglądał wtedy tak:

panelPaint.addMouseMotionListener(new MouseMotionAdapter() {
	@Override
	public void mouseDragged(MouseEvent e) {
		point2 = e.getPoint();
		panelPaint.repaint();
	}
});

Tylko, że to rozwali resztę programu. Pokombinuj jak to wkomponować w Twój program cheeky

Jak chcesz, aby linie Ci nie znikały, musisz je przechowywać w kolekcji i rysować za każdym razem wszystkie w metodzie paintComponent() - używając pętli. wink

Podobne pytania

0 głosów
0 odpowiedzi 217 wizyt
pytanie zadane 26 maja 2019 w Java przez matrix1395 Nowicjusz (190 p.)
0 głosów
1 odpowiedź 169 wizyt
pytanie zadane 6 grudnia 2015 w Java przez gab123 Mądrala (5,230 p.)
0 głosów
1 odpowiedź 524 wizyt
pytanie zadane 24 maja 2018 w Java przez Paweł Celuch Początkujący (420 p.)

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,663 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...