# jButton auf von jFrame erzeugtem jDialog



## Durchstarter (17. Mrz 2015)

Also ich habe ein jFrame mit einem Button welches ein jDialog öffnet mit einem weitern Button allerdings habe ich ein Problem damit dem Button eigenschaften zuzuordnen wie z.B ein ActionListenter für Rechnungen oder was auch immer oder sogar die größe momenten ist der Button über das ganze Fenster hier ist der Code 

[Java]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class TestFrameOnFrame extends JFrame implements ActionListener{

  public TestFrameOnFrame(){   

    JButton button = new JButton("Show New Frame");
    button.addActionListener(this);
    this.add(button);                           this.pack();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    JDialog dialog = new JDialog(this);
    dialog.setSize(new Dimension(800, 600));
    dialog.setTitle("Search Dialog");
    dialog.add(new JButton ("Just a test"));
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);

  }

  public static void main(String[] args) {
    new TestFrameOnFrame();
  }

}[/code] ich kann einfach selbst keine lösung finden

Ich dachte an


```
button.setBounds(10,10,40,40);
```

allerdings hat das nicht so ganz funktioniert, wäre nett wenn jemand helfen könnte


----------



## VfL_Freak (17. Mrz 2015)

Moin,



Durchstarter hat gesagt.:


> allerdings hat das nicht so ganz funktioniert


WAS hat denn nicht funktioniert ??

http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

Gruß Klaus


----------



## Durchstarter (17. Mrz 2015)

Als ich es mit setBounds versuchte bekam ich diese Meldung


```
TestFrameOnFrame.java:30:5: error: cannot find symbol
    button.setBounds(10,10,40,40);
    ^
  symbol:   variable button
  location: class TestFrameOnFrame
1 error
```
 ich hab halt nur versucht wie es geht weiß ich ja nicht


----------



## VfL_Freak (17. Mrz 2015)

Moin,



Durchstarter hat gesagt.:


> Als ich es mit setBounds versuchte bekam ich diese Meldung
> 
> ```
> TestFrameOnFrame.java:30:5: error: cannot find symbol
> ...


wenn du dies wirklich in Zeile 30 des am Anfang geposteten Code versucht haben solltest, dann kann es auch nicht funktionieren, da 'button' doch gar nicht bekannt ist (genau das besagt nämlich die Meldung) !!
Mach das mal oben beim 'adden'  ....

Zudem: es ist hier immer angeraten den *aktuellen* Code zu posten, bei dem der Fehler auftritt und dann natürlich die Fehlermeldung selbst! Ansonsten wird sich da i. d. R. kaum einer drum kümmern, da keiner Lust hat herumzuraten WAS und WO.
Danke!

Gruß Klaus


----------



## Durchstarter (17. Mrz 2015)

Der JButton hat ja irgendwie jetzt keinen Namen :noe:


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
 
 
public class TestFrameOnFrame extends JFrame implements ActionListener{
  
  public TestFrameOnFrame(){   
    
    JButton button = new JButton("Show New Frame");
    button.addActionListener(this);
    this.add(button);                           this.pack();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    JDialog dialog = new JDialog(this);
    dialog.setSize(new Dimension(800, 600));
    dialog.setTitle("Search Dialog");
    dialog.add(new JButton ("Just a test"));
    JButton.setBounds(10,10,40,40);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);
    
  }
  
  public static void main(String[] args) {
    new TestFrameOnFrame();
  }
  
}
```

mit der Fehlermeldung 


```
TestFrameOnFrame.java:30:12: error: non-static method setBounds(int,int,int,int) cannot be referenced from a static context
    JButton.setBounds(10,10,40,40);
           ^
1 error
```

muss ich da eine anderen Befehl benutzen weil setBounds funktioniert anscheinend nicht...


----------



## Tom299 (17. Mrz 2015)

versuch mal dialog.getContentPane().add(new JButton ...)


----------



## VfL_Freak (17. Mrz 2015)

Moin,

oh, da geht ja einiges durcheinander ...



Durchstarter hat gesagt.:


> Der JButton hat ja irgendwie jetzt keinen Namen


Natürlich hat er einen Namen ... nur keine Schönen !!

```
JButton button = new JButton("Show New Frame")
```
Und in DEM Block musst Du dann auch die Eigenschaft setzen.
Warum willst Du das denn im ActionListener machen ??



Durchstarter hat gesagt.:


> ```
> JButton.setBounds(10,10,40,40);
> ```


Das kann ja auch nicht klappen!!
"JButton" ist die KLASSE und für die kannst Du nun mal keine Eigenschaften setzen !

Gruß Klaus


----------



## Durchstarter (17. Mrz 2015)

Ok ich habe hier mein Selbstgeschriebenen Quelltext


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class NAME extends JFrame {
  
  private JButton jButton1 = new JButton();
  private JLabel jLabel1 = new JLabel();
  
  public NAME (String title) {
    
    super(title);
    setSize(165,100);
    setLocationRelativeTo(null);
    setVisible(true);
    setResizable(true);
    Container cp = getContentPane();
    cp.setLayout(null);
    jLabel1.setBounds(54,30,130,20);
    jLabel1.setText("");
    cp.add(jLabel1);
    jButton1.setBounds(10,10,130,20) ;
    jButton1.setText("Klick mich!");
    cp.add(jButton1);
    jButton1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton1_ActionPerformed(evt);
      }
    });
    
  }
  public void jButton1_ActionPerformed(ActionEvent evt) {
    jLabel1.setText("DANKE!");
  }    
  
  public static void main(String[] args) {
    new NAME("Test");
  } 
  
}
```

Anstatt das der Buttonklick dem Label den Text DANKE! zuordnet würde ich gerne das ich mit dem Button ein anderes jFrame öffne welches ich nur zum probieren mit dem Java-Editor erstellt habe.

Der Quelltext des zu öffnenden sieht so aus:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 17.03.2015
  * @author 
  */

public class Versuch extends JFrame {
  // Anfang Attribute
  private JButton jButton1 = new JButton();
  private JLabel jLabel1 = new JLabel();
  // Ende Attribute
  
  public Versuch(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 300; 
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    jButton1.setBounds(16, 16, 75, 25);
    jButton1.setText("jButton1");
    jButton1.setMargin(new Insets(2, 2, 2, 2));
    jButton1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        jButton1_ActionPerformed(evt);
      }
    });
    cp.add(jButton1);
    jLabel1.setBounds(24, 56, 110, 20);
    jLabel1.setText("text");
    cp.add(jLabel1);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public Versuch
  
  // Anfang Methoden
  public void jButton1_ActionPerformed(ActionEvent evt) {
    jLabel1.setText("Erfolg");// TODO hier Quelltext einfügen
  } // end of jButton1_ActionPerformed

  // Ende Methoden
  
  public static void main(String[] args) {
    new Versuch("Versuch");
  } // end of main
  
} // end of class Versuch
```
  (Im Java-Editor erstellt um Zeit zu sparen da ich hier nur Versuche es zum funktionieren zu bringen aber ich keinen Ansatz finden kann)

Ich hatte zuvor schon geschafft ein neues Fenster zu öffnen mit


```
JDialog dialog = new JDialog(this);
    dialog.setSize(new Dimension(800, 600));
    dialog.setTitle("Search Dialog");
    dialog.add(new JButton ("Test"));
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);
```

Allerdings ist hier das Problem gewesen das ich dem erzeugten jButton auf dem Dialog keine größe mit setBounds zuordnen konnte (der einzige mir bekannte Befehlt dafür), den ActionListener für den Button konnte ich auf dem Dialog auch nicht erstellen und ich finde dafür auch keine Ansätze die ich mit meinem Wissen verstehen könnte.



Meine Frage ist nun ob ich mit dem Buttonklick aus dem 1. Quelltext das jFrame des 2. Quelltext aufrufen kann und wenn das nicht gehen sollte wie ich das mit dem jDialog hinbekomme.

Danke im vorraus! (mehrere Fragen könnten folgen   )


----------



## Joose (17. Mrz 2015)

@TO: Habe deinen neuen Thread (mit gleichem Thema) sowie diesen zusammengeführt.
Bitte beachte pro Thema nur einen Thread zu starten, danke!


----------



## Durchstarter (17. Mrz 2015)

Das ist ja jetzt der Button auf dem jFrame, nicht der auf dem Dialog


```
JButton button = new JButton("Show New Frame")
```

welchen Namen hat denn der Button auf dem Dialog ...?


```
dialog.add(new JButton ("Just a test"));
```
irgendwie hat dieser Button ja keinen Namen ....


----------



## Joose (17. Mrz 2015)

Durchstarter hat gesagt.:


> welchen Namen hat denn der Button auf dem Dialog ...?
> 
> 
> ```
> ...



Keinen. Du kannst dieses JButton Objekt nicht über einen Bezeichner ansprechen, da du es keiner lokalen Variable zuweist.
Du kannst aber zuerst lokal ein JButton Objekt erstellen und dieses dann dem JDiagog hinzufügen.


```
JButton b = new JButton("Test");
dialog.add(b);
```


----------



## Durchstarter (17. Mrz 2015)

Habe es zu


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
 
 
public class TestFrameOnFrame extends JFrame implements ActionListener{
  
  public TestFrameOnFrame(){   
    JButton b = new JButton("Test");
    b.setBounds(10,10,130,20) ;
    JButton button = new JButton("Show New Frame");
    button.addActionListener(this);
    this.add(button);                           this.pack();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    JDialog dialog = new JDialog(this);
    dialog.setSize(new Dimension(800, 600));
    dialog.setTitle("Search Dialog");
    dialog.add(b);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);
    
  }
  
  public static void main(String[] args) {
    new TestFrameOnFrame();
  }
  
}
```

geändert und jetzt sagt er mir schonwieder das was falsch ist 


```
TestFrameOnFrame.java:30:16: error: cannot find symbol
    dialog.add(b);
               ^
  symbol:   variable b
  location: class TestFrameOnFrame
1 error
```

aber ich habe den Button doch am anfang erstellt (habe das mit dem namen b mal einfach übernommen)....

liegt das an dem @override ?

EDIT:
habe mal einfach probiert und


```
dialog.add(JButton(b));
```
geht auch nicht


----------



## Flown (17. Mrz 2015)

Unterwasser atmen funktioniert auch nicht? Was soll ich den machen?

Was sind das für Fragen? Versuchst du auch mal was zu verstehen? Lest du auch die Beiträge die versuchen dir zu helfen?

Du hast ein Scope Problem. D.h. du definierst einen Button in einer anderen Methode (in deinem Fall im Konstruktor). Dies ist dann der Gültigkeitsbereich von deinem Button. Wenn du den Button über die ganze Klasse verwenden möchtest, dann erstell ihn als Feld (private JButton ...).

