# Fenster schließen verhindern



## TDO88 (17. Mai 2016)

Hallo,

ich erstelle mir mit jfreechart ein Balkendiagramm, welches sich öffnet, wenn ich auf einen button klicke.
Code des Balkendiagramms:

```
public class BarChart extends ApplicationFrame
{
   public BarChart( String applicationTitle , String chartTitle , AxisInformations[] AvValues)
   {
      super( applicationTitle );       
      JFreeChart barChart = ChartFactory.createBarChart(
         chartTitle,          
         "Identifier",           
         "Averages [µm]",           
         createDataset(AvValues),         
         PlotOrientation.VERTICAL,          
         true, true, false);
        
      ChartPanel chartPanel = new ChartPanel( barChart );       
      chartPanel.setPreferredSize(new java.awt.Dimension( 560 , 367 ) );       
      setContentPane( chartPanel );
   }
   private CategoryDataset createDataset( AxisInformations[] AveValues)
   {
      final String Pa = "Pa";              
      final String P = "P";             
      final String PSavg = "PS avg";             
      final String Uavg = "U avg"; 
      final String X = "X";
      final String Y = "Y";
      final DefaultCategoryDataset dataset =
      new DefaultCategoryDataset( ); 

      dataset.addValue(AveValues[0].Pa, X, Pa);
      dataset.addValue(AveValues[1].Pa, Y, Pa);
      dataset.addValue(AveValues[0].P, X, P);
      dataset.addValue(AveValues[1].P, Y, P);
      dataset.addValue(AveValues[0].PSavg, X, PSavg);
      dataset.addValue(AveValues[1].PSavg, Y, PSavg);
      dataset.addValue(AveValues[0].Uavg, X, Uavg);
      dataset.addValue(AveValues[1].Uavg, Y, Uavg);
     
      return dataset;
   }
}
```

Aufruf:

```
BarChart bchart = new BarChart("Average Values", "Bar Graph", AverageValues);
bchart.pack();
RefineryUtilities.centerFrameOnScreen(bchart);
bchart.setVisible(true);
```

Mein Problem dabei ist jetzt, dass wenn ich das Fenster mit dem Balkendiagramm über das "x" rechts oben schließe, wird mein Hauptprogramm ebenfalls mit geschlossen, was ich absolut nicht möchte.
Wie kann ich das verhindern?

Gruß
TDO


----------



## Cromewell (17. Mai 2016)

Vielleicht wäre da was bei ^^
http://stackoverflow.com/questions/573317/java-swing-close-window-without-exiting-app


----------



## TDO88 (17. Mai 2016)

Danke für den Link.
Mir ist bekannt, dass ich das Fenster mit bchart.setVisible(false) "beenden" kann. 
Die Frage ist nur, wo ich das machen muss?!
Wenn der Button für das Diagramm gedrückt wird, ist der Text oben, das einzige, was in der Methode passiert und wenn er das Diagramm anzeigt, springt er ja aus der Methode heraus. An welcher Stelle im Programm kann ich also das Schließen abfangen?
Oder gibt es dafür ein Event, welches abgefangen werden kann?


----------



## Thallius (17. Mai 2016)

Du solltest dann kein ApplicationFrame benutzen sondern nur ein einfaches JFrame.

http://stackoverflow.com/questions/...ing-window-closing-down-the-whole-application

Gruß

Claus


----------



## Cromewell (17. Mai 2016)

Ich kenn mich nicht so gut in Swing aus (progge in JavaFX).
Aber kannst du nicht
	
	
	
	





```
bchart.setDefaultCloseOperation(operator);
```
 oder so machen ?


----------



## TDO88 (17. Mai 2016)

@Cromewell:
Das funktioniert (warum auch immer) leider nicht.

@Thallius:
Danke für den Link. Funktioniert jetzt.
Das einzige, was ich geändert habe, war die Vererbung der Klasse in:

```
public class BarChart extends JFrame
```

Jetzt verhält sich das Fenster wie gewünscht!
Danke nochmal

Gruß
TDO


----------



## TDO88 (18. Mai 2016)

Hallo nochmal,

nochmal eine andere Frage dazu. 
Kann ich auf dem Fenster unter dem Diagramm noch was einfügen?
Die Namen an der Grafik sind mit Pa, P usw. relativ kryptisch und ich würde gerne unter dem Diagramm eine Art Legende einfügen, mit den Erklärungen zu den Abkürzungen.

Gruß
TDO


----------



## Thallius (18. Mai 2016)

Ja, du erzeugst einfach noch ein Panel und addest dann das Chart bei NORTH und das mit der LEgende bei SOUTH.

siehe auch:

https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html


----------



## TDO88 (18. Mai 2016)

Wie adde ich das denn auf auf mein Fenster? In dem Code oben steht ja nichts von JFrame o.Ä.?! Stehe da leider etwas auf dem Schlauch


----------



## Thallius (18. Mai 2016)

Grundlagen lernen...


----------



## TDO88 (18. Mai 2016)

Thallius hat gesagt.:


> Grundlagen lernen...


Hilft mir jetzt leider nicht weiter...


----------



## InfectedBytes (18. Mai 2016)

Thallius hat gesagt.:


> Grundlagen lernen...


Dem muss ich zustimmen...
Ansonsten ist google auch immer hilfreich.

Den Layout Manager setzt du einfach mit setLayout(...)


----------



## TDO88 (18. Mai 2016)

Ich habe bisher immer den Design Editor von Netbeans benutzt und mich noch nie um Platzierung von Elementen auf dem Frontpanel beschäftigt und bin auch noch ein Einsteiger in Java...
Man kann eben nicht alles gleichzeitig lernen...


----------



## TDO88 (18. Mai 2016)

Thallius hat gesagt.:


> Ja, du erzeugst einfach noch ein Panel und addest dann das Chart bei NORTH und das mit der LEgende bei SOUTH.
> 
> siehe auch:
> 
> https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html



Danke für den Link!
Damit habe ich es jetzt hinbekommen


----------

