Rysowanie w Java


(Druii) #1

Witam

Zaczęliśmy na roku programowanie w Javie. Wszystko jest w miarę proste, wykonałem prawie cały, ale nie potrafię rysować kształtów.

Mamy zadanie stworzenia figur.

Program dzielimy na 4 klasy - Punkt (nadaje x i y na osi współrzędnych), Trójkąt i Czworokąt(budowany na podstawie tych pkt) oraz Test (czyli main sprawdzający działanie.)

Barierą okazał się ostatni podpunkt - narysowanie figur z moich punktów. Czytałem rożne artykuły, ale ciągle nie potrafię zbudować tej aplikacji.

Chodzi o to ze za pomocą JPanel i JFrame zrobić rysunek trójkąta i czworokąta z wartości podanych w klasie testującej.

Znalazł by się ktoś dobry, kto wytłumaczył by jak to zrobić? Nawet nie wiem jak zacząć, czy kod w którejś z klasy i potem jakoś go do JFrame wrzucić, czy w jPanelu.. :frowning:

Byłbym po 100kroć wdzięczny za każdą pomoc. Zaznaczam że nie jest to żadne zadanie na ocenę, czy pisane tutaj, bo mi się nie chce robić (z resztą widać ile już zrobiłem), po prostu wiem że w dalszej części nauczania na studiach, będę musiał sięgnąć po takie umiejętności jak rysowanie, a sam (w tym momencie) nie potrafię siętego nauczyć.

Tutaj jest treść zadania.

Zadanie 4 -- >> http://tornado.uck.pk.edu.pl/~danusia/Z ... wicz02.pdf

Tutaj kody klas.

Trojkat

/*

 * To change this template, choose Tools | Templates

 * and open the template in the editor.

 */

package punkt;

import java.awt.Graphics;

/**

 *

 * @author lpietak

 */

public class Trojkat {


/** Skladowe klasy

* 

* 

*/  

   Punkt a,b,c;

   public double ob,u;

   private double pl;


/** Konstruktor podstawowy

* 

* 

*/

   Trojkat()

   {

     this.a=new Punkt();

     this.b=new Punkt(0,1);

     this.c=new Punkt(1,0);    

   }



 /** Konstruktor przyjmujacy 3 argumenty typu Punkt

  * @param x argument typ Punkt

  * @param y argument typ Punkt

  * @param z argument typ Punkt

  * 

  */

    Trojkat(Punkt x, Punkt y, Punkt z)

   {

     this.a=x;

     this.b=y;

     this.c=z;

   }



  /** Opis metody liczącej pole trojkata z jednym argumentem,

   * na podstawie wzoru herona

   * 

   * @param t argument typ Trojkat

   * @return Zwraca wynik typu Double

   */

   public double pole(Trojkat t)

   {

   pl = Math.abs((t.b.dajX() - t.a.dajX()) * (t.c.dajY() - t.a.dajY()) - (t.b.dajY() - t.a.dajY()) * (t.c.dajX() - t.a.dajX()))/2 ;

   return pl; 

   }


  /** Opis metody liczącej wysokosc trojkata (bez argumentu)

  * na podstawie wzoru Herona

  * 

  * @return Zwraca wynik typu Double

  */

   public double wys()

   {

   //double h = (obw()/2);

   //return Math.sqrt(h*(h-a.odlegosc(b))*(h-b.odlegosc(c))*(h-c.odlegosc(a)));

       double h = (2 * pl) / a.odlegosc(b);

       return h;

   }


   /** Opis metody liczącej obwod trojkata (bez argumentu)

   * na podstawie sumy odleglosci punktow a od b, b od c oraz c od a 

   * 

   * @return Zwraca wynik typu Double

   * 

   */


   public double obw()

   {

    return a.odlegosc(b) + b.odlegosc(c) + c.odlegosc(a);   

    }

    /**

     * Metoda wypisujaca tekst

     * @param g

     */

   public void paint(Graphics g)

   { 

       System.out.println(" Rysuje trójkat ");   

   }


   /**

   * Metoda wypisujaca tekst 

   */

    public void koloruj()

   { 

       System.out.println(" Koloruje ");   

   }


  /** Opis metody toString

   * 

   * @return Zwraca "tekst liczbowy" -(cos jak przeciazony operator wyjscia)

   */ 

   @Override

   public String toString()

   {

       return "("+a+ ""+b+"" +c+")";  

   } 

}

Test

package punkt;

import java.util.Arrays;

/**

 *

 * @author lpietak

 */

public class Test {


     public static void main(String[] args) {


         Punkt p1 = new Punkt(1,0);

         Punkt p2 = new Punkt(3,5);

         Punkt p3 = new Punkt(-1,3);

         Punkt p4 = new Punkt(1,1);

         Punkt p5 = new Punkt(5,5);

         Punkt p6 = new Punkt(0,3);


         System.out.println("Punkty: ");

         System.out.println(p1);

         System.out.println(p2);

         System.out.println(p3);

         System.out.println(p4);

         System.out.println(p5);


         System.out.print("\n\nTrojkat: ");

         Trojkat tr = new Trojkat(p1,p2,p3);

         //wyniki trujkata tr

         System.out.println(tr);

         System.out.print("Wysokosc trojkata: ");

         System.out.println(tr.wys()); 

         System.out.print("Pole trojkata: ");

         System.out.println(tr.pole(tr));

         System.out.print("Obowd trojkata: ");

         System.out.println(tr.obw());  


         System.out.print("\n\nCzworokat: ");

         Czworokat czw = new Czworokat(p1,p2,p3,p4);

         System.out.println(czw);

         System.out.print("Przekatna czworokata: ");

         System.out.println(czw.przek()); 

         System.out.print("Pole czworokata: ");

         System.out.println(czw.pole(czw));

         System.out.print("Obowd czworokata: ");

         System.out.println(czw.obw());  


         //CZESC Z TABLICAMI FIGUR


         System.out.print("\n\nTABLICA Trojkat \n\n");

         Trojkat[] trujkat = new Trojkat[3];

         trujkat[0]=new Trojkat();

         trujkat[1]=new Trojkat(p1,p3,p5);

         trujkat[2]=new Trojkat(p5,p2,p3);

         for(int i = 0; i
         System.out.println("trujkat[" + i + "]= " + trujkat[i] );

          //tutaj metody wypisalem dla kazdego trojkata po 1 wybranej metodzie, zeby tylko pokazac ze dziala

         System.out.println("Metoda pole: " + trujkat[0].pole(trujkat[0]));

         System.out.println("Metoda obw: " + trujkat[1].obw());

         System.out.println("Metoda wys: " + trujkat[2].wys());


         //sortowanie wg pola

         //wpisanie do tabeli pol wynikow

         double[] at = {trujkat[0].pole(trujkat[0]),trujkat[1].pole(trujkat[1]),trujkat[2].pole(trujkat[2])};

         System.out.print("\nSortowanie Trojkat (wg pola) \n");

         Arrays.sort(at);

         for(int i=0; i< at.length;i++)

         System.out.print(" :: " + at[i]+ " :: ");



         System.out.print("\n\nTABLICA Czworokat \n\n");

         Czworokat[] czworokat = {new Czworokat(),new Czworokat(p1,p2,p3,p5),new Czworokat(p1,p5,p3,p6)};

         for(int i = 0; i
         System.out.println("czworokat[" + i + "]= " + czworokat[i] );

         //tutaj metody wypisalem dla kazdego czworokata po 1 wybranej metodzie, zeby tylko pokazac ze dziala

         System.out.println("Metoda pole dla czworokata 1: " + czworokat[0].pole(czworokat[0]));

         System.out.println("Metoda obw dla czworokata 2:: " + czworokat[1].obw());

         System.out.println("Metoda wys dla czworokata 3:: " + czworokat[2].przek());


         double[] czwor = {czworokat[0].pole(czworokat[0]), czworokat[1].pole(czworokat[1]), czworokat[2].pole(czworokat[2])};

         System.out.print("\nSortowanie Czworokat (wg pola) \n");

         Arrays.sort(czwor);

         for(int i=0; i< czwor.length;i++)

         System.out.print(" :: " + czwor[i]+ " :: ");


    }



}

Punkt

/*

 * To change this template, choose Tools | Templates

 * and open the template in the editor.

 */

package punkt;


import java.util.*;

import static java.lang.Math.*;


/**

 *

 * @author lpietak

 */

public class Punkt {

/** Skladowe klasy

* 

* 

*/

    private double x,y;


    /** Konstruktor podstawowy

     * 

     * 

     */

    public Punkt()

    {

    this.x=0;

    this.y=0;

    };

  /** Konstruktor przyjmujacy 2 argumenty typu double

  * @param _x argument typ double

  * @param _y argument typ double

  *  

  * 

  */

    public Punkt(double _x, double _y)

    {

    this.x=_x;

    this.y=_y;

    }

   /** Opis metody obliczajacej odleglosc miedzy punktami

    * 

    * @param o Argument typu Punkt                       

    * @return Zwraca wynik typu double

    */

    public double odlegosc(Punkt o)

    {

       return Math.sqrt(Math.pow((o.x - this.x),2) + Math.pow((o.y - this.y),2));


    }

    /** Metoda bezargumentowa zwracajaca wartosc X

     * 

     * @return Zwraca wartosc X typu double

     */ 

    public double dajX()

    {

        return x ;

    }

    /** Metoda bezargumentowa zwracajaca wartosc X

     * 

     * @return Zwraca wartosc Y typu double

     */ 

    public double dajY()

    {

        return y ;

    }

   /** Opis metody toString

   * 

   * @return Zwraca "tekst liczbowy" -(cos jak przeciazony operator wyjscia)

   */ 

    @Override

    public String toString()

    {

        return "(" + this.x + "," + this.y + ")";

    }

  }

Czworokat

/*

 * To change this template, choose Tools | Templates

 * and open the template in the editor.

 */

package punkt;


import java.awt.Graphics;

/**

 *

 * @author lpietak

 */

public class Czworokat {


/** Skladowe klasy

* 

* 

*/ 

    Punkt a,b,c,d;

/** Konstruktor podstawowy

* 

* 

*/

   Czworokat()

   {

     this.a=new Punkt();

     this.b=new Punkt(0,1);

     this.c=new Punkt(1,0);  

     this.d=new Punkt(1,1);

   }


  /** Konstruktor przyjmujacy 4 argumenty typu Punkt

  * @param x argument typ Punkt

  * @param y argument typ Punkt

  * @param z argument typ Punkt

  * @param r argument typ Punkt

  */


  Czworokat(Punkt x, Punkt y, Punkt z, Punkt r)

   {

     this.a=x;

     this.b=y;

     this.c=z;

     this.d=r; 

   }

  /** Opis metody liczącej pole czworokata z jednym argumentem,

   * na podstawie wzoru herona (podzielony na 2 trojkaty ktorych wynik zostal zsumowany)

   * 

   * @param t argument typ Czworokat

   * @return Zwraca wynik typu Double

   */

  public double pole(Czworokat t)

  { 

   double h1 = (a.odlegosc(b) + this.a.odlegosc(c) + c.odlegosc(b))/2;

   double h2 = (d.odlegosc(b) + this.d.odlegosc(c) + c.odlegosc(b))/2;

   return Math.sqrt(h1*(h1-a.odlegosc(b))*(h1-a.odlegosc(c))*(h1-c.odlegosc(b))) + Math.sqrt(h2*(h2-d.odlegosc(b))*(h2-d.odlegosc(c))*(h2-c.odlegosc(b))) ;

   }


 /** Opis metody liczącej obwod czworokata (bez argumentu)

 * na podstawie sumy odleglosci punktow a od b, a od c, d od b oraz d od c 

 * 

 * @return Zwraca wynik typu Double

 */

   public double obw()

   {

    return this.a.odlegosc(b) + this.a.odlegosc(c) + this.d.odlegosc(b) + this.d.odlegosc(c);

   }

  /** Opis metody liczącej przekatna czworokatu (bez argumentu)

  * oblicza odleglosc miedzy przeciwleglymi wiezcholkami

  * 

  * @return Zwraca wynik typu Double

  */

   public double przek()

   {

       return this.c.odlegosc(b);

    }


   /**

     * Metoda wypisujaca tekst

     * @param g

     */

    public void paint(Graphics g)

   { 

       System.out.println("Rysuje Czworokat ");   

   }

   /**

   * Metoda wypisujaca tekst 

   */

    public void koloruj()

   { 

       System.out.println(" Koloruje ");   

   }

   /** Opis metody toString

   * 

   * @return Zwraca "tekst liczbowy" -(cos jak przeciazony operator wyjscia)

   */ 

   @Override

   public String toString()

   {

       return "("+a+ ""+b+""+c+"" +d+")";  

   }  

}

(eranet) #2

Java.Import.do nie będzie w stanie zaimportować niczego ponieważ nie wskazałeś co ma importować dana funkcja

Import java.awt.Graphics;

import Java.swt.Graphics.ID.Converter;

//

spine XMLS.Web.ID != set.ID.Path('', plik.java.part_i)

this.import == true

Dajesz Compile > As is i powinieneś otrzymać plik *.java