# Fenster  Erweiterung/Sichtbar machen



## Y-Style (28. April 2011)

Hallo.
Ich hab ein Problem mit einer Schulaufgabe:

Ein Textfeld in dem ein Pin reinkommt, und ein button zum bestätigen.
Wenn es der richtige Pin ist, soll sich dieses "Formular" erweitern, außerdem soll
der Pin nicht sichtbar sein:***.

Ich würde gern wissen, wie man den Pin so einstellt
und wie ich dieses Formular erweiter! ! !

Hilfe  ! ! !

Was ich bisher hab in meinem Fenster wäre das Dokument im Anhang.


----------



## Technoblade (28. April 2011)

Also für das Passwortfeld gibt es extra die Klasse JPasswordField. Die macht genau das was du willst.
Was das mit dem Formular erweitern betrifft. Naja, beim klicken aufd en Button musst du halt nur im ActionListener überprüfen ob die Pin stimmt und dann ggf. Die weiteren Componenten zum Frame hinzufügen.

Quelltext poste ich bewusst nicht, da es ja schließlich deine Aufgabe ist.


----------



## Y-Style (28. April 2011)

Technoblade hat gesagt.:


> Naja, beim klicken aufd en Button musst du halt nur im ActionListener überprüfen ob die Pin stimmt


 
und wie soll ich die Pin vergleichen?


----------



## Technoblade (28. April 2011)

Ganz einfach. Du machst dir zu deinem Bestätigen-Button einen ActionListener. In dem liest du den Inhalt des JPassworFields aus. Den vergleichst du dann mit der Pin. Wo du die Pin gespeichert hast ergibt sich mir aus dem von dir im Anhang geposteten Quellcode allerdings noch nicht.

Wie man einen Listener erstellt weißt du ja. Du hast es zumindest in deinem Code oben verwendet.


----------



## Y-Style (28. April 2011)

ok des hab ich verstanden krieg des trotzdem nicht hin -.-


vielleicht hilft es wenn ich alles zeig was ich hab bis jetzt:

die normale Klasse für den pin usw.:

```
package paket_Kopierer;
import javax.swing.JOptionPane;
public class Kopierkarte 
{
	private String pin;
	private int stand;
	
	public Kopierkarte()
	{
		pin="123";
		stand=100;
	}
	
	public void setPin(String pPin)
	{
		pin=pPin;
	}
	public String getPin()
	{
		return pin;
	}
	public void setStand(int pStand)
	{
		stand=pStand;
	}
	public int getStand()
	{
		return stand;
	}
	public void bestätigen(String pfPinNummer)
	{
		pfPinNummer=pin;
	}
	public void mindern(int pMinderung)
	{
		if (stand-pMinderung >= 0)
		{
			stand=stand-pMinderung;
		}
		else
		{
			JOptionPane.showMessageDialog(null,"Nicht genügend Kopien vorhanden******");
		}	
	}
}
```


die Startklasse zur Erzeugung des Fensters:

```
package paket_Kopierer;

public class Startklasse 
{
	public static void main(String[] args)
	{
		Fenster fenster1;
		
		fenster1=new Fenster();
		
		fenster1.setVisible(true);
		
	}
}
```


mein Fenster:

```
package paket_Kopierer;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.JTextField;
import javax.swing.JTable;
import javax.swing.JList;
import java.awt.Rectangle;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.text.*;
import javax.swing.JCheckBox;
import javax.swing.JPasswordField;
import java.awt.Dimension;
import javax.swing.JInternalFrame;
import javax.swing.JSplitPane;
import javax.swing.JWindow;

public class Fenster extends JFrame
{
	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JList jList = null;
	private JLabel lbPinNummer = null;
	private JLabel lbBestätigen = null;
	private JTextField tfKontostand = null;
	private JButton btEnde = null;
	private JButton btKopieren = null;
	private JLabel lbKontostand = null;
	private JTextField tfKopien = null;
	
	
	
	private Kopierkarte karte1;
	private JButton btBestätigen = null;
	private JPasswordField pfPinNummer = null;
	private JLabel lbAnzahlKopien = null;
	private JPasswordField pfPinNummer1 = null;
	public Fenster()
	{
		super();
		initialize();
		karte1=new Kopierkarte();
	}
	
	private void initialize()
	{
		this.setSize(400, 300);
		this.setContentPane(getJContentPane());
		this.setTitle("Kopierer ohne DB");
	}
	

	
	private JPanel getJContentPane()
	{
		if (jContentPane == null)
		{
			lbAnzahlKopien = new JLabel();
			lbAnzahlKopien.setBounds(new Rectangle(20, 140, 150, 25));
			lbAnzahlKopien.setText("Anzahl Kopien:");
			lbKontostand = new JLabel();
			lbKontostand.setBounds(new Rectangle(20, 100, 150, 25));
			lbKontostand.setText("aktueller Kontostand:");
			lbBestätigen = new JLabel();
			lbBestätigen.setBounds(new Rectangle(20, 60, 150, 25));
			lbBestätigen.setText("Pin-Nummer bestätigen:");
			lbPinNummer = new JLabel();
			lbPinNummer.setBounds(new Rectangle(20, 20, 100, 25));
			lbPinNummer.setText("Pin-Nummer:");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJList(), null);
			jContentPane.add(lbPinNummer, null);
			jContentPane.add(lbBestätigen, null);
			jContentPane.add(getTfKontostand(), null);
			jContentPane.add(getBtEnde(), null);
			jContentPane.add(getBtKopieren(), null);
			jContentPane.add(lbKontostand, null);
			jContentPane.add(getTfKopien(), null);
			jContentPane.add(getBtBestätigen(), null);
			jContentPane.add(lbAnzahlKopien, null);
			jContentPane.add(getPfPinNummer1(), null);
		}
		return jContentPane;
	}

	
	private JList getJList()
	{
		if (jList == null)
		{
			jList = new JList();
			jList.setBounds(new Rectangle(0, 0, 0, 373));
		}
		return jList;
	}

	
	private JTextField getTfKontostand()
	{
		if (tfKontostand == null)
		{
			tfKontostand = new JTextField();
			tfKontostand.setBounds(new Rectangle(190, 100, 100, 25));
			tfKontostand.setEditable(false);
			tfKontostand.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					
				}
			});
		}
		return tfKontostand;
	}
		
	private JButton getBtEnde()
	{
		if (btEnde == null)
		{
			btEnde = new JButton();
			btEnde.setBounds(new Rectangle(190, 180, 100, 25));
			btEnde.setText("Ende");
			btEnde.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					System.exit(0);
				}
			});
			btEnde.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					System.exit(0);
				}
			});
		}
		return btEnde;
	}

	
	private JButton getBtKopieren()
	{
		if (btKopieren == null)
		{
			btKopieren = new JButton();
			btKopieren.setBounds(new Rectangle(20, 180, 100, 25));
			btKopieren.setText("Kopieren");
			btKopieren.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					karte1.mindern(Integer.parseInt(tfKopien.getText()));
				}
			});
		}
		return btKopieren;
	}

	
	private JTextField getTfKopien()
	{
		if (tfKopien == null)
		{
			tfKopien = new JTextField();
			tfKopien.setBounds(new Rectangle(190, 140, 100, 25));
		}
		return tfKopien;
	}


	/**
	 * This method initializes btBestätigen	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtBestätigen() {
		if (btBestätigen == null ) {
			btBestätigen = new JButton();
			btBestätigen.setBounds(new Rectangle(190, 60, 100, 25));
			btBestätigen.setText("Bestätigen");
			btBestätigen.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					pfPinNummer.getText();
				}
			});
		}
		return btBestätigen;
	}


	/**
	 * This method initializes pfPinNummer1	
	 * 	
	 * @return javax.swing.JPasswordField	
	 */
	private JPasswordField getPfPinNummer1()
	{
		if (pfPinNummer1 == null)
		{
			pfPinNummer1 = new JPasswordField();
			pfPinNummer1.setBounds(new Rectangle(188, 16, 101, 32));
		}
		return pfPinNummer1;
		
	}

	



	/**
	 * This method initializes pfPinNummer	
	 * 	*/
}
```




Die Aufgabe:
Erstellen sie ein OO-Projekt ,,Projekt_Kopierer", mit dem das Kopieren mit einer Kopier-
karte "simuliert" werden soll.
Nach Eingabe der korrekten (nicht sichtbaren) Pin-Nummer(123) erweitert sich das Formular. Wenn der Falsche Pin eingegeben wurde soll eine Fehlermeldung in einem Fenster ausgegeben werden.
Der Benutzer erhält eine Information über den aktuellen Kontostand und kann nun die Anzahl der gewünschten Kopien eintragenn.
Nach dem Klick auf Kopieren wird der Kontostand aktualisiert.
Es muss verhindert werden, dass die gewünschte Kopienanzahl den aktuellen Kontostand übersteigt.



Ich hoffe, dass des jetzt verständlicher ist  .


----------



## MiMi (29. April 2011)

Wieso hast du 2 Passwort Felder?

```
private JPasswordField pfPinNummer = null;
    private JPasswordField pfPinNummer1 = null;
```
Ansonsten wenn du das richtige nutzt (du fuegst ja nur pfPinNummer1 zum Panel hinzu) hats du doch schon einen ActionListener

```
public void actionPerformed(java.awt.event.ActionEvent e)
                {
                    pfPinNummer.getText();
                }
```
Dieser holt doch den Text (das Passwort) aus dem Textfeld. Speicher diesen in eine Variable. So passiert ja nichts damit ^^
Dort in der actionperformed kannst du dann auch direkt von deiner Karte den richtigen Pin fragen mit der getMethode

```
karte1.get...
```
Dann die beiden Strings vergleichen


----------



## SE (29. April 2011)

Also erstmal : pfPinNummer wird nirgends initialisiert ... würde also zu ner NPE führen.
Zweitens : Umlaute sind in JAVA zwar kein Problem dank der UNICODE-codierung ... sind aber nicht wirklich schön und beim verteilen des Source auf ein System mit anderem Charset werden deine Source-Files falsch dargestellt : daher Sonderzeichen möglichst vermeiden.
Drittens : JPasswordField.getText() ist deprecated , stattdessen getPassword() verwenden.
Viertens : du musst dann das return von getPassword auch irgendwo hinspeichern und nicht einfach nur die Methode aufrufen > das bewirkt nichts.
Fünftens : das Erweitern einfach realisieren in dem man das Formular vorbereitet und bei richtiger PIN als JPanel added und dann validate() und update() aufruft.


----------



## Y-Style (29. April 2011)

MiMi hat gesagt.:


> ```
> public void actionPerformed(java.awt.event.ActionEvent e)
> {
> pfPinNummer.getText();
> ...



wie soll ich des dann in einer variablen speichern?




SPiKEe hat gesagt.:


> Also erstmal : pfPinNummer wird nirgends initialisiert ... würde also zu ner NPE führen.
> Zweitens : Umlaute sind in JAVA zwar kein Problem dank der UNICODE-codierung ... sind aber nicht wirklich schön und beim verteilen des Source auf ein System mit anderem Charset werden deine Source-Files falsch dargestellt : daher Sonderzeichen möglichst vermeiden.
> Drittens : JPasswordField.getText() ist deprecated , stattdessen getPassword() verwenden.
> Viertens : du musst dann das return von getPassword auch irgendwo hinspeichern und nicht einfach nur die Methode aufrufen > das bewirkt nichts.
> Fünftens : das Erweitern einfach realisieren in dem man das Formular vorbereitet und bei richtiger PIN als JPanel added und dann validate() und update() aufruft.


 

hört sich gut an leider versteh ich nicht alles richtig.

- was ist eine NPE? und wie soll ich die dann initialisieren?
- was meinst du bei drittens? -> erklärung
- wie soll ich das machen bei viertens?
- bei fünftens wäre ein beispiel in ordnung, da ich das nicht richtig versteh


----------



## MiMi (29. April 2011)

Zu 1. NPE = Nullpointer exception. Wie ich schon sagte, du hast 2 Passwortfelder, das was du nutzen willst wird aber nicht initialisiert. 
Zu 3. Man soll getPassword anstatt getText verwenden.
Zu 4. ist das was ich geschrieben hab.
Du machst ein getText (bzw dann getPassword) speicherst das was du bekommst aber nirgens in ne Variable. Abspeichern und den Inhalt des Strings dann (siehe meinen Text oben) vergleichen

Versuch erstmal das vergleichen der Strings hinzubekommen bzw das Auslesen vom Inhalt aus einem Textfeld, bevor du ein Fenster erweitern willst Oo


----------



## Y-Style (29. April 2011)

ok ich jetzt ma alles gemacht das ich verstanden hab:


```
package paket_Kopierer;

import java.awt.BorderLayout;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.JTextField;
import javax.swing.JTable;
import javax.swing.JList;
import java.awt.Rectangle;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.text.*;
import javax.swing.JCheckBox;
import javax.swing.JPasswordField;
import java.awt.Dimension;
import javax.swing.JInternalFrame;
import javax.swing.JSplitPane;
import javax.swing.JWindow;

public class Fenster extends JFrame
{
	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JList jList = null;
	private JLabel lbPinNummer = null;
	private JLabel lbBestätigen = null;
	private JTextField tfKontostand = null;
	private JButton btEnde = null;
	private JButton btKopieren = null;
	private JLabel lbKontostand = null;
	private JTextField tfKopien = null;
	private Kopierkarte karte1;
	private JButton btBestätigen = null;
	private JPasswordField pfPinNummer1 = null;
	private JLabel lbAnzahlKopien = null;
	
	public Fenster()
	{
		super();
		initialize();
		karte1=new Kopierkarte();
	}
	
	private void initialize()
	{
		this.setSize(400, 300);
		this.setContentPane(getJContentPane());
		this.setTitle("Kopierer ohne DB");
	}
	
	private JPanel getJContentPane()
	{
		if (jContentPane == null)
		{
			lbAnzahlKopien = new JLabel();
			lbAnzahlKopien.setBounds(new Rectangle(20, 140, 150, 25));
			lbAnzahlKopien.setText("Anzahl Kopien:");
			lbKontostand = new JLabel();
			lbKontostand.setBounds(new Rectangle(20, 100, 150, 25));
			lbKontostand.setText("aktueller Kontostand:");
			lbBestätigen = new JLabel();
			lbBestätigen.setBounds(new Rectangle(20, 60, 150, 25));
			lbBestätigen.setText("Pin-Nummer bestätigen:");
			lbPinNummer = new JLabel();
			lbPinNummer.setBounds(new Rectangle(20, 20, 100, 25));
			lbPinNummer.setText("Pin-Nummer:");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJList(), null);
			jContentPane.add(lbPinNummer, null);
			jContentPane.add(lbBestätigen, null);
			jContentPane.add(getTfKontostand(), null);
			jContentPane.add(getBtEnde(), null);
			jContentPane.add(getBtKopieren(), null);
			jContentPane.add(lbKontostand, null);
			jContentPane.add(getTfKopien(), null);
			jContentPane.add(getBtBestätigen(), null);
			jContentPane.add(lbAnzahlKopien, null);
			jContentPane.add(getPfPinNummer1(), null);
		}
		return jContentPane;
	}
	
	private JList getJList()
	{
		if (jList == null)
		{
			jList = new JList();
			jList.setBounds(new Rectangle(0, 0, 0, 373));
		}
		return jList;
	}
	
	private JTextField getTfKontostand()
	{
		if (tfKontostand == null)
		{
			tfKontostand = new JTextField();
			tfKontostand.setBounds(new Rectangle(190, 100, 100, 25));
			tfKontostand.setEditable(false);
			tfKontostand.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					tfKontostand.equals(karte1.getStand());
				}
			});
		}
		return tfKontostand;
	}
	
	private JButton getBtEnde()
	{
		if (btEnde == null)
		{
			btEnde = new JButton();
			btEnde.setBounds(new Rectangle(190, 180, 100, 25));
			btEnde.setText("Ende");
			btEnde.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					System.exit(0);
				}
			});
		}
		return btEnde;
	}
	
	private JButton getBtKopieren()
	{
		if (btKopieren == null)
		{
			btKopieren = new JButton();
			btKopieren.setBounds(new Rectangle(20, 180, 100, 25));
			btKopieren.setText("Kopieren");
			btKopieren.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					karte1.mindern(Integer.parseInt(tfKopien.getText()));
				}
			});
		}
		return btKopieren;
	}
	
	private JTextField getTfKopien()
	{
		if (tfKopien == null)
		{
			tfKopien = new JTextField();
			tfKopien.setBounds(new Rectangle(190, 140, 100, 25));
		}
		return tfKopien;
	}
	
	private JButton getBtBestätigen() {
		if (btBestätigen == null ) {
			btBestätigen = new JButton();
			btBestätigen.setBounds(new Rectangle(190, 60, 100, 25));
			btBestätigen.setText("Bestätigen");
			btBestätigen.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					getPfPinNummer1();
					karte1.getPin();
					if (pfPinNummer1.equals(karte1.getPin()))
					{
						getTfKontostand();
					}
					else
					{
						JOptionPane.showMessageDialog(null,"Falsche Pin-Nummer******");
					}
				}
			});
			
		}
		return btBestätigen;
	}
	
	private JPasswordField getPfPinNummer1()
	{
		if (pfPinNummer1 == null)
		{
			pfPinNummer1 = new JPasswordField();
			pfPinNummer1.setBounds(new Rectangle(188, 16, 101, 32));
		}
		return pfPinNummer1;
	}
}
```

den vergleich hab ich jetzt halt mit equals gemacht,
aber bei mir erscheinen die buttons nicht mehr und ich krieg bei der ausführung, bei der richtigen pin,
meine fehlermeldung falsche pin, was hab ich falsch?

wie soll ich des dann bei viertens speicher?


----------



## MiMi (29. April 2011)

Oo

```
getPfPinNummer1();
                    karte1.getPin();
                    if (pfPinNummer1.equals(karte1.getPin()))
                    {
                        getTfKontostand();
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(null,"Falsche Pin-Nummer******");
                    }
```
Was machst du da?
pfPinNummer1 ist ein Textfeld, das vergleichst du mit einem STring. Du musst den Inhalt des Textfeldes mit dem anderen String (Pin) vergleichen. Das ein Textfeld != "123" ist, ist ja wohl klar 

```
getPfPinNummer1();
                    karte1.getPin();
```
Hat nirgens eine Auswirkung drauf!
Speicher beides (also den Inhalt des Textfeldes und den Wert aus deiner karte.getPin()) in eine Variable und vergleiche diese beiden Variablen.


----------



## Y-Style (29. April 2011)

ok des muss jetzt wahrscheinlich echt dumm rüberkommen,
aber wie soll ich des in einer variablen speichern?


----------



## MiMi (29. April 2011)

```
btKopieren = new JButton();
```
hier speicherst du das Objekt JButton in der variablen btKopieren


----------



## SE (29. April 2011)

Y-Style hat gesagt.:


> ok des muss jetzt wahrscheinlich echt dumm rüberkommen,
> aber wie soll ich des in einer variablen speichern?


 
Mal ne ganz dumme Gegenfrage : hast du überhaupt irgendwie Erfahrung im umgang mit Java oder generell Programmieren ?
Google dir mal das OpenBook JavaInsel. Das dürfte dir bei deiner Aufgabe fast bis zum Erfolg weiterhelfen da dir ganz offensichtlich die einfachsten Grundlagen schlicht FEHLEN.


----------



## Y-Style (29. April 2011)

SPiKEe hat gesagt.:


> Mal ne ganz dumme Gegenfrage : hast du überhaupt irgendwie Erfahrung im umgang mit Java oder generell Programmieren ?


 
programmieren ja, java haben wir seit 1-2 Monaten,

diese aufgabe soll für eine gfs sein die ich dann mit nem kumpel machen soll,
also neues gebiet zum teil.


----------



## SE (29. April 2011)

Naja, aber wenn du dich mit Programmieren auskennst solltest du doch auch mitlerweile wissen das man Rückgabewerte von Methoden auch irgendwo speichern muss solange die aufgerufenen Methoden die übergebene Instanz nicht dierekt verändern *was bei String generell nicht der Fall ist*.


----------



## Y-Style (29. April 2011)

ja tut mir leid wenn ich keinen so guten lehrer hab der mir des so erklärt dass ich alles versteh.


----------



## SE (29. April 2011)

Schieb das jetzt mal nicht auf deinen Lehrer. Der Fehler liegt hier eindeutig bei dir.
Wie ich bereits sagte : da dich ja nach eigener Aussage mit Programmieren auskennst solltest du zumindest ALLGEMEINE Grundlagen draufhaben. Zum Beispiel das es zu jeder Sprache auch eine Dokumentation gibt in der genau solche wichtigen Grundlagen beschrieben werden. Und wenn du das was dein Lehrer von sich gibt nich verstehst musst du also entweder solange nachfragen bis du es verstanden hast oder einfach mal selbst dein Kopf n bissl anstregnen.


----------



## Y-Style (29. April 2011)

okok...
hast ja recht, danke für den tipp mit der seite.


----------



## Y-Style (29. April 2011)

> Speicher beides (also den Inhalt des Textfeldes und den Wert aus deiner karte.getPin()) in eine Variable und vergleiche diese beiden Variablen.



ok ich weiß noch nicht ob des so richtig ist aber ich hab des jetzt so gemacht:


```
private JButton getBtBestätigen() {
		if (btBestätigen == null ) {
			btBestätigen = new JButton();
			btBestätigen.setBounds(new Rectangle(190, 60, 100, 25));
			btBestätigen.setText("Bestätigen");
			btBestätigen.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					getPfPinNummer1();
					JPasswordField a = getPfPinNummer1();
					
					karte1.getPin();
					
					if (a.equals(karte1.getPin()))
					{
						getTfKontostand();
					}
					else
					{
						JOptionPane.showMessageDialog(null,"Falsche Pin-Nummer******");
					}
				}
			});
			
		}
		return btBestätigen;
	}
