Zweites Fenster öffnen

Guten Tag,
und zwar möchte ich gerne per ActionEvent ein neues Fenster öffnen.
Ich habe hierbei zwei *.java Dateien.
Von der einen möchte ich die andere Form öffnen.

Habe es bereits versucht:

  {
    public void actionPerformed(ActionEvent event) 
    {
      About test = new About();     
      test.setVisible(true)
    }```

Die zweite Java Datei heißt About.java.
Und die will ich öffnen.

Nur funktioniert das nicht, ich hoffe ihr könnt mir da helfen.

wird die action performed methode aufgefrufen? kann man mit z.B. einer Konsolenausgabe kontrollieren (die man nachdem man mit dem testen Fertig ist auch wieder entfernen kann)

Du meinst ob das ausgeführt, wenn ich auch zum Beispiel System.out.println("") reinschreibe?
Dann ja, also die actionPerformed funktioniert.

was passiert dann im Konstruktor von About? erbt das von JFrame?

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

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

public class About extends JFrame {
  // Anfang Attribute
  private TextArea textArea1 = new TextArea("", 1, 1, TextArea.SCROLLBARS_BOTH);
  private Button btn_close = new Button();
  private Label lb_1 = new Label();
  private Label lb_programmer = new Label();
  private Label lb_2 = new Label();
private Label lb_verson = new Label();
private Label lb_3 = new Label();
  private Label lb_date = new Label();
  // Ende Attribute
  
  public About(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 314; 
    int frameHeight = 379;
    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
    
    textArea1.setBounds(16, 112, 281, 193);
    textArea1.setText("blablabla.");
    cp.add(textArea1);
    btn_close.setBounds(104, 320, 99, 25);
    btn_close.setLabel("Schließen");
    btn_close.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        btn_close_ActionPerformed(evt);
      }
    });
    cp.add(btn_close);
    lb_1.setBounds(32, 24, 86, 20);
    lb_1.setText("Programmer:");
    lb_1.setFont(new Font("Tahoma", Font.BOLD, 12));
    cp.add(lb_1);
    lb_programmer.setBounds(128, 24, 120, 20);
    lb_programmer.setText("...");
    lb_programmer.setFont(new Font("Tahoma", Font.PLAIN, 12));
    cp.add(lb_programmer);
    lb_2.setBounds(62, 48, 54, 20);
    lb_2.setText("Version:");
    cp.add(lb_2);
    lb_verson.setBounds(128, 48, 40, 20);
    lb_verson.setText("1.0");
    cp.add(lb_verson);
    lb_3.setBounds(22, 72, 92, 20);
    lb_3.setText("Creation date:");
    cp.add(lb_3);
    lb_date.setBounds(128, 72, 43, 20);
    lb_date.setText("2.2014");
    cp.add(lb_date);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public About
  
  // Anfang Methoden
  public void btn_close_ActionPerformed(ActionEvent evt) {
    setVisible(false);
  } // end of btn_close_ActionPerformed
  
  public void open()
  {
    setVisible(true);
  }

  // Ende Methoden
  
  public static void main(String[] args) {
    new About("About");
  } // end of main
  
} // end of class About

Eine Anwendung sollte immer nur einen JFrame (Hauptfenster) haben.
Und: Warum man nicht von JFrame/JDialog erben sollte

Soll ich dann ein JDialog für About erstellen?

Und das mit dem erben, das macht mein Java Editor automatisch, also hat den einen gewissen Teil davon selbst erstellt.

Abgesehen davon, dass man nicht von JFrame erben sollte, klappt das nciht, weil du nciht den Konstruktor aufrufst denn du hier geschrieben hast, weil du new About(); hast und nicht new About(“title”);

Aber danke cresse jetzt funktioniert das!
Aber ihr meint das ich nicht für das About ein JFrame verwenden sollte sonder …?

Das du deine Klasse hast, in der ein JFrame ist, das du so zusammenbaust wie du das brauchst. Daher hat deine Klasse dann nicht alle methoden von JFrame öffentlich.

Für einen About-Dialog kann man [japi]JOptionPane[/japi] benutzen, oder ein [japi]JPanel[/japi] mit Inhalt füllen, welches man dann in eine Instanz eines [japi]JDialog[/japi]s hinzufügt.

@cresse :

Und wie müsste ich das zusammenbauen?

Eine Klasse schreiben, in der du einen JDialog instanziierst und nicht von ihm erbst.
Diese Klasse kann von JPanel erben oder aber auch nur ein JPanel instanziieren, auf welchem Du dann deine Inhalte platzierst.
Das Panel fügst du dann der JDialog-Instanz hinzu, welche du modal schaltest, legst die Standard-Schließen-Operation fest und machst den Dialog anschließen sichtbar.

Von deinem JFrame aus (Hauptfenster) kannst du üner deinen Menüeintrag für About dann eine Instanz der Klasse erzeugen.

Naja wie schon von L-ectron geschrieben, falls der unterschied nicht klar ist:
Du machst:

public class MeinFrame extends JFrame

public MeinFrame()
{
super("test");
this.add(...);//auch wenn du das this nciht schreibst wendest du jedes mal methoden der Superklasse an
//....
}

Wenn man nicht erbt macht man das so:

public class MeinFrame
{
JFrame frame= new JFrame("test");

public MeinFrame()
{
frame.add(...);
//...
frame.setVi...
}

Alles klar jetzt habe ich verstanden.
Ich werde es umändern, mein JavaEditor hat das aber von vorne herein generiert, als ich das JFrame auswählte.