# Fenster einfrieren



## Guest (1. Aug 2008)

Hallo Folks,

ich habe ein Problem.

Ich habe hier ein JFrame, wo auch alles wunderbar Funktioniert.
Dieses JFrame hat auch ein Button, wo sich ein zweites Fenster öffnen soll.
Wenn ich den Button betätige soll sich das zweite Fenster öffnen und das erste Fenster einfrieren also setEnabled(false);
Wenn ich das zweite Fenster wieder schließe, soll das erste Fenster wieder Benutzbar sein.

Wie ist das zu realisieren.

Ich kann den Actionlistener nur so aufrufen, anders ist es mit der Programmsturktur nicht möglich.


```
PushButton historyBtn=toolBarVert.addPushButton("history", "this", "history", "history");
        historyBtn.setName("historybtn");
        historyBtn.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){        		
        		his.setEnvelope(mapClient.getGeoMap().getEnvelope());
        		his.setVisible(true);
       		        isActive=true;
           	}        	
        });
```

Kann mir jemand helfen??

Gruß


----------



## The_S (1. Aug 2008)

Verwende für dein zweites Fenster einen modalen JDialog mit deinem ersten Fenster als owner.


----------



## Guest (1. Aug 2008)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Verwende für dein zweites Fenster einen modalen JDialog mit deinem ersten Fenster als owner.



Hm dann muss ich mir mal ansehen was ein modales JDialog ist, oder hat jemand nen kleinen Quellcode Tipp oder ein Beispiel parat?


----------



## Niki (1. Aug 2008)

Genauso wie ein JFrame, nur leitest du von JDialog ab:


```
public class BlaDialog extends JDialog{

  public BlaDialog(JFrame parent){
    super("BlaDialog", parent, true);
    //gui initialisieren
    pack();
    setLocationRelativeTo(parent);
  }

}
```


----------



## Guest (1. Aug 2008)

Funktioniert, danke für eure mal wieder tolle und schnelle HIlfe


----------



## Guest (1. Aug 2008)

Es gibt doch ein kleines Problem,

ich bekomme das Fenster nicht angezeigt und das Fenster, woraus es aufgerufen wird, wird nicht gesperrt.


```
public class HistoryWindow extends JDialog implements ActionListener{
	

	
	/**
	 * Konstruktor setzt die Überschrift des Fensters
	 */
	public HistoryWindow(JFrame frame,Vector vec,String[] his) {
		super(frame,true);
		this.setLocationRelativeTo(frame);
		System.out.println("Bin im History Fenster");
		this.setTitle("History");
		this.setLayout(new BorderLayout());
		this.baueWindow();
		this.historykoord=his;
		
		
	   
		
	}
```

Ich habe ja die Debugausgabe Bin im History Fenster, diese wird auch ausgeben, also denke ich, dass das Fesnter da ist nur nicht Sichtbar. Wenn ich mache this.setVisible(true); bekomme ich eine NullPointerException.

Was habe ich falsch gemacht??

Gruß


----------



## Gast2 (1. Aug 2008)

```
setModal(true);
setVisible(true);
```


----------



## Guest (1. Aug 2008)

SirWayne hat gesagt.:
			
		

> ```
> setModal(true);
> setVisible(true);
> ```



Habe ich gemacht bekomme trotzdem eine NullPonterException.


----------



## Gast2 (1. Aug 2008)

poste mal fehlernachricht hab das mit der NPE vorher irgendwie übersehen^^


----------



## Guest (1. Aug 2008)

SirWayne hat gesagt.:
			
		

> poste mal fehlernachricht hab das mit der NPE vorher irgendwie übersehen^^




```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at javax.swing.JList$4.getSize(Unknown Source)
	at javax.swing.JList.getPreferredScrollableViewportSize(Unknown Source)
	at javax.swing.ViewportLayout.preferredLayoutSize(Unknown Source)
	at java.awt.Container.preferredSize(Unknown Source)
	at java.awt.Container.getPreferredSize(Unknown Source)
	at javax.swing.JComponent.getPreferredSize(Unknown Source)
	at javax.swing.ScrollPaneLayout.preferredLayoutSize(Unknown Source)
	at java.awt.Container.preferredSize(Unknown Source)
	at java.awt.Container.getPreferredSize(Unknown Source)
	at javax.swing.JComponent.getPreferredSize(Unknown Source)
	at java.awt.BorderLayout.layoutContainer(Unknown Source)
	at java.awt.Container.layout(Unknown Source)
	at java.awt.Container.doLayout(Unknown Source)
	at java.awt.Container.validateTree(Unknown Source)
	at java.awt.Container.validateTree(Unknown Source)
	at java.awt.Container.validateTree(Unknown Source)
	at java.awt.Container.validateTree(Unknown Source)
	at java.awt.Container.validate(Unknown Source)
	at java.awt.Dialog.conditionalShow(Unknown Source)
	at java.awt.Dialog.show(Unknown Source)
	at java.awt.Component.show(Unknown Source)
	at java.awt.Component.setVisible(Unknown Source)
	at de.prodv.geoclient.gui.map.HistoryWindow.<init>(HistoryWindow.java:65)
	at de.prodv.geoclient.gui.GeoClientApplication.history(GeoClientApplication.java:454)
	at de.prodv.geoclient.gui.GeoClientApplication$8.actionPerformed(GeoClientApplication.java:345)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Bin im History Fenster
```


