Entfernen von Textfeldern

Status
Nicht offen für weitere Antworten.

ru49

Mitglied
Ich habe eine Panel programmiert, dass auf Knopfdruck eine neues Panel erzeugt und hinzufügt oder löscht!
Das Hinzufügen klappt wunderbar, aber beim Löschen wird das letzte MitgliederPanel zwar gelöscht, aber man sieht die Textfelder weiter, nur halb hinter dem ersten versteckt, obwahl ich alles neuzeichnen lasse.
Wie kann ich dies beheben?
Hier ist meine Methode actionPerformed:
abfrage ist ein JPanel. MitgliederPanel beschreibt ein vorgefertigtes Jpanel.
Code:
public void actionPerformed(ActionEvent e){
		if(e.getSource()==addYear){
			MitgliederPanel a=new MitgliederPanel(numAlters);
			abfrage.add(a);
			numData++;
			revalidate();
		}
		if(e.getSource()==delYear){
			if(abfrage.getComponentCount()>1){
				abfrage.remove(abfrage.getComponentCount()-1);
				numData=Math.max(1,numData-1);
				revalidate();
			}
		}
	}
[/code]
 
Ich will was dynmisches haben! Ich will Mitgliederzahlen von Altersgruppen eines Sportvereins über mehrere Jahre!
Ich will dem Benutzer aber offen lassen, wie viel Jahre er eingeben will Deshalb ist bei Start des Programmes erst mal eine Altersgruppe vorhanden!
Es gibt aber zwei Button "Jahr hinzufügen" und "Jahr löschen" an dem Button ist ein ActionListener. Ich will also in dem JPanel bleiben nur es sollen ein paar Komponenten hinzugefügt oder entfernt werden.
Hier mal der komplette Code:

Code:
public class AbfragePanel2 extends JPanel implements ActionListener{
//	Button um ein Jahr hinzu zu fügen
	JButton addYear;
	//Button um ein Jahr zu löschen
	JButton delYear;
	//Panel, welches die Button enthält
	JPanel buttonPanel;
	//Panel, welches die GrenzPanel enthält
	JPanel abfrage;
	JScrollPane scroll;
	int numData=2;
	int numAlters;
	public AbfragePanel2(int numAlters){
		this.numAlters=numAlters;
		//Setzen des Layoutmanagers
		setLayout(new BorderLayout());
		//Initialisieren von buttonPanel
		buttonPanel=new JPanel();
		buttonPanel.setLayout(new FlowLayout());
		//Initialisieren und Setzen der Button
		addYear=new JButton("Jahr hinzufügen");
		addYear.addActionListener(this);
		buttonPanel.add(addYear);
		delYear=new JButton("Jahr löschen");
		delYear.addActionListener(this);
		buttonPanel.add(BorderLayout.NORTH,delYear);
		//hinzufügen von buttonPanel in den oberen Teil des AbfragePanels
		add(BorderLayout.NORTH,buttonPanel);
		//Initialisieren von abfrage
		abfrage=new JPanel();
		abfrage.setLayout(new FlowLayout());
		//hinzufügen des ersten MitgliederPanels
		abfrage.add(new MitgliederPanel(numAlters));
		//Initialisieren und hinzufügen von scroll
		scroll =new JScrollPane(abfrage);
		scroll.createHorizontalScrollBar();
		add(BorderLayout.CENTER,scroll);
	}
	//Methode, die bestimmt, was gemacht wird, wenn ich einen Button drücke 
	public void actionPerformed(ActionEvent e){
		//Wenn der Knopf addAlters gedrückt wurde, füge ich ein neues GrenzPanel hinzu
		if(e.getSource()==addYear){
			MitgliederPanel a=new MitgliederPanel(numAlters);
			abfrage.add(a);
			numData++;
			revalidate();
		}
		//Wenn der Knopf delAlters gedrückt wurde, lösch das letzte GrenzPanel
		//Das erste GrenzPanel darf nicht gelöscht werden,
		//da es mindestens eine Altersgruppe geben muss
		if(e.getSource()==delYear){
			if(abfrage.getComponentCount()>1){
				abfrage.remove(abfrage.getComponentCount()-1);
				System.out.println(abfrage.getComponentCount());
				numData=Math.max(1,numData-1);
				revalidate();
			}
		}
	}
	
	public static void main(String[] args){
		JFrame frame = new JFrame("Golftool");
		AbfragePanel2 panel = new AbfragePanel2(3);
		
		
		frame.setForeground(Color.black);
		frame.setBackground(Color.lightGray);
		frame.addWindowListener(new WindowCloser());
		frame.getContentPane().add(panel,"Center");
		frame.setSize(500,500);
		frame.show();
		}
}
public class MitgliederPanel extends JPanel{
	//Array von Textfeldern,
	//mit denen ich für jede Altersgruppe die Mitgliederzahlen für ein Jahr einlese
	JTextField[]alters;
	//Text feld zum Einlesen des Jahres
	JTextField jahr;
	
	public MitgliederPanel(int numAlters){
		//Setzen des Layoutmangers
		GridLayout layout=new GridLayout(0,1);
		setLayout(layout);
		//Initialisieren und Hinzufügen von jahr 
		jahr=new JTextField("",4);
		add(jahr);
		//Label als Abstandshalter
		add(new JLabel(""));
		//Initialisieren und Hinzufügen von alters
		alters=new JTextField[numAlters];
		for(int i=0;i<numAlters;i++){
			alters[i]=new JTextField("",5);
			add(alters[i]);
		}
	}
}
[/code]
 
Das Problem ist beim Löschen des Jahres
Die Komponente ist zwar nicht mehr da, aber sie ist optisch nicht ganz verschwunden. Optisch ist sie nur verschoben. Sie schiebt sich halb hinter der Komponente, die links von ihr ist!
Ich hab keine Ahnung voran das liegt!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben