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, botów: 0