# Trotz setModal, der JDialog ist nicht modal ?



## PELLE (13. Jun 2007)

1.Klasse: Hier wird


```
MyDialog mywindow = new MyDialog(Fenster);
```

in der actionPerformed Methode weiter unten im code aufgerufen!



```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.WindowConstants;
import javax.swing.filechooser.FileFilter;
import javax.swing.ButtonGroup.*;
import java.io.*;
import java.text.*;
import java.util.Date;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import javax.swing.border.Border;
import javax.swing.filechooser.*;
import java.util.*;
import java.util.StringTokenizer;
import java.util.Arrays;
public class MainWindow extends JFrame
{

   public MainWindow(){

     super("Kaufmannsrechnung 2008");
     UIManager.put("swing.boldMetal", Boolean.FALSE);
     JTabbedPane jtp = new JTabbedPane();
     RechnungPanel RP = new RechnungPanel();
     jtp.addTab("<html><font size=5>Rechnungen schreiben</font size></html>", RP);
     add(jtp);
   }

   class RechnungPanel extends JPanel implements ActionListener
   {
      JLabel informationLB      = new JLabel("<html>[b]Produkt information:[/b]</html>");
      JButton buttonRechnung = new JButton("<html>Rechnung schreiben
</html>");
   

    public RechnungPanel()
      {
         setLayout(null);         
         add(buttonRechnung);
         buttonRechnung.setBounds(845,0,144,64);

       
         
         buttonRechnung.addActionListener(this);

         

      }  //................................. KONSTRUKTOR ENDE ............................................ //
     

      

      public void actionPerformed(ActionEvent e)
      {
    	  if(e.getSource().equals(buttonRechnung))
          {
    		   MyDialog mywindow = new MyDialog(Fenster);
          }
    	  
    	  
      }
   }

   public static void main(String args[])
   {
      MainWindow Fenster = new MainWindow();
      Fenster.setSize(900,650);
      Fenster.setLocationRelativeTo(null);
      Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Fenster.setResizable(false);
      Fenster.setVisible(true);
   }
}
```




2.Klasse: Hier wurde die Klasse konstruiert:


```
import javax.swing.*;
import org.jvnet.substance.SubstanceLookAndFeel;
import org.jvnet.substance.button.ClassicButtonShaper;
import org.jvnet.substance.painter.WaveGradientPainter;
import org.jvnet.substance.theme.SubstanceAquaTheme;

public class MyDialog extends JDialog
{
	static final long serialVersionUID = 1L;
	
	public MyDialog()
	{	         
         SubstanceLookAndFeel slnf = new SubstanceLookAndFeel();
         SubstanceLookAndFeel.setCurrentTheme(new SubstanceAquaTheme());
         SubstanceLookAndFeel.setCurrentButtonShaper(new ClassicButtonShaper());
         SubstanceLookAndFeel.setCurrentGradientPainter(new WaveGradientPainter());  
         try
         {                 
          UIManager.setLookAndFeel(slnf);  
          JDialog.setDefaultLookAndFeelDecorated(true);
         }
         catch (Exception b)
         {
           b.printStackTrace();
         }
         this.setSize(300,300);
	 this.setLocationRelativeTo(null);
         this.setVisible(true);
         this.setModal(true);		
	}	
	
}
```

Warum verhält sich das kleine mywindow nicht modal zu dem JFrame der in der 1. Klasse zuerst aufgerufen wird, danach auf button druck wird das  obige: 
	
	
	
	





```
MyDialog mywindow = new MyDialog();
```
 ausgeführt und das mywindow ist sichtbar aber eben nicht model??


----------



## kleiner_held (13. Jun 2007)

1. du meinst sicherlich modal und nicht model richtig?
2. ein Dialog kann nur modal sein, wenn du ihm im Constructor den owner (Frame oder Dialog) mitgibst, zu dem er sich modal verhalten soll.

PS: ich habe die Frage erst nach mehrmaligem Lesen verstanden, bitte gehe beim Fragestellen nicht davon aus, das ein Leser hier das gleiche Wissen ueber deinen Projektaufbau hat wie du.


----------



## PELLE (13. Jun 2007)

> Warum verhält sich das kleine mywindow nicht modal...



Wer wird sich denn an einem Verdreher aufhalten ;-)

ok nur was ist der owner der JDialog instanz "mywindow"

-->der name der 1. Klasse: MainWindow.class wo folgendes aufgerufen wird: 
	
	
	
	





```
MyDialog mywindow = new MyDialog();
```

also so geschrieben

```
public MyDialog(MainWindow)
{

}
```
oder ist der owner der JDialog instanz "mywindow"

--> die instanz "Fenster" die in der Main methode der 1. Klasse: MainWindow.class aufgerufen wird ? also so:


```
public MyDialog(Fenster)
{

}
```


----------



## SlaterB (13. Jun 2007)

natürlich ein Objekt, keine Klasse, 
JFrame oder JWindow oder so

public MyDialog(JFrame frame) 
{ 
super(frame);
..
}


----------



## PELLE (13. Jun 2007)

SlaterB hat gesagt.:
			
		

> natürlich ein Objekt, keine Klasse,
> JFrame oder JWindow oder so
> 
> public MyDialog(JFrame frame)
> ...




Was kommt dann in den Konstruktor parameter dieser Zeile???


```
MyDialog mywindow = new MyDialog(JFrame frame);
```
 dasselbe wie oben?

Diese instanz "frame" muss die schon wo mit new erschaffen sein?


----------



## SlaterB (13. Jun 2007)

> Warum verhält sich das kleine mywindow nicht modal zu dem JFrame der in der 1. Klasse zuerst aufgerufen wird

das impliziert doch, dass du schon ein JFrame hast,
warum ein neues erzeugen wenn du ein vorhandenes blockieren willst?

das vorhandene JFrame musst du übergeben als Parameter


----------



## PELLE (13. Jun 2007)

SlaterB hat gesagt.:
			
		

> > Warum verhält sich das kleine mywindow nicht modal zu dem JFrame der in der 1. Klasse zuerst aufgerufen wird
> 
> das vorhandene JFrame musst du übergeben als Parameter




```
public MyDialog(JFrame Fenster) 
	{	         
		 super(Fenster);
```

so ? Fenster ist wie gesagt die instanz die in der main methode erzeugt wird. obiger Code bringt auch kein Fehler nur 

dieser code bringt fehler


```
MyDialog mywindow = new MyDialog( Fenster);
```
 ?


----------



## Guest (13. Jun 2007)

Ändere mal die Reihenfolge dieser zwei Anweisungen.
Könnte die Ursache sein.
	
	
	
	





```
this.setVisible(true); 
this.setModal(true);
```


----------



## Tobias (13. Jun 2007)

> Dieser Code bringt Fehler.



Geht's auch genauer?


----------



## SlaterB (13. Jun 2007)

> dieser code bringt fehler 

WELCHEN FEHLER (laut schrei)


----------



## PELLE (13. Jun 2007)

SlaterB hat gesagt.:
			
		

> > dieser code bringt fehler
> 
> WELCHEN FEHLER (laut schrei)



sorry jungs bin heute verpeilt:

"Fenster can not be resolved" mehr steht in der console/Problems bei eclipse nicht

Ich poste morgen code heute ist spät...


----------



## Tobias (13. Jun 2007)

Jo, das heißt, das die Variable FENSTER in dem Codeblock in dem du MyDialog instanziierst nicht existiert. Das ist was, was wir nicht lösen können, weil wir deinen Code nicht kennen.

mpG
Tobias


----------



## PELLE (14. Jun 2007)

Tobias hat gesagt.:
			
		

> Das ist was, was wir nicht lösen können, weil wir deinen Code nicht kennen.
> mpG
> Tobias



Hallo Tobias,

ganz oben in meinem 1. Post habe ich die 1. Klasse gerippt eingefügt, da 1300 Zeilen hier einfügen unsinn wäre.

Vielen Dank für eure Hilfe!


----------



## SlaterB (14. Jun 2007)

dsu musst dein fenster (nicht die Klasse sondern das Object, zum xten Mal!) verfügbar machen

```
RechnungPanel RP = new RechnungPanel(this); 

....

class RechnungPanel extends JPanel implements ActionListener 
   { 
       private Fenster fenster;

    public RechnungPanel(Fenster fenster) {
        this.fenster = fenster;
   } 
}


...

MyDialog mywindow = new MyDialog(fenster);
```


----------



## PELLE (14. Jun 2007)

ich bekomme immer FEnster cannot be resolved to a type bei deinem obigen code. Mal schaun ob ich net zuviel gerippt habe vom code ich poste später nochmals sorry... War heute am arbeitsplatz jetzt daheim wo der aktuellere code gelagert ist ;-)


----------



## SlaterB (14. Jun 2007)

in meinem Code kommt 'FEnster' nirgendwo vor,

außerdem müsstest du eine Zeile nennen


----------



## PELLE (14. Jun 2007)

ok das ist die aktuelle code fenster struktur von Klasse 1:


```
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.swing.*;
import java.io.FileFilter;
import java.lang.System;
import javax.swing.text.MaskFormatter;
import org.jvnet.substance.button.ClassicButtonShaper;
import org.jvnet.substance.SubstanceLookAndFeel;
import org.jvnet.substance.theme.SubstanceAquaTheme;
import org.jvnet.substance.painter.WaveGradientPainter;

public class MainWindow extends JFrame
{    static final long serialVersionUID = 1L;     
  

   public MainWindow()
   {
      super("bla");   
      
     
              
      RechnungsPanel  RP = new RechnungsPanel();
     
      
      JTabbedPane jtp = new JTabbedPane();     
      
      jtp.addTab("<html><font size=5>Rechung</font size></html>", RP);
            
      
          
   }  //...................................... KONSTRUKTOR ENDE ........................................ //
   
   class RechnungsPanel extends JPanel implements ActionListener
   {      
	  

      public RechnungsPanel()
      {   
    	  
    	  JButton payBT = new JButton("bla");           
          
          payBT.addActionListener(this);
        
         
         
      }  //...................................... KONSTRUKTOR ENDE ........................................ //
    
      
      public void actionPerformed(ActionEvent e)
      {             
  
	       if(e.getSource().equals(payBT))
	       { 	              
	        MyDialog  mywindow = new MyDialog(fenster);          
	       }
      }
  } 

     
   public static void main(String args[])
   {
     
      MainWindow Fenster = new MainWindow();
      Fenster.setSize(960,565);
      Fenster.setLocationRelativeTo(null);
      Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Fenster.setResizable(false);
      Fenster.setVisible(true);
    
   }
}
```



> in meinem Code kommt 'FEnster' nirgendwo vor,
> 
> außerdem müsstest du eine Zeile nennen



Das war doch nur ein Schreibfähler von mir...

eine Zeile nennen? Na überall wo ich Fenster oder das objekt fenster schrieb war dieses in eclipse unterstrichen mit fenster oder Fenster can not be resolved


----------



## SlaterB (15. Jun 2007)

da du vorher oft 'Fenster', also den Klassennamen, benutzt hast, ist eine Frage nach der Schreibweise bei dir immer berechtigt,
-------

du hast also eine Zeile des von mir vorgeschlagenen Codes übernommen 
(MyDialog mywindow = new MyDialog(fenster); )
den Rest aber nicht, nicht mal geschrieben, dass du nicht weißt wo du es einfügen sollst oder ähnliche Begründungen

was soll ich davon halten?
was soll ich dazu sagen außer nochmal: tue es, vertraue der Macht! 

die Klasse Fenster scheint es bei dir gar nicht zu geben,
also z.B.


```
RechnungPanel RP = new RechnungPanel(this); 

....

class RechnungPanel extends JPanel implements ActionListener 
   { 
       private MainWindow mWindow;

    public RechnungPanel(MainWindow mWindow) {
        this.mWindow= mWindow;
   } 
}


...

MyDialog mywindow = new MyDialog(mwindow);
```


----------



## PELLE (15. Jun 2007)

```
RechnungPanel RP = new RechnungPanel(this); 

....

class RechnungPanel extends JPanel implements ActionListener 
   { 
       private MainWindow mWindow;

    public RechnungPanel(MainWindow mWindow) {
        this.mWindow= mWindow;
   } 
}


...

MyDialog mywindow = new MyDialog(mwindow);
```
[/quote]



Diese Anweisung brauch ich nicht läuft auch so...

// this.mWindow= mWindow;

und hier hast du dich verschrieben sollte wohl

MyDialog mywindow = new MyDialog(mWindow); heißen ;-)

ich habe übringens nie behauptet das Fenster eine Klasse sei:



> --> die instanz "Fenster" die in der Main methode der 1. Klasse: MainWindow.class aufgerufen wird ? also so:



SUPER vielen Dank dir hat geklappt. Du bist auch einer der Forenperlen hier ;-) (das wollt ich nur mal sagen...)


----------

