# Position des Fensters verändern



## Arthuro (20. Aug 2007)

Guten Morgen,

Bin noch nicht der beste in Java weil ich erst seit kurzem lerne, also bitte nicht sauer sein wenn ich nur eine kleinigkeit falsch gemacht habe. Ich programmiere mit Eclipse. Mein Fehler seht ihr unten:


```
//package com.javatutor.insel.ui.swing;
import javax.swing.JFrame;



public class Fenster 
{	
	public static void main(String[] args) 
	{
		// Fenster darstellen 

		
		JFrame f = new JFrame( "Test AG" );
		f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		f.setSize( 500,500 );
		f.setVisible(true);
		
		// Position des Fensters verändern
		

		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		f.setLocation( (d.width - f.getSize().width ) / 2,
                                                    (d.height- f.getSize().height) / 2 );
		    
	}

}
```

*Fehler:*


```
Severity and Description	Path	Resource	Location	Creation Time	Id
Dimension cannot be resolved to a type	Grafik/src	Fenster.java	line 21	1187596753823	103
The import Java cannot be resolved	Grafik/src	Fenster.java	line 3	1187596753823	102
Toolkit cannot be resolved	Grafik/src	Fenster.java	line 21	1187596753823	104
```

Danke im voraus für eine Lösung.


----------



## Kaladial (20. Aug 2007)

also fehler liegt wohl in der zeile: 
f.setLocation( (d.width - f.getSize().width ) / 2, (d.height- f.getSize().height) / 2 ); 

haste dir mal die werte ausgeben lassen?also die in d.width f.getSize().width d.height und f.getSize().height drin stehn?


----------



## Arthuro (20. Aug 2007)

Nein, wie mache ich das den ? Wie gesagt bin noch net der überprof in Java fange erst seit kurzem damit an bin schon die grundlagen etc... durchgegangen und C++,C# kann ich schon und jetzt versuche ich es mit Java und Eclipse. 

Also wäre Super wenn du mir sagen würdest wie.


----------



## Kaladial (20. Aug 2007)

System.out.println(d.width+" "+f.getSize().width+" "+d.height+" "+f.getSize().height );


----------



## Kaladial (20. Aug 2007)

ah ich seh grad das das gar net gehn dürfte (also einbinden müsstest du es nach zeile 21 und der schmeisst ja schon in zeile 21 den fehler)

hast du auch den import gemacht damit er den befehl überhaupt kennt: Toolkit.getDefaultToolkit().getScreenSize();


----------



## Arthuro (20. Aug 2007)

Und was nehm ich dafür weg ? Muss das ja irgendwo in meinen Code einfügen aber wie soll das den klappen wenn da noch andere fehlermeldungen sind da startet der das doch erst gar net...


----------



## Kaladial (20. Aug 2007)

also dies hier: 
import java.awt.Toolkit;


----------



## Arthuro (20. Aug 2007)

```
import java.awt.Toolkit;
```

Habe ich eingefügt, gut bin ich ein Schritt weiter bleiben noch diese Fehlermeldungen :


```
Severity and Description	Path	Resource	Location	Creation Time	Id
Dimension cannot be resolved to a type	Grafik/src	Fenster.java	line 22	1187598489128	130
The field Component.height is not visible	Grafik/src	Fenster.java	line 24	1187598489128	132
The field Component.width is not visible	Grafik/src	Fenster.java	line 23	1187598489128	131
```


----------



## Kaladial (20. Aug 2007)

import java.awt.Dimension;
fehlt auch


----------



## Kaladial (20. Aug 2007)

du hast doch gesagt du benutzt eclipse... der unterstreicht dir die wörter die er net kennt mit ner roten wellenlinie dadrauf sollteste ma achten


----------



## Arthuro (20. Aug 2007)

Es läuft !

Vielen Dank


----------



## Arthuro (20. Aug 2007)

Ich hab das mal bisschen umgestellt und in klassen gepackt aber leider, wird das Fenster jetzt nicht mehr in der mitte angezeigt weißt du warum ?

LG