So ein funktionierendes Beispiel, wie man sowas implementiert:
- Man leitet nicht von JFrame ab (ich weiß nicht warum das so viele machen)
- In der Regel reichen anonyme ActionListener (Der Button weiß ja so und so wer er ist und was er machen soll)
- Man startet Swing-Applikationen über den EDT (SwingUtilities.invokeLater)
- Man arbeitet immer mit einem ligthweight-Container und fügt es dem Frame/Dialog hinzu (Also nicht den contentPanel verwenden)


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestFrameOnFrame {
  
  public TestFrameOnFrame() {
    JFrame frame = new JFrame();
    
    JPanel mainPanel = new JPanel();
    
    JButton button = new JButton("Show New Frame");
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        createDialog(frame);
      }
    });
    mainPanel.add(button);
    frame.add(mainPanel);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
  
  private void createDialog(JFrame frame) {
    JDialog dialog = new JDialog(frame);
    dialog.setSize(800, 600);
    dialog.setTitle("Search Dialog");
    
    JPanel mainPanel = new JPanel();
    JButton b = new JButton("Test");
    mainPanel.add(b);
    
    dialog.add(mainPanel);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);
  }
  
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        new TestFrameOnFrame();
      }
    });
  }
}
```


----------



## Durchstarter (18. Mrz 2015)

Ok danke Flown das Funktioniert jetzt so wie gewünscht, allerdings hab ich ja am mainPanel war es glaub ich die 2 Buttons, wobei jeweils einer ein neues Fenster öffnet. Wenn ich Fenster 1 öffne bleibt das andere Fenster da, und wenn ich es schließe dann schließen sich beide Fesnter. Wenn ich allerdings Fenster 2 öffne und das andere Fenster schließe bleibt Fenster 2 offen und schließt sich nicht mit was ich gerne auch für Fesnter 1 so hätte.
Desweiteren kann man komischerweise die größe oder position der Buttons nicht festlegen (Compilen lässt es sich mit setBounds aber es ändert nichts am Button)

Hier ist mal mein derzeitiger Code


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Fensterlernen {
  //Definierung               
  public Fensterlernen() {
    //Objekte
    JFrame frame = new JFrame();
    JFrame frame2 = new JFrame();
    JPanel mainPanel = new JPanel();
    
    JButton button2 = new JButton ("Fenster 1");
    JButton button = new JButton("Fenster 2");
    
    //ActionListener
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        createDialog(frame);
      }
    });
    button2.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        createDialog2(frame2);
      }
    });
    
    //Eigenschaften
    frame.setTitle("Fenster");
    mainPanel.add(button2);
    mainPanel.add(button);
    frame.add(mainPanel);
    frame.setVisible(true);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setResizable(false);
    
  }
  
  //Fenster 1
  private void createDialog(JFrame frame) {
    JDialog dialog = new JDialog(frame);
    dialog.setSize(200, 80);
    dialog.setTitle("Fenster 2");
    
    JPanel mainPanel = new JPanel();
    
    JButton exitbutton = new JButton("Exit");
    exitbutton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dialog.setVisible(false);
        
      }
    });
    mainPanel.add(exitbutton);
    
    dialog.add(mainPanel);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);
    
    
  }
  
  //Fenster 2
  private void createDialog2(JFrame frame2) {
    JDialog dialog = new JDialog(frame2);
    dialog.setSize(200, 80);
    dialog.setTitle("Fenster 1");
    
    JPanel mainPanel = new JPanel();
    
    JButton exitbutton = new JButton("Exit");
    exitbutton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dialog.setVisible(false);
      }
    });
    mainPanel.add(exitbutton);
    
    dialog.add(mainPanel);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);
  }
  // Ende
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        new Fensterlernen();
      }
    });
  }
}
```


----------



## Flown (18. Mrz 2015)

Kannst du die Frage bitte nochmal stellen? Benenne die Fenster bitte nach ihrem Titel und sag noch mal was du haben möchtest.


----------



## Durchstarter (18. Mrz 2015)

Also ich habe das Hauptfenster "frame"(Fenster) auf welchem das "mainPanel" liegt.
Desweiteren habe ich nochmal ein "frame" und "frame2".
Außerdem habe ich noch auf diesem "mainPanel" den "button" und "button2".

"button"(Auf dem "Fenster") öffnet "frame"(Fenster 2), wenn ich jetzt "Fenster" schließe, beendet sich auch "Fenster2".

"button2"(Auf dem "Fenster") öffnet "frame2"(Fenster 1), wenn ich hier jetzt das "Fenster" schließe bleibt "Fenster 1" weiterhin offen und schließt nicht mit was ich gerne auch für "Fenster 2" so hätte.

ein weiteres Problem sind die Buttons die mit deinem Code mitkommen (den ich übernommen hatte), ich kann weder größe noch Position festlegen. Es lässt sich mit setBounds compilen allerdings bewegt oder verändert sich nichts.

Derzeitiger Code:


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Fensterlernen {
  //Definierung               
  public Fensterlernen() {
    //Objekte
    JFrame frame = new JFrame();
    JFrame frame2 = new JFrame();
    JPanel mainPanel = new JPanel();
    
    JButton button2 = new JButton ("Fenster 1");
    JButton button = new JButton("Fenster 2");
    
    //ActionListener
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        createDialog(frame);
      }
    });
    button2.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        createDialog2(frame2);
      }
    });
    
    //Eigenschaften
    frame.setTitle("Fenster");
    mainPanel.add(button2);
    mainPanel.add(button);
    frame.add(mainPanel);
    frame.setVisible(true);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setResizable(false);
    
  }
  
  //Fenster 1
  private void createDialog(JFrame frame) {
    JDialog dialog = new JDialog(frame);
    dialog.setSize(200, 80);
    dialog.setTitle("Fenster 2");
    
    JPanel mainPanel = new JPanel();
    
    JButton exitbutton = new JButton("Exit");
    exitbutton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dialog.setVisible(false);
        
      }
    });
    mainPanel.add(exitbutton);
    
    dialog.add(mainPanel);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);
    
    
  }
  
  //Fenster 2
  private void createDialog2(JFrame frame2) {
    JDialog dialog = new JDialog(frame2);
    dialog.setSize(200, 80);
    dialog.setTitle("Fenster 1");
    
    JPanel mainPanel = new JPanel();
    
    JButton exitbutton = new JButton("Exit");
    exitbutton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dialog.setVisible(false);
      }
    });
    mainPanel.add(exitbutton);
    
    dialog.add(mainPanel);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setVisible(true);
  }
  // Ende
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        new Fensterlernen();
      }
    });
  }
}
```


----------



## Flown (18. Mrz 2015)

Also jetzt hab ich es verstanden. Zum Verständnis: Ein Dialog ist ein "Unterfenster", dass normalerweise einen parent hat. Das heißt, wenn sich der parent schließt soll auch der Dialog geschlossen werden. Der Dialog ist auch dazu gedacht modale Fenster zu gestalten.

Also musst du dich entscheiden, ob du jetzt ein eigenständiges Fenster (JFrame) oder eine zusammenhängendes Fenster (JDialog) haben möchtest.

Ich lege dir die API ans Herz und auch die Oracle Tutorials. Unbedingt nachlesen, was, wie, wo und wann.

Es ist nicht böse gemeint, aber du machst einfach und verstehst es nicht was du da tust. Ich lege dir auch nahe, dass du nochmal zu den Grundlagen zurückkehrst.

Verbesserungen an deinem Code:
- Vermeide sinnlose Kommentare (wie z.B. Objekte, ActionListener, ...). Man sieht im Code was passiert
- Aggregiere gleichen Code zu einer Methode
- Fenster schließt man mit <frame>.dispose()
- Normalerweise konfiguriert man ein Fenster am Anfang, dann fügt man den Content ein und zum Schluß wird alles angezeigt (mit <frame>.setVisible(true)). Falls du das nicht so machst, kann es sein das du manuell repaints aufrufen musst, wenn du den Componentbaum, während der Anzeige änderst
- Vermeide sinnlose Variablen (JFrame frame2)
- Vermeide Nummerierungen bei Komponenten (wie frame1, frame2, ... oder button1, button2, ...) -> sprechende Namen!

Wenn du absolute Positionen und Größen haben möchtest, musst du das null-Layout verwenden. Best practice ist aber mit LayoutManager zu arbeiten. Also würde ich dir vorschlagen, dass du dich an diese gewöhnst.

PS: wenn du in einem LayoutManager einen Button größer gestalten möchtest, dann musst du die preferredSize der Komponenten setzen (funktioniert nicht bei allen Layouts!).



Spoiler: Code





```
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Fensterlernen {
  
  public Fensterlernen() {
    JFrame frame = new JFrame("Fenster");
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setResizable(false);
    
    JPanel mainPanel = new JPanel();
    
    JButton openFirstDialogBtn = new JButton("Fenster 1");
    JButton openSecondDialogBtn = new JButton("Fenster 2");
    
    openFirstDialogBtn.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        createDialog("Fenster 1");
      }
    });
    openSecondDialogBtn.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        createDialog("Fenster 2");
      }
    });
    
    openSecondDialogBtn.setPreferredSize(new Dimension(200, 50));
    
    mainPanel.add(openFirstDialogBtn);
    mainPanel.add(openSecondDialogBtn);
    
    frame.add(mainPanel);
    
    frame.pack();
    frame.setVisible(true);
    
  }
  
  private void createDialog(String title) {
    JDialog dialog = new JDialog();
    dialog.setTitle(title);
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setSize(200, 80);
    
    JPanel mainPanel = new JPanel();
    
    JButton exitBtn = new JButton("Exit");
    exitBtn.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        dialog.dispose();
        
      }
    });
    mainPanel.add(exitBtn);
    
    dialog.add(mainPanel);
    dialog.setVisible(true);
    
  }
  
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        new Fensterlernen();
      }
    });
  }
}
```





```

```


----------

