Von Frame zu Frame "hangeln"

Hallo anderer Jens,

ich habe das von zerix nicht überlesen. Es kann auch gut sein das ich mich nur eine Stunde in das Dateihandling einlesen müsste. Aber mir fehlt drum rum auch noch so viel Know How das es für mich jetzt schneller geht, wenn ich in das Programm einfach unperformant 50 Frames einbaue. Wenn ich einmal weiß wie ich in der Main Class darauf warte, bis der Frame geschlossen ist, und dann den nächsten auf mache, bin ich quasi schon fertig.

Und, auch wenn man das meinem Java Code nicht ansieht. Ich bin Anwendungsentwickler :-). In Delphi würde ich es zum Beispiel ganz sicher auch mit XML oder CSV oder Textdateien machen. Von mir aus auch mit einer Datenbank, wenn es was größeres wird.

Es bleibt jetzt leider nämlich noch die Frage: Wie kann ich in der "class Sabine" darauf warten bis createandshowGUI() fertig ist (also das Frame mit einem dispose() geschloßen wurde) und erst dann die nächste classe createn. Geht das? zerix meinte schon das ich das ganze ja von JDialog ableiten müsste. Habe das jetzt mal so implementiert:

Code:
package sabine_project;
import javax.swing.*;
import java.util.*;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.*;

public class Question1 extends JPanel implements ActionListener, KeyListener
{
  // globale Variabeln
  JLabel lPressed   = new JLabel("Nothing");
  JFrame meinframe = new JFrame("Sabines Projekt");
  JDialog startframe = new JDialog(meinframe, true);
  long   waited     = 0;
  //JLabel typepicture, adpicture, adpicture2, typepicture2 = new JLabel();
   
  public int createAndShowGUI()
  {
    // Programm beenden, nachdem das Fenster geschloßen wurde.
    //startframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    startframe.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    startframe.setLocation(350,75);

    startframe.addKeyListener(this);
    startframe.setModal(true);

    // Panel anstatt kompliziertem ContentPane erstellen.
    JPanel anzeigePanel = new JPanel();
    anzeigePanel.addKeyListener(this);
    anzeigePanel.setLayout(new GridLayout(2, 3, 5, 5));
    
    JLabel typepicture = new JLabel();
    typepicture.setIcon(new ImageIcon("/home/jens/type_q.png"));
    typepicture.setAlignmentY(300);
    anzeigePanel.add(typepicture/*, BorderLayout.LINE_START*/);
    
    JLabel adpicture = new JLabel();
    adpicture.setIcon(new ImageIcon("/home/jens/testpic.png"));
    anzeigePanel.add(adpicture);
    
    JLabel typepicture2 = new JLabel();
    typepicture2.setIcon(new ImageIcon("/home/jens/type_a.png"));
    anzeigePanel.add(typepicture2);
    
    JLabel adpicture2 = new JLabel();
    adpicture2.setIcon(new ImageIcon("/home/jens/testpic.png"));
    anzeigePanel.add(adpicture2);
    
    lPressed.setText("Key");
    anzeigePanel.add(lPressed);

    // ContentPane des Frames zuletzt setzten.
    startframe.setContentPane(anzeigePanel);
    // Frame anzeigen.
    startframe.pack();
    startframe.setVisible(true);
    // Focus auf den Frame setzten.
    startframe.requestFocus();
    //anzeigePanel.requestFocus();
    
    // Zeit nach der anzeige holen...
    Date mytime = new Date();
    waited      = mytime.getTime();
    
    return 0;
  }

  public void keyTyped(KeyEvent e) 
  {
    String KeyChar = Character.toString(e.getKeyChar());
    lPressed.setText(KeyChar);
    if (KeyChar.equalsIgnoreCase("q"))
    {
      Date mytime2 = new Date();
      long gerechnet = ((mytime2.getTime() - waited));
      startframe.setVisible(false);
      startframe.dispose();
    }
  }
  
  public void keyPressed(KeyEvent e) 
  {
    //lPressed.setText(Integer.toString(e.getID()));
  }

  public void keyReleased(KeyEvent e) 
  {
    //lPressed.setText(Integer.toString(e.getID()));
  }

  public void actionPerformed(ActionEvent e) 
  {
    System.exit(0);  
  }
}

Die Klasse "Sabine" hab ich komplett so gelassen.

Kann mir jemand diese Frage noch beantworten?

Vielen dank im Voraus.

Jens
 
Hallo,

du machst in deiner Klasse kein JFrame sondern ein JDialog. Es würde auch mehr Sinn machen, wenn du die Klasse nicht von JPanel sondern direkt von JDialog ableidest. Den kannst du modal machen. Da kannst du dann direkt im Konstruktor den Parent angeben und ob der Dialog modal sein soll.

Code:
public Question{
super(null, true);
}
oder
Code:
JDialog dialog = new JDialog(null, true);

So müsste es funktionieren, was du möchtest.

MFG

zEriX
 
Zurück