```
//package com.javatutor.insel.ui.swing;
import javax.swing.JFrame;
import java.awt.Toolkit;
import java.awt.Dimension;




public class Fenster extends JFrame
{	
		
	public static void main(String[] args)  // Fenster darstellen
	{ 
		JFrame f = new JFrame( "Test AG" );	
		f.setSize( 800,600 );
		f.setVisible(true);
	}
	
	public Fenster( int x, int y )  // Position des Fensters verändern
	{	
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		setSize( x, y ); 
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation( (d.width - getSize().width ) / 2, 
					 (d.height- getSize().height) / 2 );
	}
	
}
```


----------



## Kaladial (20. Aug 2007)

also ich würde es dann so bauen:


```
//package com.javatutor.insel.ui.swing; 
import javax.swing.JFrame; 
import java.awt.Toolkit; 
import java.awt.Dimension; 

public class Fenster extends JFrame 
{    
       
   public static void main(String[] args)  // Fenster darstellen 
   { 
      JFrame f = new JFrame( "Test AG" );    
      f.setSize( 800,600 ); 
      f.setLocation(fenster_pos(f));
      f.setVisible(true); 
   } 
    
   public Dimension fenster_pos(JFrame f)  // Position des Fensters verändern 
   {    
      f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
      f.setSize( x, y ); 
      Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
      int x=d.width - f.getSize().width ) / 2;
      int y=d.height - f.getSize().height) / 2 ; 
      Dimension d_retun=new Dimension(x,y);
      return d_retun;
   } 
    
}
```


----------



## Arthuro (20. Aug 2007)

Naja so will ich es aber nicht, will es ja wissen warum es nicht mit meinem Code den ich geschrieben hab nich funktioniert....


----------



## Duster (20. Aug 2007)

Wenn ich das richtig sehe, setzt du im Konstruktor die Werte für
die Größe deines JFrames und setzt die Location, aber in der Main-Methode, die erst nach dem Konstruktor aufgerufen wird, instanzierst du ein neuse Object vom Typ JFrame mit einer festen Größe und setzt auch keine Location.

Ist dies so gewollt?

Es gibt noch einen einfachen Weg das JFrame so auszurichten, das
es immer in der Mitte des Bildschirms erscheint : 

setLocationRelativeTo(null);


----------



## Kaladial (20. Aug 2007)

new Fenster().setVisible(true); 

^^ muss in deine main...
und dann sollte das gehn

Edit: hmmm hab grad festgestellt das der ne exception schmeisst wenn ich dem konstruktor schon variablen übergeb... hmmm ka wie dann


----------



## Gast (21. Aug 2007)

Hmmm hat den keiner eine lösung für mich :-(


----------



## Duster (21. Aug 2007)

Was für eine Fehlermeldung erhälst du denn?


----------



## Gast (21. Aug 2007)

Keine , das Fenster wird einfach nicht in der Mtte angezeigt....


----------



## Duster (21. Aug 2007)

Also wenn ich ehrlich bin, würde ich auf die Main-Methode verzichten.


```
import javax.swing.JFrame;
import java.awt.Toolkit;
import java.awt.Dimension;

public class Fenster extends JFrame
{   

   public Fenster( int x, int y )  // Position des Fensters verändern
   {   
      setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      setSize( x, y );
      Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
      setLocationRelativeTo(null);
      FensterAnzeigen();
   }

   public void FensterAnzeigen()
   {
       setVisible(true);
   }
}
```


----------



## Kaladial (21. Aug 2007)

und wie willste ohne main nen programm starten? 
und wer übergibt der Funktion Fenster die werte x,y?


----------



## Duster (21. Aug 2007)

Also ich würde diese Klasse über eine andere Klasse(deren Main-Methode) aufrufen, was auch Sinn machen würde, denn ich kann dem Konstruktor die Werte
für die Größe des Fensters übergeben.

Denn du setzt für deine Klasse Fenster im Konstruktor die jeweiligen Werte, aber in deiner Main-Methode erstellst du ein neues Objekt vom Typ JFrame, den du auch noch feste Werte für die Größe gibst.


----------

