# Fenster Erweiterung/Sichtbar machen



## Y1Style (1. Mai 2011)

Hi ich hab ein Problem mit einer Aufgabe:

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 weiß nicht wie ich das mit der Erweiterung machen soll, kann mir einer da helfen?

Was ich bisher hab:

Die Klasse Kopierkarte:

```
package paket_Kopierer;
import javax.swing.JOptionPane;
public class Kopierkarte 
{
	private String pin;
	private double stand;
	
	public Kopierkarte()
	{
		pin="123";
		stand=100;
	}
	
	public void setPin(String pPin)
	{
		pin=pPin;
	}
	public String getPin()
	{
		return pin;
	}
	public void setStand(double pStand)
	{
		stand=pStand;
	}
	public double 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:


```
package paket_Kopierer;

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

Meine Fenster Klasse:


```
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()));
					zeigen();
				}
			});
		}
		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)
				{
					JPasswordField a = getPfPinNummer1();
					String b = karte1.getPin();
					char[] c= a.getPassword();
					String password=new String(a.getPassword());
					
					/*JTextField f= getTfKontostand();
					String.valueOf(f);
					double d=karte1.getStand();
					String.valueOf(d); */
					zeigen();
					if (b.equals(password))
					{
						zeigen();
					}
					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;
		
		
	}
	
	public void zeigen()
	{
		tfKontostand.setText(Double.toString(karte1.getStand()));
	}

}
```


----------



## Simon_Flagg (1. Mai 2011)

ich verstehe nicht genau, was du meinst.... du musst doch einfach nur die restlichen komponenten zum panel hinzufügen und ein invalidate drüber laufen lassen... oder hab ich da was falsch verstanden?


----------



## Y1Style (1. Mai 2011)

Simon_Flagg hat gesagt.:


> ich verstehe nicht genau, was du meinst.... du musst doch einfach nur die restlichen komponenten zum panel hinzufügen und ein invalidate drüber laufen lassen... oder hab ich da was falsch verstanden?



Ich möchte wissen, wie ich das hinkrieg nach der pw abfrage das Formular (im Anhang)

zu erweitern ( also aktueller Kontostand(Label)  +Textfeld +Anzahl Kopien (Label)+Textfeld und

Button Kopieren)

das problem deiner kurzen Antwort, was für komponenten meinst du und , ?invalidate? (hab ich bis jetzt nie gehört :bae: )


hoffe du verstehst jetzt meine Frage :applaus:


----------



## Simon_Flagg (1. Mai 2011)

naja, du nimmst dir ein Panel, wirfst dort die ganzen komponenten, die du dazufügen willst rein. Dieses Panel fügst du dann im ActionListnerer zur Contentpane dazu und rufst die Methoden invalidate und repaint (von JfRame) auf....


----------



## Y1Style (1. Mai 2011)

Simon_Flagg hat gesagt.:


> Dieses Panel fügst du dann im ActionListnerer zur Contentpane dazu und rufst die Methoden invalidate und repaint (von JfRame) auf....



ok, aber bei mir kann ich dem JPanel keinen ActionListener zufügen??

könntest du mir, zur verständins :rtfm: , erklären was was die methoden invalidate und repaint machen?

und warum kann ich des eig. nicht einfach mit ner If-Abfrage machen?


----------



## Simon_Flagg (1. Mai 2011)

ok... im Konstruktor fügst du wahrscheinlich div. components der contentPane deines JFrames zu, oder? das kannst du im Prinzip auch im ActionListener des Buttons tun.... also kannst du da ein Panel, dass du schon im Konstruktor erzeugt hast, der contentpane hinzufügen.... jetzt musst du nur noch invalidate aufrufen, damit der frame weiß: ja, bei meinen componenten ist was passiert, jetzt muss ich die aktualisieren... repaint zeichnet einfach alles neu (steht in der doku wahrscheinlich besser drinnen)

das mit der if-abfrage versteh ich nicht...


----------



## Y1Style (1. Mai 2011)

Simon_Flagg hat gesagt.:


> ok... im Konstruktor fügst du wahrscheinlich div. components der contentPane deines JFrames zu, oder? das kannst du im Prinzip auch im ActionListener des Buttons tun.... also kannst du da ein Panel, dass du schon im Konstruktor erzeugt hast, der contentpane hinzufügen....



???:L 

Im Konstruktor?

mein Konstruktor is aber :

```
public Fenster()
	{
		super();
		initialize();
		karte1=new Kopierkarte();		
	}
```

und von welchen button meinst du?
Könntest du aus meinem Code oben die stellen rausnehmen die du 
meinst und dann des etwas genauer erklären bitte?

Danke :toll:


So wie du es gesagt hast hab ich den Panel so:


```
private JPanel getPlErweiterung()
	{
		if (plErweiterung == null)
		{
			plErweiterung = new JPanel();
			plErweiterung.setLayout(null);
			plErweiterung.setBounds(new Rectangle(0, 85, 430, 120));
			plErweiterung.add(getBtKopieren(), null);
			plErweiterung.add(lbAnzahlKopien, null);
			plErweiterung.add(lbKontostand, null);
			plErweiterung.add(getTfKopien(), null);
			plErweiterung.add(getTfKontostand(), null);
			
			
		}
		return plErweiterung;
	}
```


----------



## Simon_Flagg (1. Mai 2011)

Tut mir leid, ich habe meine Kristallkugel heute leider vergessen...
Verrate mir mal bitte, wie ich aus deinem Code herauslesen soll, wo du etwas machst?????


----------



## Y1Style (1. Mai 2011)

Ich meine damit, dass du mir die einzelnen Stellen in meiner Fenster Klasse, zb bei meiner vorigen Antwort, rauskopierst und sagst : da musst du diese bestimmte Methode machen,
zb:

Hier hab ich die Komponenten in ein extra JPanel geschrieben.

```
private JPanel getPlErweiterung()
	{
		if (plErweiterung == null)
		{
			plErweiterung = new JPanel();
			plErweiterung.setLayout(null);
			plErweiterung.setBounds(new Rectangle(0, 85, 430, 120));
			plErweiterung.add(getBtKopieren(), null);
			plErweiterung.add(lbAnzahlKopien, null);
			plErweiterung.add(lbKontostand, null);
			plErweiterung.add(getTfKopien(), null);
			plErweiterung.add(getTfKontostand(), null);
			
			
		}
		return plErweiterung;
	}
```

Hier sollte ich nach dir : 





> Dieses Panel fügst du dann im ActionListnerer zur Contentpane dazu und rufst die Methoden invalidate und repaint (von JfRame) auf....



aber ich kann dem kein ActionListener vergeben... Hier komm ich nicht weiter, wie soll ich des dann nach deiner sicht machen?
oder kann mal vllt auch jmd anders hierauf antworten der meine formulierung versteht?


----------



## Simon_Flagg (2. Mai 2011)

im actionlistener von dem button Einblenden!

da steht dann etwa:
public actionPerformed(...) {
  this.getContentPane().add(getPanel()); //getPanel ist deine Methode
}

ein bisschen nachdenken könnte hilfreich sein

//Edit: Sehe gerade dass dir in einem anderen forum schon die ganze Lösung präsentiert worden ist... hast du eigentlich irgendetwas SELBST gemacht?:autsch:


----------



## Y1Style (2. Mai 2011)

Simon_Flagg hat gesagt.:


> //Edit: Sehe gerade dass dir in einem anderen forum schon die ganze Lösung präsentiert worden ist... hast du eigentlich irgendetwas SELBST gemacht?:autsch:



Ja, aber ich hab halt nicht immer schnell ne antwort bekommen da hab ich in mehreren foren nach n bisle Hilfe gefragt, doch die ganze Lösung hab ich nie verlang, da dies ne Präsentationsaufgabe werden soll, ich muss dann doch auch was selbst erklären 

Also Danke nochmals :applaus::toll:


----------

