Buttons auf dem JEditorPane lassen sich nicht richtig löschen

Lautsprecher

Erfahrenes Mitglied
Hallo ich habe folgendes Pane angelegt:

Code:
private JEditorPane getJEditorPane2() 
	{
		if (jEditorPane2 == null) 
		{
		jEditorPane2 = new JEditorPane();
		jEditorPane2.setBounds(new java.awt.Rectangle(24,89,966,428));
		   jEditorPane2.setLayout(new GridLayout(9,0));
		    jEditorPane2.setBackground(new java.awt.Color(219,220,221));
		    jEditorPane2.setEnabled(false);
	   		    
		}
		return jEditorPane2;
	}

Auf diesen Pane möchte ich Buttons mit bestimmten Texten anlegen. Die Bezeichnung der Texte lese ich aus einer Datenbank aus. Mein Problem ist, dass die Anzahl der Bezeichnungen in der Datenbank schwankt. D.h. Habe ich 20 Texte möchte ich 20 Buttons auf dem Pane. Bei 30 Texten, brauche ich auch 30 Buttons.
Mein Problem ist, wenn ich z.B. 20 Buttons auf dem Pane habe, die Datenbank dann neu auslese und jetzt z.B. nur noch 18 Einträge in der Datenbank stehen, dann bleiben 19 Buttons auf dem Pane stehen, wobei der 18. und 19. Button dann doppelt beschriftet sind.

Hier die Methode mit der ich den Buttons anlege:

Mit removeAll() versuche ich zuerst das ganze Pane zu "entleeren", aber irgendwie scheit dies nicht zu klappen.

Die Methode button_fill() steuere ich über eine ComboBox an, in dem ich einen bestimmten Eintrag selektiere.


Code:
private void button_fill()
 {
	 jEditorPane2.removeAll();	
if( null != sDbDrv && 0 < sDbDrv.length() &&null != sDbUrl && 0 < sDbUrl.length() &&   null != sTable && 0 < sTable.length() ) 
{
	try 
	{
	// Select fitting database driver and connect:
	Class.forName( sDbDrv );
	cn = DriverManager.getConnection( sDbUrl, sUsr, sPwd );
	}
	catch( Exception ex ) 
	{
	}
}//end if (null !=)
	try
    	{
				
	String SQLDaten = null;
	SQLDaten = baureihe_arbeitssation + "_Fehlerdef";
	st = cn.createStatement();
rs = st.executeQuery("SELECT Fehlercode, Fehlerbeschreibung FROM " + SQLDaten + " where aktiv = '1' order by TOP_12");	    		
		    		
	String fc_fb = null;
	Integer i = null;
	int y = 0;

	while(rs.next())
	{
	

                 //Hier werden die Texte aus der Datenbank ausgelesen
                 fc_fb = rs.getString("Fehlercode") + "-" + rs.getString("Fehlerbeschreibung");
	if (fc_fb != null)
	y = y + 1;
	if (y <= 36)
	{
	   JButton button = new JButton("button"+y);
                  button.setActionCommand(fc_fb);
                  button.setText(fc_fb); 
                  button.addActionListener(new java.awt.event.ActionListener() 
	{		    						public void actionPerformed(java.awt.event.ActionEvent e)
	{

	       if(e.getActionCommand().equals(e.getActionCommand()));
	       {	
			    						              try
		{
	                 								.......... hier lese ich z.B. den Text wieder in eine jList ein			}
										catch(Exception a)
		{
			    							a.printStackTrace();
			    							}
			    						     }
	 								}
              });	
					
    jEditorPane2.add(button);
			    			   
}//ende if
}//ende while

Wäre super wenn jemand schon mal ein ähnliches Problem hatte und einen Lösungsansatz weiß

Grüße
 
Bei solchen Problemen hilft eigentlich:
Code:
myPanel.removeAll();
 
myPanel.invalidate(); // ungültig
myPanel.validate(); // wieder gültig
 
myPanel.add(...);
 
myPanel.repaint(); // neu zeichnen
 
Hallo schnuffie,
danke Dir hat wunderbar geklappt. Ich habe gestern den ganzen Nachmittag "rumgedoktert" und bin auf keinen grünen Zweig gekommen.
Und jetzt funktioniert es mit 4 "kleinen Befehlen"

Super!
 
Zurück