tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
15
ZUGRIFFE
395
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    KarlPichler KarlPichler ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    62
    Hallo liebe Java Experten,

    ich bin neu hier. beschäftige mich den 3 tag mit java und benötige einen Denkanstoß.

    Ich habe ein 2- dimensionalles Array [30][4]. Aus diesem Array möchte ich nun 30 Rechtecke mit den 4 positionswerten zeichnen.

    Habe mich schon ziemlich durchgegoogelt, finde aber nichts passendes.

    Danke für eure Hilfe im Voraus.
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi und herzlich Willkommen erstmal,
    also wenn du die Rechtecke zeichnen willst, empfehle ich dir die Klasse Rectangle mal anzusehen.

    Viele Grüße

    Sporticus
     

  3. #3
    KarlPichler KarlPichler ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    62
    erstmals danke für die rasche antwort.

    falls ich das richtig verstanden habe, transfomiere ich mein Positionsarray in ein RectangleArray!?
    nun muss ich nur noch das RectangleArray ausgeben!

    BeispielCode wäre aüßerst hilfreich! Danke
     

  4. #4
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Ich hoffe das entspricht überhaupt dem, was du machen willst. So habe ich es zumindest verstanden.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.util.ArrayList;
    import java.util.List;
     
    public class RectanglePainter
    {
        private final List<Rectangle> rectangles;
     
        /**
         * @param rectArray
         */
        public RectanglePainter(int[][] rectArray) {
            this.rectangles = new ArrayList<Rectangle>();
     
            for(int i = 0; i < rectArray.length; i++) {
                int x = rectArray[i][0]; // X-Position
                int y = rectArray[i][1]; // Y-Position
                int width = rectArray[i][2]; // Width
                int height = rectArray[i][3]; // Height
                
                rectangles.add(new Rectangle(x, y, width, height));
            }
        }
     
        /**
         * @param g
         */
        public void paint(Graphics g) {
            for(int i = 0; i < rectangles.size(); i++) {
                Rectangle r = rectangles.get(i);
                g.drawRect(r.x, r.y, r.width, r.height);
            }
        }
    }
    Geändert von Fabio Hellmann (10.08.11 um 17:09 Uhr)
     

  5. #5
    KarlPichler KarlPichler ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    62
    ja das kommt ziemlich auf meine frage hin, allerdings bin ich zu dumm um dieses Snippet richtig einzusetzten.

    ich erklärs mal ausführlicher:
    ich versuche eine kleine Java Applikation zu schreiben mit der ich eine Bahn generieren kann. Ich habe ein Button- Menü mit der ich Bahnstücke hinzufügen kann und die Länge bzw. Krümmung eingeben kann. Diese Bahnstücke werden in einem Array abgespeichert. sections[][].

    Nun möchte ich die Bahn grafisch ausgeben, mit den Werten welche im section[][] Array stehen. Diese Grafik soll nach Buttondruck aktualisiert werden, befindet sich in einem JPanel.

    Wie rufe ich das Programm nun auf?

    Sorry für diese dummen Fragen

    danke
     

  6. #6
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Es gibt keine dummen Fragen, nur dumme Antworten.

    Ich glaube am einfachsten wäre es, wenn du mal deinen bisherigen Code postest, damit ich einen besseren Überblick bekomme.
     

  7. #7
    KarlPichler KarlPichler ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    62
    Code des Zeichenprogramms

    package test5;
    import java.awt.*;
    import javax.swing.*;

    public class MyPanel extends JComponent {

    private static final long serialVersionUID = 1L;
    public Integer[][] sectionsToDraw = new Integer[30][12];

    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    sectionsToDraw[0][0]= 40;
    g.setColor(new Color(100,100,155));
    g.fillRect(20,20,sectionsToDraw[0][0],20);
    }
    }


    Aufruf
    ....
    MyPanel drawPanel= new MyPanel();
    ....

    if(obj == jBShow)
    {
    drawPanel.setPreferredSize(new Dimension(330,290));
    jPImage.add(drawPanel);
    jPImage.validate();
    }

    ..l.
     

  8. #8
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Verwende bitte das nächste mal die Code-Tags.

    Also ich würde den RectanglePainter bei deiner Klasse MyPanel einfügen.
    Zum Beispiel so:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.JComponent;
     
    public class RectanglePainter
    {
        private List<Rectangle> rectangles;
     
        /**
         * @param rectArray
         */
        public void update(int[][] rectArray) {
            this.rectangles = new ArrayList<Rectangle>();
     
            for(int i = 0; i < rectArray.length; i++) {
                int x = rectArray[i][0]; // X-Position
                int y = rectArray[i][1]; // Y-Position
                int width = rectArray[i][2]; // Width
                int height = rectArray[i][3]; // Height
     
                rectangles.add(new Rectangle(x, y, width, height));
            }
        }
     
        /**
         * @param g
         */
        public void paint(Graphics g) {
            for(int i = 0; i < rectangles.size(); i++) {
                Rectangle r = rectangles.get(i);
                g.drawRect(r.x, r.y, r.width, r.height);
            }
        }
    }
     
    class MyPanel extends JComponent {
     
        private static final long serialVersionUID = 1L;
        private final RectanglePainter rectPainter = new RectanglePainter();
        
        public void setRectangleArray(int[][] rectArray) {
            rectPainter.update(rectArray);
        }
     
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            rectPainter.paint(g);
        }
    }
     
     
    Aufruf
    ....
    MyPanel drawPanel= new MyPanel();
    ....
     
    if(obj == jBShow)
    {
        drawPanel.setPreferredSize(new Dimension(330,290));
        jPImage.add(drawPanel);
        jPImage.validate();
    }
    }
    Geändert von Fabio Hellmann (10.08.11 um 17:09 Uhr)
     

  9. #9
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    noch besser wären die Java-Tags mit automatischem Syntaxhighlighting, siehe meine Signatur.

    Andere Frage: wozu brauchst du überhaupt ein 2dimensionales Array? Ist das eine Vorgabe? Viel sinnvoller wäre es, von Anfang an mit Rectangles zu arbeiten.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  10. #10
    KarlPichler KarlPichler ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    62
    Es ist nötig Arrays zu verwenden, da diese "sections" auch noch andere Parameter beinhalten.
    Schön langsam bin ich am verzweifelen, da das speichern, öffen alles funktioniert nur das verdammte zeichnen nicht. ich will doch nur ein Array als rechtecke ausgeben!
     

  11. #11
    KarlPichler KarlPichler ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    62
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    package test5;
    import java.awt.*;
    import javax.swing.*;
     
    public class MyPanel extends JComponent  {
      
        private static final long serialVersionUID = 1L;
        public Integer[][] sectionsToDraw = new Integer[30][12];  
      
        Rectangle[] rect = new Rectangle[20];    
        
        public void paintComponent(Graphics g) {
         super.paintComponent(g);
         
         
            rect[0].x = 10;
            rect[0].y = 10;
            rect[0].width = 60;
            rect[0].height = 20;
            g.setColor(Color.black);
            g.drawRect(rect[0].x, rect[0].y, rect[0].width, rect[0].height);
      
        }
     }

    Habe es jetzt auf eine andere Weise probiert, funktioniert dennoch nicht.

    Warum bekomme ich hier eine NullPointException?

    danke
     

  12. #12
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    weil dein Rectangle[] ausschließlich mit NULL-Objekten gefüllt ist. Du musst es noch füllen.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  13. #13
    KarlPichler KarlPichler ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    62
    hä? ich füll doch das Array mit
    Code java:
    1
    2
    3
    4
    
     rect[0].x = 10;
            rect[0].y = 10;
            rect[0].width = 60;
            rect[0].height = 20;

    check ich nicht!
     

  14. #14
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Nein, damit versuchst du auf das Rectangle mit dem Index 0 aus dem Rectangle-Array zuzugreifen.
    Wenn du ein Rectangle setzen willst, dann musst du das so machen:

    Code java:
    1
    2
    3
    4
    
    rect[0] = new Rectangle(x, y, width, height);
    rect[1] = new Rectangle(x, y, width, height);
    rect[2] = new Rectangle(x, y, width, height);
    ...
     

  15. #15
    KarlPichler KarlPichler ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    62
    okay danke für eure schnelle hilfe. klappt nun wunderbar mit fabios vorschläge.
    Danke
     

Ähnliche Themen

  1. PHP Array mittels JQuery ausgeben
    Von Purdey im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 23.04.11, 20:04
  2. Antworten: 0
    Letzter Beitrag: 22.12.08, 01:01
  3. Antworten: 10
    Letzter Beitrag: 17.12.08, 13:53
  4. Antworten: 19
    Letzter Beitrag: 14.04.05, 12:26
  5. Mehrere Abfragen zu einem Array?
    Von dennis2412 im Forum PHP
    Antworten: 8
    Letzter Beitrag: 22.11.03, 09:31