OOP Parameter mit der Draw-Methode übergeben

Bitte aktiviere JavaScript!
Guten Tag allerseits!
Ich bin ein absoluter Java Neuling und habe deshalb noch nicht ganz die Prinzipien der objektorientierten Orientierung verinnerlicht. Aktuell stehe ich vor dem folgenden Problem:
Um Konstruktoren zu verstehen und anzuwenden, arbeite ich an einem Projekt, in dem Rechtecke beim Drücken eines JButtons erstellt werden sollen. Diese Rechtecke sollen in einer ArrayList gespeichert werden und im Anschluss einzeln angesprochen werden können.
Soweit, so gut.
Das Problem entsteht dadurch, dass ich Rechtecke mit der Draw-Methode erzeuge und nicht weiß, wie ich dort Parameter übergeben kann.
Ich möchte die x-Position und y-Position nämlich in einem MessageDialog abfragen und anschließend die Rechtecke dort positionieren.
Zudem benötigen die Rechtecke ja auch eine Art ID in der ArrayList...
Vielen Dank für eure Hilfe!

Hier mein bisheriger Code:
Das Fenster, auf dem die Rechtecke erscheinen sollen.
Code:
package Gui;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Window {
    JFrame jf;
    int i = 0;

    public Window() {
        jf = new JFrame();
        jf.setSize(700, 722);
        jf.setResizable(false);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setLayout(null);
        jf.setLocationRelativeTo(null);

        JButton btn = new JButton();
        btn.setBounds(0, 0, 300, 300);
        btn.addActionListener(new ActionHandler());
        jf.add(btn);
       
        List<Rectangle> rects = new ArrayList<Rectangle>();

        if (ActionHandler.isPressed == true) {
            String eingabe1 = JOptionPane.showInputDialog("x Koordinate");  
            Rectangle.xPos(i) = Integer.parseInt (eingabe1);                                                              
            String eingabe2 = JOptionPane.showInputDialog("y Koordinate");  
            Rectangle.yPos(i) = Integer.parseInt (eingabe2);      
           
                                                         // Das Rechteck soll mit einer ID "i" angesteuert werden
            rects.add(new Rectangle(i,xPos(i),yPos(i))); // Hier wollte ich die ID, also den Index in der ArrayList festlegen
                                                         // und außerdem die x und y Koordinate übergeben
            i++;  
        }

       

        jf.setVisible(true);
    }
}
Die Draw-Methode für die Rechtecke.
Code:
package Gui;



import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;



import javax.swing.JLabel;



public class Rectangle extends JLabel {



    private static final long serialVersionUID = 1L;



    public static int xPos = 0, yPos = 0;



    protected void paintComponent(Graphics g) {

        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);



        g.setColor(Color.BLUE);

        g.fillRect(xPos, yPos, 50, 50);

    }

}
Der Action Listener.
Code:
package Gui;



import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;



public class ActionHandler implements ActionListener {

public static boolean isPressed = false;

    @Override

    public void actionPerformed(ActionEvent e) {

        isPressed = true;

    }

}
 
Erstmal solltest du jedes static bei Variablen entfernen :)

Die Position der Rechtecke kannst du denen doch über den Konstruktor übergeben?
 
"absoluter Neuling" und "GUI" sind Dinge, die naturgemäß nicht zusammenpassen. Mach erstmal ohne UI, einfach auf der Konsole.
Das stimmt zwar irgendwie, aber ich arbeite immer mit Zwischenzielen, die ich erreichen möchte. Und mein nächstes Zwischenziel ist ein Raumplaner, bei dem man Objekte auf Knopfdruck erzeugen können soll und dann mit Tasten bewegen.
Klar, könnte man Java Bücher Schritt für Schritt durcharbeiten, aber ich denke, dass sich in der Realität auch nach spezifischen Fachgebieten der Programmiersprache informiert wird, in Abhängigkeit davon, was für ein Projekt umgesetzt wird.
 
Das stimmt zwar irgendwie, aber ich arbeite immer mit Zwischenzielen, die ich erreichen möchte.
Das ist grundsätzlich auch der richtige Weg, allerdings müssen die Ziele "realistisch" (also passend zum eigenen Kenntnis-/Erfahrungsstand) sein.

Es geht nicht darum, erstmal jahrelang irgendwelche Bücher durchzuackern. Du musst ein paar grundlegende Konzepte verstehen. Hierbei sind GUIs schlicht hinderlich, während learning by doing enorm wichtig ist.
 
Da Du ja einen Raumplaner bauen willst, hätte ich mal ein paar Teilaufgaben für Dich:

1. Schreib ein Programm, das die Beschreibung eines Raums in geeignete Objekte einliest und als "Karte" wieder ausgibt. Das Programm soll als erstes Argument den Namen der Datei erhalten, die die Eingabedaten (=Beschreibung des Raums) enthält. Die Karte soll auf der Standardausgabe ausgegeben werden.

Die Eingabe hat folgenden Aufbau
Code:
breite hoehe 
n
x1 y1 b1 h1 typ1
x2 y2 b2 h2 typ2
x3 y3 b3 h3 typ3
...
xn yn bn hn typn
Es wird dabei von einem rechteckigen Raum aus, dessen Grundriss breite Einheiten breit (x-Richtung) und hoehe Einheiten hoch (y-Richtung) ist. Die linke obere Ecke des Grundrisses des Raums sei (0,0). In dem Raum befinden sich n Gestaltungselemente. Jedes Element ist rechteckig. Das i-te Element ist vom Typ typi, bi Einheiten breit, hi Einheiten hoch und befindet sich an der Position xi, yi. Als Typ kommen erstmal nur in Frage: s für Stuhl, t für Tisch.

Die Ausgabe soll den Grundriss des Raums inkl. seiner "Belegung" zeigen. Freie Positionen sollen dabei mit einem '.' angezeigt werden, andere mit dem Typ des Elements, das diese Position belegt.

Beispiel: Eingabe
Code:
10 5
5
3 1 1 1 s
5 1 1 1 s
3 3 1 1 s
5 3 1 1 s
2 2 5 1 t
Ausgabe:
Code:
..........
...s.s....
..ttttt...
...s.s....
..........
2. Erweitere das Programm derart, dass es insgesamt fünf Parameter entgegennimmt. Der erste ist wie oben die Eingabedatei, der zweite ist der Name einer Ausgabedatei, der dritte ist der Index eines zu verschiebenden Elements, der vierte gibt die Verschiebung des Elements in x-Richtung, der fünfte in y-Richtung an. Gib die Karte nach der Verschiebung des Elements auf der Standardausgabe aus und die Beschreibung im Format wie oben in der angegebenen Ausgabedatei. Das erste Element der Eingabe hat den Index 0, das letzte den Index n-1.

Rufst Du das Programm also mit der Eingabe von oben und den Parametern input.txt output.txt 4 -1 0 auf, soll es den Grundriss
Code:
..........
...s.s....
.ttttt....
...s.s....
..........
auf der Standardausgabe anzeigen und in der Datei output.txt soll sich
Code:
10 5
5
3 1 1 1 s
5 1 1 1 s
3 3 1 1 s
5 3 1 1 s
1 2 5 1 t
finden.

3. Sorge dafür, dass Dein Modell keine "unsinnigen" Verschiebungen ausführt. Beispielsweise: Stuhl aus dem Raum heraus schieben, Stuhl in den Tisch schieben (oder andersrum).

4. Erweitere Dein Modell um zusätzliche Typen (z. B. Schrank, Lampen, ...) und Attribute (z. B. Bezeichner für die Elemente) - kommt darauf an, wie weit Du gehen willst.

Wichtig: bei dem ganzen Spaß steht nicht die Ein-/Ausgabe im Vordergrund sondern die Entwicklung eines vernünftigen, objektorientierten Modells. Wenn Du das hast, könntest Du ausreichend Verständnis entwickelt haben, um in Richtung GUI zu gehen. Das bis dahin entwickelte Modell wird dort übrigens weiterverwendet. Sprich: das brauchst Du sowieso.
 
Das ist grundsätzlich auch der richtige Weg, allerdings müssen die Ziele "realistisch" (also passend zum eigenen Kenntnis-/Erfahrungsstand) sein.

Es geht nicht darum, erstmal jahrelang irgendwelche Bücher durchzuackern. Du musst ein paar grundlegende Konzepte verstehen. Hierbei sind GUIs schlicht hinderlich, während learning by doing enorm wichtig ist.
Danke für deine Hilfe.
Ich hatte Informatik 2 Jahre lang in der Schule, deshalb war die Beschreibung vielleicht ein wenig irreführend.
Kannst du mir vielleicht ein oder zwei Bücher empfehlen, die so praxisnah wie deine Aufgabe eben, beschrieben sind?
Danke nochmal für die Hilfe :)
 
ein oder zwei Bücher empfehlen
Für ein absoluten Anfänger in Java empfehle ich:
Es gibt noch einige Bücher mehr, zum Beispiel "Der Weg zum Java-Profi", welches ich persönlich nicht gelesen habe, aber über die Zeit wurde es hier oft von Leuten, die es hatten, als sehr gut angepriesen. Dann "Java ist auch eine Insel", was online frei zu lesen ist und für ein Anfänger, laut dem Autor selbst, nicht geeignet ist.

Bevor du dich an die GUI machst, lerne erstmal die imperativen Sprachkonzepte, die Codeconvention von Java
, nutze den Forum für Fragen, FAQ .

Jetzt hast du bis Weihnachten zu tun, melde dich, wenn was ist.

Wenn du eine Alternative suchst, lese hier kurz durch.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben