# JDialog anpassen unmöglich / JFrame modal machen?



## Luma (26. Mrz 2005)

Hio ich bin gerade auf ein kleines Problem gestoßen. Entweder find ich die entsprechenden Methoden nicht, oder es ist einfach unmöglich den JDialog anzupassen. Ich will nämlich den JDialog so konfigurieren, dass er z.B. nur schließbar ist oder dass man ihn nur vergrößern/verkleinern kann, ihn aber nicht schließen...

Gibt's das irgendwas von Java-Pharm?

Cu
luma


----------



## L-ectron-X (26. Mrz 2005)

Um das Verändern der Größe zu unterbinden schreibst Du in den Konstruktor Deines Dialogs:

```
this.setResizable(false);
```
Den Rest konnte ich nicht so ganz nachvollziehen. Kannst Du Deine Frage noch mal anders formulieren?


----------



## Guest (26. Mrz 2005)

```
public class Dlg extends JDialog {
  /** Gibt an, ob das Dialogfenster ohne Bedingungen geschlossen werden soll */
  private boolean forceClose=false;

  public Dlg(Dialog owner, String title, boolean modal)	{
    super(owner,title,modal);
    initDialog();
  }

  public Dlg(Frame owner, String title, boolean modal) {
    super(owner,title,modal);
    initDialog();
  }

  protected void initDialog() {
    this.setResizable(true);

    setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    this.addWindowListener(
      new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          if(forceClose || canClose()) {
            windowClosing();
            setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
          }
        }
      }
    );
  }

  public boolean canClose() {
    // Hier sagst Du, ob es OK ist oder nicht
    // z.B. abhängig davon, ob sich Daten geändert haben oder nicht; Dialog mit Frage etc.
    return false;
  }

  protected void windowClosing() {
    // Hier kannst Du noch was machen, bevor das Dialogfenster geschlossen wird
  }

  public void closeDialog() {
    // Mit dieser Methode wird das Dialogfenster ohne Bedingungen geschlossen
    // Es bleibt dem Programmierer überlassen vorher canClose() aufzurufen
    this.forceClose = true;
    dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
  }

}
```


----------



## Gast (26. Mrz 2005)

No. Erstellt doch mal einen JDialog. Denn hat das Fenster oben Rechts einen roten Button, zum schließen. Ich will allerdings, das der Dialog nicht nur schließbar, sondern auch Maximier/Minimierbar ist...


----------



## L-ectron-X (26. Mrz 2005)

Dann nimm einen JFrame.


----------



## Luma (26. Mrz 2005)

Brauch aber einen JDialog. Ich brauch dem seine Modal-Eigentschaft...


----------



## Luma (9. Apr 2005)

Rahr kann mir den keiner helfen??


----------



## Illuvatar (9. Apr 2005)

Selber machen, mehr fllt mir net ein. JDialog, setUndecorated und selber ne Titelleiste malen.


----------



## Illuvatar (10. Apr 2005)

Mir fällt doch noch was ein: Du könntest die modal-Funktion im JFrame implementieren:

```
package de.illu.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
 * Ein JFrame, der die Fähigkeit hat, modal zu sein.
 * @see JDialog#setModal (boolean)
 * @see JFrame
 */
public class ModalJFrame extends JFrame 
{
	public ModalJFrame ()
	{
		this (true);
	}
	public ModalJFrame (boolean modal)
	{
		super();
		modalize(modal);
	}
	public ModalJFrame (boolean modal, String title)
	{
		super (title);
		modalize(modal);
	}
	public ModalJFrame (boolean modal, GraphicsConfiguration gc)
	{
		super(gc);
		modalize(modal);
	}
	public ModalJFrame (boolean modal, String title, GraphicsConfiguration gc)
	{
		super(title, gc);
		modalize(modal);
	}
	private void modalize(boolean modal)
	{
		if (!modal){
			return;
		}
		final Object MODALLOCK = new Object();
		addWindowListener (new WindowAdapter(){
			public void windowClosed (WindowEvent e)
			{
				synchronized (MODALLOCK){
					MODALLOCK.notifyAll();
				}
			}
		});
		synchronized (MODALLOCK){
			try {
		    	MODALLOCK.wait();
		    }catch (InterruptedException ex) {
		    	Thread.currentThread().interrupt();
		    }
		}
	}
}
```

Das müsste tun.

PS: Das ist natürlich nicht exakt die Funktion von setModal, da müsste man noch weiß gott was implementieren dass es immer im Vordergrund von der Apllikation ist und dass es blinkt wenn man woanders hinklickt und so weiter, aber vielleicht bringts dir trotzdem was


----------



## L-ectron-X (10. Apr 2005)

Ich finde diesen Thread recht interessant, daher habe ich den Titel mal etwas angepasst, damit man das Thema auch mal wiederfinden kann.


----------



## Luma (12. Apr 2005)

Ja aber das ist auch nicht die Lösung. Besser wärs, wenn man einen JDialog Maxmieren bzw. Minimieren könnte. Das muss doch irgendwie gehen, so eine Kombination aus JFrame und JDialog...


----------

