# JFrame plazieren



## student25 (24. Jun 2004)

Hallo, ich spiele gerade ein wenig mit dem Visual Editor von Eclipse rum. Und versuche mich zudem in Swing einzuarbeiten.

Dazu hab ich diese Anwendung erstellt.


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


public class Testclass extends JFrame {

	private javax.swing.JPanel jContentPane = null;

	private javax.swing.JTextField jTextField = null;
	private javax.swing.JPasswordField jPasswordField = null;
	private javax.swing.JLabel jLabel = null;
	private javax.swing.JLabel jLabel1 = null;
	private javax.swing.JButton jButton = null;
	private javax.swing.JButton jButton1 = null;
	private javax.swing.JLabel jLabel2 = null;
	
	private int counter = 0;
	
	/**
	 * This is the default constructor
	 */
	public Testclass() 
	{
		super();
		initialize();
		checkActions();			
	}
	
	/**
	 * This method checks the User Actions
	 * 
	 * @return void
	 */
	public void checkActions()
	{	
		// Erzeugt einen ActionListener auf jButton
		jButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent evt)
			{				
				if(jTextField.getText().toLowerCase().equals("admin") && jPasswordField.getText().equals("Passwort") && counter <= 2)
				{
					jLabel2.setForeground(new java.awt.Color(109,97,80));
					jLabel2.setText("Benutzername und Passwort korrekt!");
					counter = 0;					
				} 
				else if(!jTextField.getText().toLowerCase().equals("admin")  && counter <= 2)
				{
					jLabel2.setForeground(java.awt.Color.red);
					jLabel2.setText("Der Benutzername stimmt nicht!");
					counter ++;
				}
				else if (!jPasswordField.getText().equals("Passwort")  && counter <= 2)
				{
					jLabel2.setForeground(java.awt.Color.red);
					jLabel2.setText("Das Passwort stimmt nicht!");
					counter ++;
				}
				else if (jTextField.getText().equals("") && jPasswordField.getText().equals("")  && counter <= 2)
				{
					jLabel2.setForeground(java.awt.Color.red);
					jLabel2.setText("Geben Sie Werte ein!");
					counter ++;
				}
				else
				{
					jLabel2.setForeground(java.awt.Color.red);
					jLabel2.setText(counter + " Fehlversuche. Klicken Sie auf \"Abbrechen\"!");
				}
			}
		});
		
		// Erzeugt einen ActionListener auf jButton1
		jButton1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent evt)
			{
					// Beendet das Programm
					System.exit(0);			
			}
		});			
	}
	
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setContentPane(getJContentPane());
		this.setSize(250, 150);
		this.setIconImage(java.awt.Toolkit.getDefaultToolkit().getImage("icon.jpg"));
		this.setTitle("Anmelden");
		this.setForeground(java.awt.Color.black);
		this.setBackground(new java.awt.Color(204,204,204));
		this.setResizable(false);
		this.setLocation(450, 400);
		this.setVisible(false);
		this.setName("Hauptframe");
	}
	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private javax.swing.JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new javax.swing.JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJTextField(), null);
			jContentPane.add(getJPasswordField(), null);
			jContentPane.add(getJLabel(), null);
			jContentPane.add(getJLabel1(), null);
			jContentPane.add(getJButton(), null);
			jContentPane.add(getJButton1(), null);
			jContentPane.add(getJLabel2(), null);
			jContentPane.setName("HauptPane");
		}
		return jContentPane;
	}
	/**
	 * This method initializes jTextField
	 * 
	 * @return javax.swing.JTextField
	 */
	private javax.swing.JTextField getJTextField() {
		if(jTextField == null) {
			jTextField = new javax.swing.JTextField();
			jTextField.setSize(120, 20);
			jTextField.setLocation(100, 20);
			jTextField.setName("BenutzerTextfield");
		}
		return jTextField;
	}
	/**
	 * This method initializes jPasswordField
	 * 
	 * @return javax.swing.JPasswordField
	 */
	private javax.swing.JPasswordField getJPasswordField() {
		if(jPasswordField == null) {
			jPasswordField = new javax.swing.JPasswordField();
			jPasswordField.setSize(120, 20);
			jPasswordField.setLocation(100, 50);
			jPasswordField.setName("KennwortTextfield");
		}
		return jPasswordField;
	}
	/**
	 * This method initializes jLabel
	 * 
	 * @return javax.swing.JLabel
	 */
	private javax.swing.JLabel getJLabel() {
		if(jLabel == null) {
			jLabel = new javax.swing.JLabel();
			jLabel.setSize(60, 20);
			jLabel.setText("Benutzer:");
			jLabel.setLocation(20, 20);
			jLabel.setMaximumSize(new java.awt.Dimension(60,20));
			jLabel.setForeground(new java.awt.Color(113,102,152));
			jLabel.setName("BenutzerLabel");
		}
		return jLabel;
	}
	/**
	 * This method initializes jLabel1
	 * 
	 * @return javax.swing.JLabel
	 */
	private javax.swing.JLabel getJLabel1() {
		if(jLabel1 == null) {
			jLabel1 = new javax.swing.JLabel();
			jLabel1.setSize(70, 20);
			jLabel1.setText("Kennwort:");
			jLabel1.setLocation(20, 50);
			jLabel1.setForeground(new java.awt.Color(113,102,152));
			jLabel1.setName("KennwortLabel");
		}
		return jLabel1;
	}
	/**
	 * This method initializes jButton
	 * 
	 * @return javax.swing.JButton
	 */
	private javax.swing.JButton getJButton() {
		if(jButton == null) {
			jButton = new javax.swing.JButton();
			jButton.setSize(97, 25);
			jButton.setText("Anmelden");
			jButton.setLocation(20, 90);
			jButton.setPreferredSize(new java.awt.Dimension(95,25));
			jButton.setSelected(false);
			jButton.setMnemonic(java.awt.event.KeyEvent.VK_A);
			jButton.setName("AnmeldeButton");
		}
		return jButton;
	}

	/**
	 * This method initializes jButton1
	 * 
	 * @return javax.swing.JButton
	 */
	private javax.swing.JButton getJButton1() {
		if(jButton1 == null) {
			jButton1 = new javax.swing.JButton();
			jButton1.setSize(97, 25);
			jButton1.setText("Abbrechen");
			jButton1.setLocation(123, 90);
			jButton1.setMnemonic(java.awt.event.KeyEvent.VK_B);
			jButton1.setName("AbbrechenButton");
		}
		return jButton1;
	}
	/**
	 * This method initializes jLabel2
	 * 
	 * @return javax.swing.JLabel
	 */
	private javax.swing.JLabel getJLabel2() {
		if(jLabel2 == null) {
			jLabel2 = new javax.swing.JLabel();
			jLabel2.setSize(250, 10);
			jLabel2.setText("");
			jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING);
			jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
			jLabel2.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
			jLabel2.setForeground(java.awt.Color.red);
			jLabel2.setLocation(0, 75);
		}
		return jLabel2;
	}
}
```

Mein Problem ist das sich die Maske immer links-oben öffnet. Müsste die nicht eigendlich mit this.setLocation(450,400); verschiebbar sein?


----------



## Gast (24. Jun 2004)

Hallo!

Hab mir Dein Programm jetzt zwar nicht genau angesehen, aber wenn Du das Fenster in der Bildschirmmitte öffnen willst, dann kannst Du das mit

```
setLocationRelativeTo(null);
```

machen.

Grüsse,
--Alex


----------



## student25 (24. Jun 2004)

Danke für die schnelle Antwort!
Leider öffnet er das Fenster trotzdem noch links-oben.

Das sich das Fenster links-oben öffnet ist auch der Fall wenn ich mit dem VE nur ein JFrame + jContentPane ohne weiteren Inhalt erstelle. Der Code ist wohl übersichtlicher:


```
import javax.swing.JFrame;
import java.awt.*;


public class Testclass2 extends JFrame {

	private javax.swing.JPanel jContentPane = null;

	/**
	 * This is the default constructor
	 */
	public Testclass2() {
		super();
		initialize();
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setLocation(450, 400);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		this.setBounds((screenSize.width-300) / 2, (screenSize.height-200) / 2, 250, 150);
	}
	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private javax.swing.JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new javax.swing.JPanel();
			jContentPane.setLayout(new java.awt.BorderLayout());
		}
		return jContentPane;
	}
}
```


----------



## L-ectron-X (24. Jun 2004)

Die von Alex vorgeschlagene Variante funktioniert nicht in allen Fällen.
Du kannst aber auch das in Deinen Konstruktor einfügen:

```
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.with-300) / 2, (screenSize.height-200) / 2, 300, 200);
```
Dafür barucht nur noch das java.awt Package importiert zuwerden.


----------



## Illuvatar (24. Jun 2004)

L-ectron-X hat gesagt.:
			
		

> Die von Alex vorgeschlagene Variante funktioniert nicht in allen Fällen.



Wieso denn nicht? Und: Das hier funktioniert bei mir:

```
import javax.swing.JFrame;

public class Testclass2 extends JFrame {

   private javax.swing.JPanel jContentPane = null;
   public Testclass2() {
      super();
      initialize();
   }
   private void initialize() {
      this.setSize(300, 200);
      this.setContentPane(getJContentPane());
      this.setLocationRelativeTo (null); //neu
      this.setLocation(450, 400);
   }
   private javax.swing.JPanel getJContentPane() {
      if (jContentPane == null) {
         jContentPane = new javax.swing.JPanel();
         jContentPane.setLayout(new java.awt.BorderLayout());
      }
      return jContentPane;
   }
   public static void main (String[] args)
   {
     new Testclass2().setVisible (true);
   }
}
```

Edit: @student25 Grad sah dein Code noch anders aus :wink:


----------



## student25 (24. Jun 2004)

Habs mal im Quellcode eingefügt (siehe meinen letzten Beitrag), ändert aber leider nix an der Tatsache das sich die Maske links oben öffnet.


----------



## L-ectron-X (24. Jun 2004)

@student25: Diese Zeile muss natürlich raus.

```
this.setLocation(450, 400);
```

@Illuvatar: Ich habe mir jetzt nicht wie Du die Mühe gemacht die Zeile einzufügen. :roll: 
Aber ich hatte auch schon ein Fenster, welches sich trotz dieser Zeile nicht zentrieren ließ.
Allerdings, hatte ich auch nicht weiter nachgeforscht, warum es nicht ging. Es war nur ein kleines Testprogramm.


----------



## student25 (24. Jun 2004)

Schlagt mich nicht, aber der Quellcode von euch Illuvatar und von L-ectron-X (this.setLocation(450, 400); hat ich auskommentiert, nur vergessen hier im Forum zu editieren) funktioniert bei mir nicht.

Liegt das vielleicht an Eclipse? Ich lass das unter Eclipse 2.1.3 als Java-Bean laufen.


Edit: Ahh Ok, wenn ichs über die Main Methode ausführe wird die Maske mittig angezeigt. Aber das muss man auch erst mal wissen. ~


----------



## Illuvatar (24. Jun 2004)

L-ectron-X hat gesagt.:
			
		

> @Illuvatar: Ich habe mir jetzt nicht wie Du die Mühe gemacht die Zeile einzufügen. :roll:
> Aber ich hatte auch schon ein Fenster, welches sich trotz dieser Zeile nicht zentrieren ließ.
> Allerdings, hatte ich auch nicht weiter nachgeforscht, warum es nicht ging. Es war nur ein kleines Testprogramm.


Sicher, ich hab die Methode auch schon benutzt, aber ich wollte es mal an seinem Beispiel testen.


----------



## Gast (24. Jun 2004)

@L-ectron-X:
setLocationRelativeTo(null) funktioniert nur dann nicht richtig, wenn man danach noch die Grösse des Fensters z.B. mit setSize(...)  verändert. Sonst hatte ich damit eigentlich noch keine Probleme.

Grüsse,
--Alex


----------



## L-ectron-X (24. Jun 2004)

Danke Alex, jetzt bin ich im Bilde. :toll:


----------

