Zeichnen

Diskutiere Zeichnen im Allgemeine Java-Themen Forum; Hallo, Ich weiß nicht wieso aber ich bekomme es nicht hin eine simple sache zu zeichnen entweder ich habe etwas grundlegend nicht verstanden oder...

  1. Phänox
    Phänox Mitglied
    Hallo,
    Ich weiß nicht wieso aber ich bekomme es nicht hin eine simple sache zu zeichnen entweder ich habe etwas grundlegend nicht verstanden oder es ist ein fehler den ich nicht sehen.
    Meine Spiele klasse wo das JFrame sich befindet und dort soll das rechteck erscheinen
    Code (Text):

    public class Game extends JFrame  {
     
     
        public static void main(String[] args)
        {
            JFrame game = new JFrame();
            game.setVisible(true);
            game.setSize(1000, 1000);
         
            Spielfeld dc = new Spielfeld();
            game.add(dc);
       }
    }
     
    Und hier die Klasse wo das Rechteck gezeichnet wird
    Code (Text):

    public class Spielfeld {

    public void zeichen(Graphics g)
            {
             
              Graphics2D g2 = (Graphics2D) g;
             
              g2.drawRect(100, 100, 100, 50);
             
             
            }
    }
     
    Simple frage: Wie schaffe ich es das es da ist Jframe wird gemacht aber das rechteck nicht!
    Und wenn ihr mir noch erklären könnten wo mein fehler Lag beziehungsweiße wie das zeichnen abläuft wäre das echt super !

    Danke im voraus :)
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. Robat
    Robat Bekanntes Mitglied
    1. Das was du deinem JFrame addest ist kein JPanel.
    2. Wenn dein Spielfeld zu einem JPanel geworden ist solltest solltest du die Methode paintComponent(Graphics g) überschreiben.
    Dort kannst du dann zeichnen.
     
    Phänox gefällt das.
  4. Phänox
    Phänox Mitglied
    Vielen Dank ! es hat geklappt nur verstehe ich nicht ganz warum? mir ist klar das ich die Klasse zu einem Jpanel "gemacht" habe aber warum klappt es dann nicht mit meiner Methode sondern nur mit ihrer?
     
  5. Robat
    Robat Bekanntes Mitglied
  6. Phänox
    Phänox Mitglied
    Ich weiß nicht ob das noch hier rein passt aber ich möchte mehrer Rechtecke zeichnen lassen, und dann habe ich angefangen jedes Rechteck zu erstellen. Dann hab ich überlegt ob das nicht besser geht und kam auf diesen code
    Code (Text):

    public void paintComponent(Graphics g)
       
        {
            Graphics2D g2 = (Graphics2D) g;
            Rectangle rec1 = new Rectangle(0,0,180,135);
              g2.draw(rec1);
            while( i<10)
            {
                i++;
                g2.drawRect(0, 135+(i*90), 180, 90);
            }
           
             
           
        }
     
    Er zeichnet nur das Große Rechteck aber die 9 kleinen nicht warum nicht? muss ich jedes einzelne was ich erstellt habe noch irgendwo speichern z.B in einem array? und wenn ja wie mach ich das dann?
     
  7. Robat
    Robat Bekanntes Mitglied
    Dein Code sollte eigentlich funktionieren.

    Ich denke mal, dass es an deinem i liegt. Versuch mal i am Anfang deiner paintComponent(Grahpics g) Methode auf 0 zu setzen.

    Das mit der ArrayList kann man machen.
    Solltest du sicherlich auch, da du ja anhand der Position des Rechteckes die Position deiner Spieler bestimmen willst.

    Das könntest du machen, in dem du dir eine ArrayList<Rectangle> erstellst und im Konstruktor deiner Klasse x Elemente hinzufügst. (keine Ahnung wie viele du brauchst).
    In deiner paintComponent(Graphics g) Methode durchläufst du dann das Array mit einer for / for-each und zeichnest das Element.

    Gruß
    Robert
     
  8. Phänox
    Phänox Mitglied
    Es hat alles geklappt *_* (Happy)
    es gibt nur noch eine Sache die ich brauche und zwar möchste ich jedem Rechteck eine Nummer geben.
    Weil ein Monopoly Spiel hat ja 40Felder und dann möchte ich überprüfen auf welchen feld(nummer) er steht und dann kann ich die zahl dazurechnen die er gewürfelt hat und dann hab ich die nummer des Feldes auf die er muss und damit dann auch die Koordinaten aber wie kann ich einem rechteckt noch eine Extra nummer geben?
     
  9. Robat
    Robat Bekanntes Mitglied
    Du kannst den Index des Rechtecks in der ArrayList benutzten :)

    Gruß
    Robert
     
  10. Phänox
    Phänox Mitglied
    Hab ich auch schon drangedacht nur leider geht das nicht. Ich mach dir mal schnell ein Bild.
    Bild: http://prntscr.com/df85gu
    Code (Text):

    private int i=0;
        ArrayList<Rectangle> Spiellinks= new ArrayList<Rectangle>();
        ArrayList<Rectangle> Spieloben= new ArrayList<Rectangle>();
        ArrayList<Rectangle> Spielrechts= new ArrayList<Rectangle>();
        ArrayList<Rectangle> Spielunten= new ArrayList<Rectangle>();
       
       
       
           
           
           
           
        public void paintComponent(Graphics g)
       
        {
            while(i<9)
            {
                Spiellinks.add(new Rectangle(0, 160+(i*80), 160, 80));
                Spieloben.add(new Rectangle(160+(i*80), 0, 80, 160));
                Spielrechts.add(new Rectangle(880, 160+(i*80), 160, 80));
                Spielunten.add(new Rectangle(160+(i*80), 880, 80, 160));
                i++;
                 
            }
             
             
            Graphics2D g2 = (Graphics2D) g;
            Rectangle rec1 = new Rectangle(0,0,160,160);
              g2.draw(rec1);
              Rectangle rec2 = new Rectangle(0,880,160,160);
              g2.draw(rec2);
              Rectangle rec3 = new Rectangle(880,0,160,160);
              g2.draw(rec3);
              Rectangle rec4 = new Rectangle(880,880,160,160);
              g2.draw(rec4);
            for(int i=0; i < 9; i++)
            {
                 
                Rectangle l = Spiellinks.get(i);
                g.drawRect(l.x, l.y, l.width, l.height);
                Rectangle o = Spieloben.get(i);
                g.drawRect(o.x, o.y, o.width, o.height);
                Rectangle r = Spielrechts.get(i);
                g.drawRect(r.x, r.y, r.width, r.height);
                Rectangle u = Spielunten.get(i);
                g.drawRect(u.x,u.y, u.width, u.height);
                 
            }
     
    So da ich 4 arrays brauche und 4 einzelne rechtecke und das so hinzubekommen bringt mir der index leider nichts ;( daher muss ich jedem rechteck noch eine Nummer geben aber wie ?:/

    Danke im voraus
     
  11. Robat
    Robat Bekanntes Mitglied
    Brauchen ist der falsche Ausdruck. Du kannst es definitiv auch mit einem Array und 4 if-Abfragen machen. (Wenn du das Array befüllst).

    Gibt aber auch noch andere Lösungen:
    Eine wäre bspw. dir deine eigene Rect Klasse zu schreiben. Die Rect-Klasse hat 2 Variablen. 1 Rectangle und eine ID.
    Code (Java):

    public class MyRect {

        private int id;
        private Rectangle r;

       public MyRect(int id, Rectangle r)
       {
            this.id = id;
            this.r = r;
       }

       public Rectangle getRect() { return this.r; }
       public int getId() { return this.id; }

    }
     
    So kannst du über die Getter die ID und das Rect bekommen :)
     
Die Seite wird geladen...

Zeichnen - Ähnliche Themen

Mehrere Linien zeichnen
Mehrere Linien zeichnen im Forum AWT, Swing, JavaFX & SWT
f(x)=x² zeichnen
f(x)=x² zeichnen im Forum Java Basics - Anfänger-Themen
Graphen in Java zeichnen
Graphen in Java zeichnen im Forum Java Basics - Anfänger-Themen
Transparent zeichnen
Transparent zeichnen im Forum AWT, Swing, JavaFX & SWT
Anfängerin möchte Linie zeichnen
Anfängerin möchte Linie zeichnen im Forum Java Basics - Anfänger-Themen
Thema: Zeichnen