----------



## Gast2 (1. Aug 2008)

sieht eher so aus als ob deine frame null ist überprüf das lieber mal


----------



## Guest (1. Aug 2008)

Die Frame funktioniert ja. Sobald ich den Button drücke, dann kommt die NullPointerException, aber nur, wenn setVisible(True) mache, sonst läuft das Programm weiter nur das Fenster ist nicht sichtbar


----------



## Gast2 (1. Aug 2008)

wo baust du setVisible true ein zeig nochmal dein neuen code...
und überprüf mal ob dein frame ne größe hat und ob es NULL ist... wie übergibst du dein frame dem dialog??


----------



## Guest (1. Aug 2008)

```
public class HistoryWindow extends JDialog implements ActionListener{
	
	private JButton zoomBtn = null;
	private JButton okBtn  = null;
	private JPanel panel = null;
	private JList historyList=null;;
	private JScrollPane jscroll = null;

	
	
	/**
	 * Konstruktor setzt die Überschrift des Fensters
	 */
	public HistoryWindow(MapClient client,JFrame frame,Vector vec,String[] his) {
		super(frame,true);
		this.setLocationRelativeTo(frame);
		System.out.println("Bin im History Fenster");
		
		this.setTitle("History");
		this.setLayout(new BorderLayout());
		this.baueWindow();
		this.m_client= client;
		this.setModal(true);
		setVisible(true);
		
		
	   
		
	}

	/**
	 * Diese Methode erstellt das Fenster
	 */
	private void baueWindow() {
		// TODO Auto-generated method stub
		
		this.setSize(400, 400);
		this.setResizable(true);
		panel = new JPanel();
		zoomBtn= new JButton("ZoomIn");
		zoomBtn.addActionListener(this);
		okBtn = new JButton("Ok");
		okBtn.addActionListener(this);
		this.historyList = new JList();		
		historyList.setBackground(Color.WHITE);
		historyList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		historyList.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		jscroll = new JScrollPane(historyList);
		jscroll.getVerticalScrollBar();
		panel.add(zoomBtn);//,BorderLayout.CENTER);
		panel.add(okBtn);//,BorderLayout.CENTER);
		this.add(jscroll,BorderLayout.WEST);
		this.add(panel,BorderLayout.EAST);
		this.historyList.setListData(this.historykoord);
	}
```

So rufe ich das Fenster auf







```
public class GeoClientApplication extends JFrame

public void irgendeineMehtode(){
        historyBtn.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){        		
        		history();
      	}        	
 });

public void history(){
    	HistoryWindow his=new HistoryWindow(mapClient,this,this.stackVector,this.history);
    	System.out.println("Fenster wurde aufgebaut");
    	
    }
```

Aber wieso bekomme ich den NPE?


----------



## Gast2 (1. Aug 2008)

im prinzip ist es ok was steht in zeile 65??

bau mal ein System.out.println(frame==null)

bei den attributen die ganzen =null kannst du weglassen...


----------



## Guest (1. Aug 2008)

Er öffnet das Fenster und ich bkeomme ein false


----------



## Gast2 (1. Aug 2008)

was steht in zeile 65?? schick einfach mein kleines lauffähiges programm wo der fehler auftritt
sonst funktioniert bei mir eigentlich alles


----------



## Guest (1. Aug 2008)

SirWayne hat gesagt.:
			
		

> was steht in zeile 65?? schick einfach mein kleines lauffähiges programm wo der fehler auftritt
> sonst funktioniert bei mir eigentlich alles


#
Kann ich nicht schicken, steht unter Datenschutz


----------



## Gast2 (1. Aug 2008)

in zeile 65 liegt dein fehler


----------

