JFram Location aus Konstruktor einer anderen Klasse auslesen

JSCHLAG

Mitglied
Ich habe eine GUI Klasse, in der ein Konstruktor(JFrame-Building) und die Methode getLocx() vorzufinden ist, und eine Items Klasse. Ich möchte die Location des Jframe aus dem Konstruktor der Gui Klasse(PGUI()) in der Items Klasse auslesen.

Erstelle ich jedoch ein PGUI-Objekt in der Items Klasse, um meine Methode getLocx() aufzurufen schmiert das Programm ab und zeigt statt ein Fenster gar kein Fenster an. Außerdem kackt mein Rechner danach immer ab:(.

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PGUI{
        PWorld panelbk = new PWorld();
        JPanel panelframe = new JPanel();
        private int xPos=-1;
        private int yPos=-1;
        public int xxx=123;
       
        public PGUI(){   
            //frame#1
            JFrame frame1 = new JFrame("Pou-Windows-10-Edition-Free");
            frame1.setSize(900,830);
            frame1.setUndecorated(true);
            xxx=frame1.getLocation().x;
           
           
           
            Items itm1=new Items(50,50,50,50,"C:/Users/i3/Desktop/pback.jpg");
           
           
           
            //btn1
            PreBtn btn1=new PreBtn("Drück Mich!",848, 600, 102, 23,Color.BLACK,new Color(0,255,255));
            btn1.setLocation(788, 766);
            //panelbk
            panelbk.add(btn1);
            panelbk.add(itm1);
            panelbk.setLayout(null);
           
           
           
            //minimalizeframe
            PreBtn minimizeframe=new PreBtn("Minimize",830, 0,85, 30,Color.BLACK,Color.WHITE);
            minimizeframe.setLocation(770, 0);
            minimizeframe.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    frame1.setState(Frame.ICONIFIED);
                }
            });
            minimizeframe.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseExited(MouseEvent e) {
                    minimizeframe.setBackground(Color.BLACK);
                    minimizeframe.setForeground(Color.WHITE);
                }
                @Override
                public void mouseEntered(MouseEvent e) {
                    minimizeframe.setBackground(Color.WHITE);
                    minimizeframe.setForeground(Color.BLACK);
                }
            });
           
            //closeframe
            PreBtn closeframe=new PreBtn("X",914, 0,46, 30,Color.BLACK,Color.WHITE);
            closeframe.setLocation(854, 0);
            closeframe.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            });
            closeframe.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseExited(MouseEvent e) {
                    closeframe.setBackground(Color.BLACK);
                    closeframe.setForeground(Color.WHITE);
                }
                @Override
                public void mouseEntered(MouseEvent e) {
                    closeframe.setBackground(Color.WHITE);
                    closeframe.setForeground(Color.BLACK);
                }
            });
          
            //labelframe
            JLabel labelframe=new JLabel("Pou-Windows-10-Edition-Free");
            labelframe.setBounds(10, 0, 291, 30);
            labelframe.setForeground(Color.WHITE);
           
            //panelframe
            panelframe.setBackground(Color.black);
            panelframe.setBounds(0,0,900,30);
            panelframe.setLayout(null);
            panelframe.add(minimizeframe);
            panelframe.add(closeframe);
            panelframe.add(labelframe);
            panelframe.addMouseMotionListener(new MouseMotionListener(){
                public void mouseDragged(MouseEvent e){
                    if(xPos==-1 || yPos==-1){
                        xPos = e.getX();//Button bei click
                        yPos = e.getY();//Button bei click
                    }
                    PointerInfo pointerInfo = MouseInfo.getPointerInfo();
                    Point point = pointerInfo.getLocation();
                    int x = (int)point.getX();//Display
                    int y = (int)point.getY();//Display
                    frame1.setLocation(x-xPos, y-yPos);
                }
                public void mouseMoved(MouseEvent e){
                    xPos = -1;
                    yPos = -1;
                    xxx=frame1.getLocation().x;
                }
            });
           
           
            //frame#2
            frame1.getContentPane().add(panelframe,BorderLayout.CENTER);
            frame1.getContentPane().add(panelbk,BorderLayout.CENTER);
            frame1.setLocationRelativeTo(null);
            frame1.setVisible(true);}
       
        public static void main(String[] args) {
            new PGUI();}
       
        public int getLocx(){
            return xxx;
        }

}

Java:
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;

public class Items extends JButton {
        private static final long serialVersionUID = 1L;
        private int xPos=-1;
        private int yPos=-1;
       
        public Items(int xx,int yy,int w,int h, String url){
            try{
                BufferedImage buttonIcon = ImageIO.read(new File(url));
                setIcon(new ImageIcon(buttonIcon));
            }
            catch(IOException e){System.out.println(e.getMessage());}
            setBounds(xx,yy,w,h);
            //setBorder(BorderFactory.createEmptyBorder());
            //setContentAreaFilled(false);
            addMouseMotionListener(new MouseMotionListener(){
                public void mouseDragged(MouseEvent e){
                    if(xPos==-1 || yPos==-1){
                        xPos = e.getX();//Button bei click
                        yPos = e.getY();//Button bei click
                    }
                    PointerInfo pointerInfo = MouseInfo.getPointerInfo();
                    Point point = pointerInfo.getLocation();
                    int x = (int)point.getX();//Display bei Bewegung
                    int y = (int)point.getY();//Display bei Bewegung
                    //int xxx=pg.getLocx();
                    setLocation(x-xPos/*-xxx*/, y-yPos);
                }
                public void mouseMoved(MouseEvent e){
                    xPos = -1;//Wenn man über einem Button
                    yPos = -1;//Wenn man über einem Button
                }
            });
        }
}
 

Robat

Top Contributor
Übergib deinem Item Objekt doch einfach eine Instanz deiner PGUI Klasse. Dann kannst du über dieses Objekt die Methode aufrufen.
 

Robat

Top Contributor
Als kleines Beispiel :
Java:
public class PGUI {
    public PGUI() {
        Item item = new Item(5, this) ;
    } 
    public void doSomething() {...} 
}

Java:
public class Item {
    private PGUI pguiObj;
    private int x;
    public Item(int x, PGUI pguiObj) {
        this.x = x;
        this.pguiObj = pguiObj;

        pguiObj.doSomething();
    } 
}
 

JSCHLAG

Mitglied
@Robat Ich weiß nicht ob du mich vllt falsch verstanden hast(soll bitte nicht böse rüberkommen, immerhin bin ich auf eure Hilfe angewiesen), denn ich habe in meinem Items Konstruktor schon meine Attribute festgelegt. Die Location des JFrames in der PGUI möchte ich durch eine Methode der PGUI(getter-Methode) in der Items-Klasse aufrufen und die x- und y-Werte abfangen. Der PGUI-Konstruktor ist ja das Frame-Initializing. Die Items-Klassee erbt ja von den JButtons und soll nur als Vereinfacherung des Codes Werte als Attribute bekommen.

Demnach möchte ich nur die x- und y-Werte aus der PGUI-Methode(getter-Methode) in der Items-Klass abfragen und abfangen. Mehr nicht:). Könntest du mir da jemand vllt weiterhelfen?
 

truesoul

Top Contributor
Schon wieder ein Paradebeispiel dafür nicht die Grundlagen zu kennen aber mit einer GUI zu beginnen. Und dann sollen andere den Code für einen schreiben.
 

JSCHLAG

Mitglied
@truesoul stimmt leider, aber daran bin ich nicht schuld sonder unsere Lehrerin hahahah. Wir haben Sortierverfahren und kurz Vererbungen gelernt mehr nicht und danach dieses Projekt angefangen. Außerdem will ich nicht unbedingt den ganzen Code, sondern nur Hilfe oder einen Weg.
 

truesoul

Top Contributor
@truesoul stimmt leider, aber daran bin ich nicht schuld sonder unsere Lehrerin hahahah. Wir haben Sortierverfahren und kurz Vererbungen gelernt mehr nicht und danach dieses Projekt angefangen. Außerdem will ich nicht unbedingt den ganzen Code, sondern nur Hilfe oder einen Weg.

Sorry, aber das ist einfach nur eine Ausrede. Wenn ich eine Sprache lernen will muss ich auch Eigeninitiative zeigen und kann es nicht auf andere schieben.

Na der @Robat hat dir doch ein Weg gezeigt.
Ohne Grundlagenkenntnisse kann dir nur mit fertigen Code geholfen werden.

Grüße
 

Robat

Top Contributor
Ich sehe ehrlich gesagt das Problem noch nicht.
Ich hab dir doch oben gezeigt wie du in einer anderen Klasse auf die Werte zugreifen kannst.

Hier noch mal ein ausführliches Beispiel.. ich werde dir aber nicht deinen Code so anpassen dass es funktioniert.

Angenommen es gibt eine Klasse Foo, die 2 int-Werte (x,y) als Attribute besitzt und einen Getter für jeweils diese Attribute.
Java:
public class Foo {
    private int x;
    private int y;

    public Foo() {
        this.x = 5;
        this.y = 10;
    }
  
    public int getX() { return x; }
    public int getY() { return y; }
}
Außerdem gibt es eine Klasse Bar, in der ich die 2 Werte aus der Klasse Foo ausgeben möchte.
Java:
public class Bar {
    public Bar() {
         System.out.println("X-Koordinate: " + x); // würde einen Fehler liefern, weil er x nicht kennt
         System.out.println("Y-Koordinate: " + y); // würde einen Fehler liefern, weil er y nicht kennt
    }
}
Wir wollen aus der Foo-Klasse die x und y Koordinaten haben. Dazu gibt es Getter-Methoden die wir aufrufen können.
Um diese aufrufen zu können, müssen wir ein Objekt von der Foo-Klasse in die Bar-Klasse bekommen.

Dazu erweitern wir den Konstruktor von Bar um einen weitern Parameter vom Typ Foo.
Anstatt jetzt x und y mittels System.out.println() ausgeben zu wollen, rufen wir die getX() und getY()
Methoden vom foo Objekt auf und lassen diese ausgeben.
Java:
public class Bar {
    public Bar(Foo foo) {
         System.out.println("X-Koordinate: " + foo.getX());
         System.out.println("Y-Koordinate: " + foo.getY());
    }
}
Abschließend müssen wir jetzt noch im Konstruktor der Foo-Klasse ein Bar-Objekt erstellen, und dem Konstruktor das aktuelle Objekt übergeben - das machen wir mittels dem Schlüsselwort this.
Java:
public class Foo {
    private int x;
    private int y;

    public Foo() {
        this.x = 5;
        this.y = 10;

        Bar bar = new Bar(this);
    } 
 
    public int getX() { return x; }
    public int getY() { return y; }
}

Das ganze musst du jetzt nur noch auf dein Projekt übertragen. Bei konkreten Fragen steh ich gern zur Verfügung - alles andere gehört in die "Hausaufgaben" oder "private Stellenangebote" Sektion.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Dynamisch Komponenten in einem JPanel bzw JFram austauschen AWT, Swing, JavaFX & SWT 7
A Abfrage nach Sichtbarkeit vom JFram AWT, Swing, JavaFX & SWT 3
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
M JavaFX java.lang.IllegalStateException: Location is not set. AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
D Swing JCombobox - Tooltip Location ändern AWT, Swing, JavaFX & SWT 4
Daniel_L Drop von Dateien auf Frame - welche Drop-Location? AWT, Swing, JavaFX & SWT 2
P [JTree] Markierhilfe der Drop-Location selber gestalten. AWT, Swing, JavaFX & SWT 4
S Swing Location und Height/Width nicht kompatibel? AWT, Swing, JavaFX & SWT 8
G 2. JFrame Location setzen AWT, Swing, JavaFX & SWT 6
MasterEvil Drag n Drop -Transferhandler . get Drop Location ? AWT, Swing, JavaFX & SWT 2
megachucky JInternalFrame Größe und Location nicht einstellbar AWT, Swing, JavaFX & SWT 8
F Konstruktor für "Vier Gewinnt" AWT, Swing, JavaFX & SWT 10
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
S Swing Konstruktor wird nicht rechtzeitig fertig? AWT, Swing, JavaFX & SWT 4
A JTable in Konstruktor? AWT, Swing, JavaFX & SWT 2
K Swing Gegner Konstruktor Problem AWT, Swing, JavaFX & SWT 2
MiMa Grafikfenster mit Konstruktor AWT, Swing, JavaFX & SWT 5
M Swing JButton-Konstruktor Icon-Parameter (Verständnisfrage) AWT, Swing, JavaFX & SWT 7
S Konstruktor kürzen AWT, Swing, JavaFX & SWT 4
S SWT Konstruktor anonyme Klasse AWT, Swing, JavaFX & SWT 10
C Kann Konstruktor von eigenem TableModel nicht nutzen AWT, Swing, JavaFX & SWT 2
J Konstruktor soll was zurueckgeben AWT, Swing, JavaFX & SWT 3
K falscher konstruktor? AWT, Swing, JavaFX & SWT 2
D Konstruktor von TableLayout AWT, Swing, JavaFX & SWT 8
F Fenster über Konstruktor neu laden? AWT, Swing, JavaFX & SWT 11
M JComboBox Konstruktor mit Objektfeld AWT, Swing, JavaFX & SWT 2
J JDialog und dessen Konstruktor JDialog(JFrame owner) AWT, Swing, JavaFX & SWT 2
G JTable mit Vektor-Konstruktor erzeugen?! AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben