JDialog vor Hauptfenster beim Start

Status
Nicht offen für weitere Antworten.

theuserbl

Bekanntes Mitglied
Hi!

Ich habe folgendes Problem.

Mein Programm sieht folgendrmaßen aus:

Java:
public class NeuAnfang extends JFrame implements ActionListener {
  private static JFrame rahmen;
  [...]
  private static JDialog NewProjDialog;
  private static boolean initialized;

  public void createMenu() {
    [...]
  }

  public void createToolBar() {
    [...]
  }

  public NeuAnfang() {
    super("Neues Glueck");
    if (initialized==false) {
      menueLeiste  = new JMenuBar();
      System.out.println("wurde aufgerufen");
      createMenu();
      createToolBar();
      initialized=true;
    } else {
      System.out.println("wurde schon initialisiert");
    }
  }

  public void actionPerformed(ActionEvent event) {
   [...]
    } else if ((event.getSource() == file_new) || (event.getSource() == T_New)) {
      NewProject();
   [...]
  }

  public static void NewProject() {
    NewProjDialog = new JDialog(rahmen, "neues Project");
    NewProjDialog.setSize(490,400);
    NewProjDialog.setResizable(false);
    NewProjDialog.setModal(true);
    [...]
    cancelBut = new JButton("Abbrechen");
    cancelBut.addActionListener(new NeuAnfang());
    [...]
  }

  public static void main(String[] args) {
    initialized=false;
    rahmen = new NeuAnfang();

    WindowListener l = new WindowAdapter()
    {
      public void windowClosing(WindowEvent we)
      {
        System.exit(0);
      }
    };

    rahmen.addWindowListener(l);
    rahmen.setSize(750,600);
    rahmen.setLocationRelativeTo(null);
    rahmen.setExtendedState(rahmen.MAXIMIZED_BOTH);
    rahmen.setVisible(true);
    NewProject();
  }
}

Mein Problem ist folgendes:
Indem der Aufruf "NewProject();" in main() steht, muß NewProject() static sein.
Durch das static von NewProject ergeben sich jedoch weitere Nachteile.
z.B. daß ich nicht
cancelBut.addActionListener(this);
schreiben kann, sondern
cancelBut.addActionListener(new NeuAnfang());
schreiben muß. Deshalb auch die Abfrage mit "initialized" in NeuAnfang(), da das Erzeugen des Dialogs mit jedem zusätzlichen ActionListener sonst immer langsamer wird.
Auch getClass().getResource() um Grafiken innerhalb einer jar-Datei zu laden ist bei static nicht möglich.

Lasse ich hingegen NewProject() in main() weg und schreibe es in NeuAnfang(), dann wird erst das Dialogfenster erzeugt und das Hauptfenster erscheint erst, wenn ich den Dialog geschlossen habe.
Damit direkt beim Start erst das Hauptfenster erscheint und hinterher der Dialog erscheint und über dem Hauptfenster liegt, sehe ich bisher nur die Möglichkeit NewProject() in main zu schreiben.
Doch dort gibt es das Problem mit static.

Weiß irgendjemand einen Ausweg?
 
Zuletzt bearbeitet:
Indem der Aufruf "NewProject();" in main() steht, muß NewProject() static sein.
Durch das static von NewProject ergeben sich jedoch weitere Nachteile.
z.B. daß ich nicht
cancelBut.addActionListener(this);
schreiben kann, sondern
cancelBut.addActionListener(new NeuAnfang());
schreiben muß. Deshalb auch die Abfrage mit "initialized" in NeuAnfang(), da das Erzeugen des Dialogs mit jedem zusätzlichen ActionListener sonst immer langsamer wird.
Auch getClass().getResource() um Grafiken innerhalb einer jar-Datei zu laden ist bei static nicht möglich.

Lasse ich hingegen NewProject() in main() weg und schreibe es in NeuAnfang(), dann wird erst das Dialogfenster erzeugt und das Hauptfenster erscheint erst, wenn ich den Dialog geschlossen habe.
Damit direkt beim Start erst das Hauptfenster erscheint und hinterher der Dialog erscheint und über dem Hauptfenster liegt, sehe ich bisher nur die Möglichkeit NewProject() in main zu schreiben.
Doch dort gibt es das Problem mit static.
autsch eh 🙄 ich würd auf schandro hören :cry:
 
Hmm.. danke daß ihr mir geantwortet habt, aber ein Hinweis auf die Lösung hätte mir etwas mehr gefallen.

Ja, ich hatte 1992 mit GW-Basic angefangen und bin später auf QBasic gewechselt und tu mich mit der Objektorientierung etwas schwer.
Ich kenne auch die Bücher über Objektorientierung. Mit der seltsamen Vererbung, wo von Oberklassen wie Tier, Auto und so gesprochen wird und speziellere Ableitungen davon wie Pferd, Porsche und so.

Bin nun jedoch froh, daß ich nach sehr langer Zeit, wo ich Java als Plattform schon seit den Anfängen mochte, mit der Sprache aber Probleme hatte, nun doch erste Erfolge zu verzeichnen habe, daß ich es schaffe erste Java-Programme zu schreiben. 🙂
Denke daher, daß Learning-by-Doing scheinbar besser ist, als immer wieder Java-Bücher zu lesen, wo immer wieder das Gleiche drinsteht nur jeweils anders erzählt.

Würde mich hier jedoch trotzdem mehr über eine Antwort freuen in der Art wie:
Soetwas löst man nicht so
[Java-Schnipsel]
sondern mehr so
[Java-Schnipsel]
und das hier nicht so
[Java-Schnipsel]
sondern eher so
[Java-Schnipsel]

Stattdessen bekommen ich einen Link zu Java-Büchern, wovon ich selber einige zu Hause habe:
Jetzt lerne ich Java
Java Programmieren von Anfang an
Java HTML Skripte und Anwendungen
Java Applikationen
Java2 das Taschenbuch

Das sind die, die ich zu Hase habe. Und dann gucke ich noch hin und wieder in die HTML-Versionen der Java-Insel und dem Buch von Guido Krüger.

Doch es scheint ja irgendwie alles nicht zu helfen.


Edit:
Vergaß, daß ich auch noch diese beiden Bücher habe (wen es interessieren sollte):
Programmieren in Java
Programmieren mit Swing

Trotzdem sind mir halt prozedurale Programmiersprachen wie PureBasic etwas geläufiger. Das nicht-objektorientierte ist mehr so wie ich denke.
Bisher ist es halt so, daß das Objektorientierte mir fremd ist wie eine Fremdsprache: Man versteht einiges und kann einiges sagen, aber irgendwie ist es angenehmer und erleichternder seine Muttersprache zu sprechen.

Aber ich hoffe ja noch immer, daß es sich irgendwann mal ändern wird. 🙂
 
Zuletzt bearbeitet:
Das Problem, weshalb du solche Antworten bekommen hast, ist eben, dass eine Frage dieser Art mindestens einmal pro Tag hier auftaucht. Und wenn man das länger beobachtet mag man nicht immer wieder die selbe Antwort geben. Lies in einem deiner Bücher das Kapitel über Objektorientierte Programmierung und den Abschnitt über das Schlüsselwort static durch, dann erledigt sich das schon.

Im übrigen bezweifel ich stark, dass das menschliche Gehirn "prozedural denkt". Zweifellos haben wir schon in der Steinzeit objektorientiert gedacht, indem wir alles, wie auch heute noch, in Entitäten, deren Klassen deren Eigenschaften und deren Fähigkeiten eingeteilt haben.
 
Am besten nicht nur die Artikel lesen, sondern auch die Beispiele dazu abtippen (nicht copy & paste). Wenn du sie ans laufen bekommen hast, kannst du damit anfangen sie leicht zu verändern oder zu erweitern. Nur so lernt man es.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben