JAVA - rysowanie lini awt

0

Witam,

Tworzę sobie taką zubożoną wersje windowsowego panta dla treningu.
Mam panel w którym chce rysować.
W jaki sposób mogę rysować już po utworzeniu panelu?

Już wyjaśniam o co mi chodzi.
Na razie do rysowania używam przeładowanej metody paintCompoment()
w taki sposób:

 
public class panel extends JPanel
	{
	    private	Graphics Graph=null;
	    public  int x=-1;
	    public  int y=0;
	    
	 
		public void paintComponent (Graphics graph)
			{
				super.paintComponent(graph);
				if(x>-1)
					{
						graph.drawLine(x,y,x+69,y+69);
					}	
			}
	    public Graphics getGraph()
	    	{
	    		return Graph;
	    	}

A następnie zmieniam sobie współrzędne x i y i wywołuję sobie Panel.repaint().
Po pierwsze znikają mi stare linie i nie wiem dlaczego?(tzn tylko jedna jest aktualnie na ekranie)
Po drugie czy istnieje inna metoda rysowania w panelu bez przeładowywania paintComponenet?
Nie chciałbym aby kod tej metody rozrósł mi sie do ogromnych rozmiarów a poszczególne funkcje
(np pędzel,kwadrat, kółko) chciałem mieć w oddzielnych klasach.
Po trzecie trwa kilak sekund zanim będę mógł narysować nową linię. Jak mogę to przyspieszyć?

Z góry dziękuję za pomoc!

0

http://lmgtfy.com/?q=paint+in+java ;)

Poczytaj najpierw o podstawach, przeanalizuj przyklady... a potem bierz sie za kodzenie ;) Z reguly najpierw trzeba opanowac teorie ;)

Linie znikaja Ci, bo odrysowanie panelu to odrysowanie panelu - nigdzie nie napisales, ze maja sie rysowac stare linie ;) Skad program ma to wiedziec ?

0

Dzięki za linka do google ale korzystałem już z tej strony przez kilka godzin zanim założyłem ten temat.
Niestety nigdzie nie znalazłem odpowiedzi na moje pytania.

Co do repaint() - w jaki sposób mogę nakazać mu aby przerysowywał istniejące linie?
Wersja z argumentami pozwala wydzielić jedynie kształt który będzie ponownie odmalowany.
W przypadku programu graficznego to bez sensu bo mogą się tam już znajdować jakieś linie.

Ponawiam pytanie: dlaczego po narysowaniu kilku linii program może mi się przywieszać na 2-3 sekundy?

Jeżeli nie chce ci się tłumaczyć rzuć mi parę szczegółowych haseł to sobie poszukam.

0

Figury, które chcesz narysować powinieneś zapamiętywać w jakiejś kolekcji i rysować wszystkie w pętli.
Jeśli chodzi o opóźnienie, to w innych programach nie występuje. Pokaż kod - musiałeś coś spieprzyć.

0

klasa sluchacza

 
public class sluchacz_myszy extends MouseAdapter
{
	private int aktywny_przycisk=0;
	//private Graphics Graph=null;
	static panel pan=null;
	
	public void mouseClicked(MouseEvent event)
		{
			
			pendzel.rysuj(event.getX(),event.getY(),pan);
			panel Panel=(panel) event.getSource();
			Panel.repaint();
			//JOptionPane.showMessageDialog(null, event.getX());
		}
}

klasa pendzel

 
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class pyndzel 
{

	static void rysuj(int x,int y,panel pan)
		{
	
			pan.x=x;
			pan.y=y;
			pan.repaint();
		    
		}

klasa panel

 
public class panel extends JPanel
	{
	  
	    public  int x=-1;
	    public  int y=0;
	
	 
		public void paintComponent (Graphics g)
			{
				super.paintComponent(g);
				if(x>-1)
				{
					g.drawLine(x,y,x+69,y+69);
				}	
			}
		
		private static final long serialVersionUID = 5567999186057328669L;
	}

Dodaję też w załączniku cały kod programu (eclipse).
Będę ogromnie wdzięczny za każda konstruktywną krytykę.
Ponieważ dopiero się uczę na pewno mi ona pomoże i pozwoli pozbyć się złych nawyków.

0

Imo, brzydko wygląda, okno programu pojawia się w kącie ekranu.
Program prócz tego, że pojawia się okno, niczego nie robi, tzn. niczego nie można narysować. W kodzie są błędy składniowe uniemożliwiające kompilację.

0

Przesyłam poprawiony kod projektu- Eclipse nie pokazuje mi żadnych błędów składniowych a jedynie alerty że dana biblioteka lub zmienna nie jest nigdzie używana.
(w przyszłości będzie ale na razie utknąłem na tym "zawieszaniu")

0
  1. Żadnego zawieszania nie ma.
  2. Nie tworzysz kolekcji obiektów, rysujesz zawsze tylko jeden odcinek. Użytkownik nie ma wpływu na położenie punktu końcowego.
  3. Poprzednio przesłałeś taki kod klasy pyndzel:
 
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class pyndzel 
{

	static void rysuj(int x,int y,panel pan)
		{
			//JOptionPane.showMessageDialog(null, "asasa");
			pan.x=x;
			pan.y=y;
			
			pan.p
			//pan.repaint();
			//g.drawLine(x, y, x+50, y+50);
		    
		}
}

On nie jest poprawny,

0

ad 2 dzięki! przemyślę te wskazówkę i doczytam w google :)
ad 3 przepraszam faktycznie moja pomyłka!

0

Polecam Ci książeczkę "Java. Ćwiczenia praktyczne. Wydanie III" Marcina Lisa. Od niej zacząłem. Nauczy Cię teorii składni, tworzenia metod i klas itp. Najpierw ją przeczytałem od deski do deski robiąc ćwiczenia z kompem na kolanach, a potem powoli coś samemu. Myślę, że jest to dobry start, choć mogę się mylić z uwagi, iż programuję od jakichś 10 dni :)

Ps w rozdziale 7 książeczki jest sporo ćwiczeń z rysowania w panelu. Co prawda ćwiczenia są na apletach (w tym rozdziale), ale nic nie stoi na przeszkodzie, by wykorzystać kod w aplikacji.

Pozdrawiam :)

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