```


----------



## Technoblade (29. April 2011)

Also, das ertse getPfPinNummer1 kannst du getrost weglassen, das bringt rein gar nichts, weil du den Rückgabewert ja nicht beachtest wie dir schon x Mal im Vorhinein von anderen gesagt wurde.
Richtig ist der zweite Aufruf:


```
JPasswordField a = getPfPinNummer1();
```

Selbiges gilt für den Aufruf in Zeile 13.

Dann kommt deine If-Abbfrage (*Haare rauf*)
Es wurde dir schonmal im Vorhinein gesagt, in dem If dort vergleichst du Äpfel mit Brinen. Da ist es kein wunder, dass immer false raus kommt. Ne Brine ist nunmal kein Apfel!
karte.getPin() gibt doch wenn ich mich recht entsinne einen String zurück. Damit da überhaupt true raus kommen kann musst du ihn auch mit einem String vergleichen. Du hingegen vergleichst ihn mit deinem JPasswordField!!
Und nochmals, auch wenn dir das so ziemlcieh alle zuvor auch schon einmal gesagt haben. Hol dir von dem JPasswordField das den Inhalt. Das geht so mit der Methode getPassword(). Da die dir allerdings noch ein char[] zurückgibt musst du daraus noch einen String machen. Wie das geht bitte ich dich in der Dokumentation nachzugucken. Falls du nicht weißt wo es die gibt:

http://download.oracle.com/javase/6/docs/api/index.html

Mehr Tipps kann man dir nicht geben ohne die Aufgabe für dich zu lösen.


----------



## Y-Style (29. April 2011)

ah ok.

hab des dann so:


```
private JButton getBtBestätigen() {
		if (btBestätigen == null ) {
			btBestätigen = new JButton();
			btBestätigen.setBounds(new Rectangle(190, 60, 100, 25));
			btBestätigen.setText("Bestätigen");
			btBestätigen.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					JPasswordField a = getPfPinNummer1();
					karte1.getPin();
				}
			});
			
		}
		return btBestätigen;
	}

	
	public void getPassword()
	{
		String.valueOf(a);
	}
```

ist des dann richtig?


----------



## Technoblade (29. April 2011)

Nein -.-

Ok, mal gaaaanz von vorne.
entscheident ist ja eig. nur der ActionListener.
Also alles was sich innerhalb der {} von public void actionPerformed abspielt.
Die erste Zeile mit
JPasswordField a = getPfPinNummer ist so weit richtig.
das karte1.getPin() macht immer noch nichts, ich weiß nicht wie oft man dir das noch sagen soll.
Also die Methode getPin() gibt dir etwas zurück, wenn du es allerdings nirgendwo rein tust verpufft das. Stell es dir vor als käme jedes mal aus der Karte die Pin raus wenn du sie schüttelst. Nun hast du die Karte in der Hand schüttelst sie aber fängst die Pin nicht auf. Dann ist die weg!
Damit das nicht passiert machst du es so wie bei getPfPinNUmmer().
Du schreibst dir einen "Behälter" davor der die Pin auffängt.

Das ist deine erste Aufgabe!
Tipp: Das was dir getPin zurück gibt ist ein String (nein, nicht die sexy Unterwäsche).
getPfPinNummer gibt ein JPasswordField zurück. Du kannst also in Zeile 11 ein wenig abgucken.

Weiter geht es. Wir machen das ganze erstmal nur so weit, dass du überprüfen kannst ob die Pin richtig oder falsch ist.

Schön und gut, wenn du das erledigt hast kommen wir zur zweiten Aufgabe:
Aus dem JPasswordField die Eingabe raus holen.
Schön und gut. In Zeile 11 hast du dir schonmal das JPasswordField geholt, darauf kannst du jetzt über die Variable a zugreifen.

Um an die Eingabe zu kommen benötigst du die Methode getPassword. Die rufst du so auf:

```
a.getPassword();
```
Das Ergebnis davon musst du natürlich auch wieder Auffangen. Wie bereits schon erwähnt gibt dir getPassword ein char[].

Deine zweite Aufgabe:
Dieses char[] "auffangen" und daraus einen String machen.
Hier ist die Dokumentation der Klasse String:
http://download.oracle.com/javase/6/docs/api/java/lang/String.html

Wenn du das nun nicht alleine schaffst werde ich dir zumindest nicht mehr weiter helfen.
Du hast von vielen hier im Forum reichlich Hilfestellung bekommen. Die wenigsten Themen hier erreichen eine solche Länge. Jeder der Leute hier hat mehr Zeit aufgewandt es dir zu erklären als er vermutlich gebraucht hätte es einfach selber fertig zu machen. Ich habe dir hier fast schon fertigen Quelltext geliefert, wenn du nicht in der Lage bist daraus mehr zu machen, dann hast du die schlechte Note in der Schule auch wirklich verdient.


----------



## Y-Style (29. April 2011)

Ok ich hoffe jetzt ist es richtig:


```
private JButton getBtBestätigen() {
		if (btBestätigen == null ) {
			btBestätigen = new JButton();
			btBestätigen.setBounds(new Rectangle(190, 60, 100, 25));
			btBestätigen.setText("Bestätigen");
			btBestätigen.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					JPasswordField a = getPfPinNummer1();
					String b = karte1.getPin();
					char[] c= a.getPassword();
					String.valueOf(c);
				}
			});
			
		}
		return btBestätigen;
	}
```


----------



## SE (30. April 2011)

Also jetzt mal GANZ erlich : ich schließ mich der Meinung von Technoblade voll und ganz an.
Wir alle hier haben bereits mehr Zeit aufgewendet dir die Grundlagen zu erklären wie du erstmal an das Passwort kommst als wir gebraucht hätten um die komplette Aufgabe *also mit Veränderung des Fensters und und und* zu lösen.
Und ich wiederhole mich echt ungerne zum dritten mal ... aber : wenn du von dir behauptest du hättest Programmiererfahurng und dein Problem läge erstmal nur in Java , warum schreibst du dann die Aufgabe nich in der Sprache die du kannst , postest und das und wir versuchen dir dann anhand dieses Beispieles zu erklären wie die einzelnen Code-Zeilen nach Java zu portieren sind damit es funktioniert.

Nun zu dem was du gepostet hast :
Schön das du wenigstens schon mal das Char-Array von JPasswordField.getPassword() auffängst. Aber in der Zeile dadrunter machst du wieder genau den selben Fehler : du speicherst das return von String.valueOf(char[]) nirgends hin. Außerdem ist das die eher umständlichere Variante da es auch einen String-Konstruktor gibt der ein Char-Array erwartet. Also einfach

```
String password=new String(a.getPassword());
```
um das ganze gleich mal in eine Zeile zu stecken und dir mal wirklich die Zeile als Lösung zu geben ...
Und JETZT kannst du mit

```
if(b.equals(password))
```
vergleichen ob das eingegebene Passwort mit dem der "Kopierkarte" übereinstimmt.
Und wenn du jetzt immer noch Probleme hast dann sag deinem Lehrer bitte folgendes : dass du auf Tutorials.de im Java-Forum nach einer Lösung gefragt hast und nur noch entnervte Antworten bekommen hast weil du es einfach nicht verstanden hast und das er es dir erklären soll.
Am besten du druckst den gesamten Thread hier aus und legst es deinem Lehrer vor damit er genau sieht welche Fehler DU gemacht hast. Und hebe dabei am besten die beiden Textstellen "ich habe Programmiererfahrung" und "ich verstehe das was mein Lehrer mir beibrigen will nicht" deutlich hervor.
Auch von mir aus : das war jetzt der letzte scheinbar wieder vergebliche Hilfeversuch mit ZWEI fertigen Zeilen Code für die Passwortabfrage.
Und ich bitte dich HIER schon im vorraus : eröffne bitte KEINEN zweiten Thread wenn du endlich die Passwortabfrage hinbekommen hast da es weiterhin um das selbe Thema geht. Du wirst also mit der kommentarlosen Löschung eines zweiten Threads rechnen müssen.

PS : wenn ich mir schon das Chaos angucke einen String-Vergleich auf die Reihe zu bekommen möchte ich nicht wissen wie lang dieser Thread erst bei der Umsetzung der GUI-Änderungen wird.


----------

