Übergabe von Parametern an andere Methoden

JavaIsanIsland

Neues Mitglied
Hallo,

ich bin noch recht neu was die Programmierung mit Java betrifft. Mein Problem ist folgendes:
Ich erzeuge ein JFrame und möchte die Größe dieses Frames in einer extra Variable abspeichern ("frameWidth" und "frameHeight"). Habe dafür Getter und Setter Methoden gemacht, um in meiner MainKlasse später alles auszuführen. Jedoch gibt er mir immer den Wert 0.0 als Größe aus, obwohl ich ihn wie folgt gesetzt habe (siehe Code). Wie kann ich das ändern?

//Meine ersteKlasse
Java:
package XY;

import java.awt.Toolkit;

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

public class LogInFrame extends JFrame{

    //Attribute
    private JButton cancel;
    private JButton login;
    private JButton register;
    private double frameWidth;
    private double frameHeight;

    //Getter und Setter Methoden
    public double getFrameWidth() {
        return frameWidth;
    }

    public void setFrameWidth(double frameWidth) {
        this.frameWidth = frameWidth;
        frameWidth = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    }

    public double getFrameHeight() {
        return frameHeight;
    }

    public void setFrameHeight(double frameHeight) {
        this.frameHeight = frameHeight;
        frameHeight = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    }
   
   
}


//Meine MainKlasse
Java:
package XY;

public class MainClass{

    public static void main(String[] args) {

        LogInFrame logInFrame = new LogInFrame();
        logInFrame.getFrameWidth();
        logInFrame.getFrameHeight();
    }

}
 
Zuletzt bearbeitet von einem Moderator:
Bitte den Code in Code-Tabs setzen [code=Java]Dein Code[/code]
Zu dem Zeitpunkt, an dem du die Methoden getFrameWidth() und getFrameHeight() aufrufst, sind diese noch nicht initialisiert.
Ich erzeuge ein JFrame und möchte die Größe dieses Frames in einer extra Variable abspeichern
Du könntest beim ersten Aufruf mittels ToolKit die momentane Auflösung ermitteln, ggf. bearbeiten und die Ermittelte oder Neue an den Konstruktor der Klasse LogInFrame beim initialisieren übergeben.
 
Und die Setter sind so Unsinn. Du übergibst einen Wert, der aber sofort wieder überschrieben wird. Dann kannst Du die Variable ganz weglassen und im Getter den Aufruf machen, der die Breite oder Höhe ausliest.

Oder eben den Wert wirklich nutzen, d.h. der Setter setzt den übergebenen Wert.
 
Java:
int breite = 50;
int weite = 40;
KistenGroesse groesseBananenKiste = new KistenGroesse(breite, weite);
BananenKiste bananenKiste = new BananenKiste(groesseBananenKiste);
int x = bananenKiste.gibBreite();
int y = bananenKiste.gibWeite();

x = 50;
y = 40;
 
Vielen Dank euch! Habe meine Klassen überarbeitet sehen wie folgt aus (und funktionieren ersteinmal wie gewünscht). Falls ich dennoch etwas ändern sollte, um die lesbarkeit oder ähnliches zu verbessern mir gerne mitteilen:
//Meine JFrame Klasse
Java:
package XY;

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

public class LogInFrame extends JFrame{

    //Attribute
    private JButton cancel;
    private JButton login;
    private JButton register;
    private double frameWidth;
    private double frameHeight;

    //Getter und Setter Methoden
    public void setFrameWidth(double frameWidth) {
        this.frameWidth = frameWidth;
    }
    
    public double getFrameWidth() {
        return frameWidth;
    }

    public void setFrameHeight(double frameHeight) {
        this.frameHeight = frameHeight;
    }
    
    public double getFrameHeight() {
        return frameHeight;
    }

    public void showFrame(){
        setSize((int) getFrameWidth(), (int) getFrameHeight());        //Framegröße wird in MainMethode gesetztz, hier lassen wir sie nur übergeben
        setVisible(true);            
        setLocation((int) getFrameWidth() / 2, (int) getFrameHeight() / 2);
        setTitle("Log In");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
    }
    
}

//Meine MainKlasse
Java:
package XY;

import java.awt.Toolkit;

public class MusikMakerMain{

    public static void main(String[] args) {

        LogInFrame logInFrame = new LogInFrame();
        logInFrame.setFrameWidth(Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2);
        logInFrame.setFrameHeight(Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2);
        logInFrame.showFrame();
    }

}
 
Ja, das sieht so doch schon gut aus. Für den Anfang auf jeden Fall sehr gut. Ich möchte da aber ein paar Punkte ansprechen und hoffe, dass ich Dich damit nicht verwirre. Es geht dabei vor allem um das Design:

a) Einen Konstruktor definieren, der gewisse Dinge macht. Hier könnte man z.B. Dinge machen wie eine Default Größe setzen oder eben auch die default close operation setzen.
b) Bei showFrame gehen mir ein paar Dinge durch den Kopf:
b1) von "show frame" würde ich erwarten, dass da nur das frame angezeigt würde. Aber da wird ja noch viel mehr gemacht: Größe gesetzt, Position gesetzt, default close operation gesetzt. Das passt also so in der Form nicht wirklich.
b2) Wenn Du Deine Klasse von JFrame ableitest, dann übernimmst Du ja alle Funktionen. Und da wird das Interface nun sehr verwirrend. Soll "showFrame" aufgerufen werden oder setVisible? Also wenn jemand Deine Klasse bekommt, dann wird er evtl. verwirrt sein bzw. wird die Klasse falsch verwenden. (Hier könnte man dann auch die Thematik Composition vs. Inheritance bezüglich JFrame bringen. Google bring dazu in Zusammenhang zu JFrame einige Treffer.)
c) Getter und Setter von der FrameSize: Wenn das Frame sichtbar ist, dann würde ich erwarten, dass das Setzen des Wertes auch direkt die Größe anpasst. Aber derzeit wird nur die Variable gesetzt.

Das wären so die Punkte, die mir so auf Anhieb durch den Kopf gehen.
 

Neue Themen


Zurück
Oben