Fenster via JButton schliessen

floggie

Mitglied
Hi,

Meine Frage muss scheinbar ziemlich komisch sein, da ich auch nach langem Suchen keine Antwort finden konnte.
Ich möchte einfach nur ein Fenster via Drücken eines JButtons schliessen. JButton ist einfach gemacht, einen ActionListener habe ich auch rangehangen. Weiss bloss nicht wie ich vom evt.getSource zum entsprechenden Fenster gelange. Das Problem ist also, drücke Knopf A und schliesse das Fenster zu dem Knopf A gehört.
Mein zweites Problem ist, dass nur maximal ein Fenster für eine Dateneingabe derselben Art öffenbar (gibt es dieses Wort?) sein soll. Sprich ich will "Enter Data" drücken wollen -> Fenster geht auf -> solange dieses Fenster auf ist, soll sich kein zweites durch Drücken des "Enter Data" Buttons öffnen können.
Irgendwie weiss ich nicht wie dass gehen soll.

Grüsse

floggie
 
Hi,

Also schließen kannst du Dein Fenster so:

Code:
public void actionPerformed(ActionEvent e) {
  this.dispose();
}

Wobei ich mal vorausetze, dass der Button auf den Du klicken willst, sich in dem zu schließenden Fenster befindet.

Für Dein zweites Problem bietet sich doch ein JDialog an. Den machst du modal und dann lässt sich kein anderes Fenster öffnen bzw. aktivieren, solange dein Dialog offen ist.

Ich hoffe das hilft...
 
Zu deinem ersten Problem:
Schreib ne Methode "closeWindow",
schreibe in dieses rein: window.dispose();
und dann in deinem ActionListener rufst du diese auf ;)
Müsste eigentlich funktionieren! Viel Spaß!

EDIT: Da war wohl jmd schneller...
 
Ich hätte es so verstanden, das er beim ersten Problem meint, das es nicht unbedingt this sein muss oder?
Wenn ich das richtig gelesen hab ginge das hier:

Code:
  public void actionPerformed( ActionEvent actionEvent ) 
  {
	if ( actionEvent.getSource() instanceof JButton /* && zusätzliche Bedingung falls du hast */ )
	{
	  JButton source = ( JButton ) actionEvent.getSource();
	  JFrame frame = ( JFrame ) source.getParent().getParent().getParent().getParent();
	  frame.setVisible( false );
	}
  }

Weil die Struktur so ist:
Code:
JFrame
|--- JRootPane
	 |--- JLayeredPane
		  |--- JPanel
			   |--- JButton

Voraussgesetzt du hast ein JFrame und benutzt
Code:
frame.getContentPane().add(button);

MfG

Tobias
 
@javaprogger,

Genau das ist der Punkt:

javaprogger1987 hat gesagt.:
Voraussgesetzt du hast ein JFrame und benutzt
Code:
frame.getContentPane().add(button);

Beim Hochhangeln über getParent() sollte dann besser jedesmal eine instanceof-Abfrage gemacht werden, bis man beim JFrame ist, denn die von dir vorgestellte Struktur ist ja nicht verbindlich und kann sich beim Redesign der GUI oder aus anderen Anlässen schnell mal ändern.

Warum überhaupt der Umweg über getSource() und nicht this.dispose() ?
 
Hi,

erstmal vielen Dank, ging echt flott :). Die Idee mit this.dispose hatte ich auch schon. Geht aber nicht weil "The method dispose() is undefined for the type AnpassungsWindow". Das zu schliessende Fenster ist nämlich nicht das "UrFenster" sondern wird erst auf Knopfdruck zusammengebaut. Die getParent Idee läuft auch nicht, zumindest konnte ich es nicht umsetzen. Ich habe ein JFrame genutzt und dann mit getContentPane die Sachen "geaddet". Nun habe ich einfach das entsprechende JFrame mit MeinJFrame.dispose() geschlossen was mir irgendwie nicht gefällt aber was soll ich machen.

Grüsse

floggie
 
Hi,

dispose() gefällt mir. Nur, dass ich explizit vorher das entsprechende JFrame angebe nicht. Was ist denn wenn ich mit ein und derselben Methode mehrere Fenster öffne, wie soll ich die denn alle beim Schliessen ermitteln. Es könnte natürlich auch sein, dass ich einfach was übersehe und "grossen Unfug" erzähle...(das will ich zumindest nicht ausschliessen)

Grüsse
 
Hi,

was ich nur nicht verstehe, ist, warum dein Frame kein dispose mag:
floggie hat gesagt.:
"The method dispose() is undefined for the type AnpassungsWindow".

Handelt es sich bei deinem "AnpassungsWindow" nicht um ein JFrame bzw. JDialog?
 
Noch mal eine Version die eigentlich so gehen sollte:

Code:
  public void actionPerformed( ActionEvent actionEvent )
   {
 	if ( actionEvent.getSource() instanceof JButton /* && zusätzliche Bedingung falls du hast*/)
 	{
 	  JButton source = ( JButton ) actionEvent.getSource();
 	  JComponent parent = source.getParent();
 	  while( !( parent instanceof JFrame ) )
 	  {
 		parent = parent.getParent();
 	  }
 	  JFrame frame = ( JFrame ) parent;
 	  frame.setVisible( false );
	 //oder auch frame.dispose();
 	}
   }

Oder versteh ich das immer noch falsch? Du willst doch das Fenster schließen, wo der Button drin ist, du "kennst" das Fenster aber nicht, da mehrere erzeugt werden und die Variablen dabei "verloren" gehen?

Tobias
 
Zurück