frame schliessen

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hallo leute,

ich kann ein fenster im fenster öffnen, doch wie kann ich es wieder schliessen?
ein system.exit(0) funktioniert wunderbar.

Code:
  private class LoeschenListener implements ActionListener {
    
    public void actionPerformed(ActionEvent evt) {     
      String command = evt.getActionCommand();
      if (command.equals("Abbrechen")) {      
  

        System.exit(0);
      }
      else {
              System.out.println("Das Programm war hier!");

      }
    }
  }
ich hoffe das sind genügend angaben und ihr könnt mir weiterhelfen.

besten dank
juergen

[Edit by foobar: Codetags eingefügt]
 
Innerhalb des Actionlisterners:
Code:
myFrameName.setVisible(false);
 
System.exit(0) beendet die VW von Java also nicht immer zu gebrauchen...

mit setVisible(false) ist das frame nur unsichtbar aber seine resource sind nicht freigegeben..

mit dispose() kannst du alle resourcen auch wieder freigeben.... aber dann is das frame weg 😉
 
danke für den hinweis,

habe nun versucht das frame zu schliessen (ich will es nicht verstecken). leider gibt er mir aber einen fehlercode für dispose_on_close zurück und zwar: keine anweisung.
der frame den ich schliessen möchte heisst wie unten angegeben jahresfahrplanlöschen. warum funktioniert das so nicht?

Code:
  private class LoeschenListener implements ActionListener {
    
    public void actionPerformed(ActionEvent evt) {     
      String command = evt.getActionCommand();
      if (command.equals("Abbrechen")) {      
        
        JahresfahrplanLöschenFrame.DISPOSE_ON_CLOSE;
        
      }
      else {
        FahrplanperiodeFormat = Fahrplananfang + " " + Fahrplanende + " "  + Unternehmen;
        UpdateJF b = new UpdateJF(FahrplanperiodeFormat);

        System.out.println("Das Programm war hier!");

      }
    }
  }

danke
juergen[/code]
 
Code:
JahresfahrplanLöschenFrame.this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
funktioniert leider nicht,

Fehlermeldung lautet:
Ist keine einschließende Klasse: datentransfer.JahresfahrplanLöschen.JahresfahrplanLöschenFrame in Zeile 150 (150:36)
Keine einschließende Instanz von Typ datentransfer.JahresfahrplanLöschen.JahresfahrplanLöschenFrame ist im Bereich in Zeile 150 (150:36)

weißt du weiter,

danke im voraus
juergen
 
Code:
Ist keine einschließende Klasse: datentransfer.JahresfahrplanLöschen.JahresfahrplanLöschenFrame in Zeile 150 (150:36)
Ich dachte dein Listener wäre eine innere Klasse. Dann mußt du dem Listener eben eine Referenz auf den Frame übergeben oder du machst die Zuweisung, wie es normalerweise auch üblich ist, direkt im Konstruktor des JFrame.
Code:
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
ich bin eben ein anfänger und schnall das einfach nicht. ich gebe mal die abgespeckte version mit den wichtigen teilen der klasse rein. vielleicht kann mir dann jemand soweit helfen das sogar ich es kapiere.

Code:
import java.awt.event.ActionEvent;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.sql.*;

public class JahresfahrplanLöschen {

  public JahresfahrplanLöschen() {
    JahresfahrplanLöschenFrame frame = new JahresfahrplanLöschenFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
  }

  class JahresfahrplanLöschenFrame extends JFrame {
    public JahresfahrplanLöschenFrame() {      

      JButton loeschenButton = new JButton("Löschen");
      loeschenButton.doClick();
      loeschenButton.setBackground(Color.GRAY);
      loeschenButton.addActionListener(new LoeschenListener());

      JButton abbrechenButton = new JButton("Abbrechen");
      abbrechenButton.doClick();
      abbrechenButton.setBackground(Color.GRAY);
      abbrechenButton.addActionListener(new LoeschenListener());

    }
  }

  private class LoeschenListener implements ActionListener {
    
    public void actionPerformed(ActionEvent evt) {     
      String command = evt.getActionCommand();
      if (command.equals("Abbrechen")) {      
        
        
        //System.exit(0);
      }
      else {  

        System.out.println("Das Programm war hier!");

      }
    }
  }
}

danke
juergen
 
Code:
class JahresfahrplanLöschenFrame extends JFrame {
    public JahresfahrplanLöschenFrame() {     

// #############################
      this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
//#################################
      JButton loeschenButton = new JButton("Löschen");
      loeschenButton.doClick();
      loeschenButton.setBackground(Color.GRAY);
      loeschenButton.addActionListener(new LoeschenListener());

      JButton abbrechenButton = new JButton("Abbrechen");
      abbrechenButton.doClick();
      abbrechenButton.setBackground(Color.GRAY);
      abbrechenButton.addActionListener(new LoeschenListener());

    }
  }
Aber was versprichst du dir davon?
 
in diesem fall passiert ja gar nichts. was ich mir davon verspreche:
wenn ich etwa "abbrechen" klicke, sollte JahresfahrplanLöschenFrame schliessen. JahresfahrplanLöschenFrame ist ein frame auf einem mainframe. wenn ich JahresfahrplanLöschenFrame schliesse (also abbrechen drücke) ist das ziel, dass ich zurückkehre zum mainframe. sollte doch funktionieren oder unterliege ich einem irrtum.

danke, dass du dir soviel mühe mit mir machst aber ich habe schon selbst etwa 6 stunden mit dem problem verbracht bevor ich es ins forum stellte.

mfg
juergen
 
this.setVisibel( false) ist doch vollkommen ausreichend. Du könntest die Referenz auf den Frame auch noch auf null setzen, dann wird beim nächsten Lauf des GarbageColllectors der Speicher auch wieder frei gegeben.
 
Code:
import java.awt.event.ActionEvent;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.sql.*;

public class JahresfahrplanLöschen {

  public JahresfahrplanLöschen() {
    JahresfahrplanLöschenFrame frame = new JahresfahrplanLöschenFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
  }

  class JahresfahrplanLöschenFrame extends JFrame {
    public JahresfahrplanLöschenFrame() {     

      JButton loeschenButton = new JButton("Löschen");
      loeschenButton.doClick();
      loeschenButton.setBackground(Color.GRAY);
      loeschenButton.addActionListener(new LoeschenListener());

      JButton abbrechenButton = new JButton("Abbrechen");
      abbrechenButton.doClick();
      abbrechenButton.setBackground(Color.GRAY);
      abbrechenButton.addActionListener(new LoeschenListener(this));

    }
  }

  private class LoeschenListener implements ActionListener {
    private JahresfahrplanLöschenFrame parent;
     
    public LoeschenListener(JahresfahrplanLöschenFrame par)
    {
          parent=par;
    }
    public void actionPerformed(ActionEvent evt) {     
      String command = evt.getActionCommand();
      if (command.equals("Abbrechen")) {     
       
       parent.dispose();
       //par.setVisible(false); 
       //je nachdem was du willst
        //System.exit(0);
      }
      else { 

        System.out.println("Das Programm war hier!");

      }
    }
  }
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben