Fenster Erweiterung/Sichtbar machen

Y-Style

Grünschnabel
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 :confused: ! ! !

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

Anhänge

Zuletzt bearbeitet:
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.
 
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.
 
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.:
Code:
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:
Code:
package paket_Kopierer;

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


mein Fenster:
Code:
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 :) .
 
Wieso hast du 2 Passwort Felder?
Java:
    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
Java:
                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
Java:
karte1.get...
Dann die beiden Strings vergleichen
 
Zuletzt bearbeitet:
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.
 
Java:
                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 ^^

wie soll ich des dann in einer variablen speichern?


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
 
Zuletzt bearbeitet:
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
 
ok ich jetzt ma alles gemacht das ich verstanden hab:

Code:
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?
 
Zuletzt bearbeitet:
Zurück