# Fenster über Konstruktor neu laden?



## Floppy (13. Jan 2005)

Mein Ziel ist es, einen kleinen RSS-Reader zu bauen.
Das habe ich so weit auch hinbekommen, allerdings nur für die Konsole.
Nun möchte ich die ganze Geschichte gerne in einem Fenster laufen lassen.
Hier mal mein Code:

```
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Vector;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class RSSReader extends JFrame implements ActionListener{
	//RSS-Datei
    public static String rssFeed = "http://www.golem.de/rss.php?feed=RSS2.0";
    
    Container c;
    JTextField urleingabe;
    
    //Konstruktor
    public RSSReader() {
    	c = getContentPane();
    	
    	try {
    	    RSSDocument rss = new RSSDocument();
    	    URL rssUrl;
            rssUrl = new URL(RSSReader.rssFeed);
            rss.loadDocument(rssUrl);
            Vector items = rss.getRssItems();
            
            c.setLayout( new GridLayout( (items.size() + 2), 1, 1, 1 ) );
            
        	JPanel url = new JPanel( new FlowLayout(FlowLayout.RIGHT) );
            JLabel urlbeschriftung = new JLabel("URL: ");
            urleingabe = new JTextField("http://", 20);
            urleingabe.setCaretPosition( urleingabe.getText().length() );
            JButton urlgo = new JButton("Go");
            urlgo.addActionListener(this);
            urlgo.setActionCommand("go");
            
            url.add(urlbeschriftung);
            url.add(urleingabe);
            url.add(urlgo);
            c.add(url);
        	
        	JPanel infos = new JPanel();
            JLabel anbieter = new JLabel(rss.getTitle() + " -");
            JLabel beschreibung = new JLabel(rss.getDescription());
            
            infos.add(anbieter);
            infos.add(beschreibung);
            c.add(infos);
            
        	JLabel nr[] = new JLabel[items.size()];
            JLabel topic[] = new JLabel[items.size()];
            JPanel panel[] = new JPanel[items.size()];
            
            for (int i = 0; i < 20; ++i) {
                RSSItem ri = (RSSItem) items.get(i);
                    
                if ( i < 9 ) {
                  	nr[i] = new JLabel( "Nr. 0" + (i + 1) + "     ");
                }
                else {
                   	nr[i] = new JLabel( "Nr. " + (i + 1) + "     ");
                }
            
                topic[i] = new JLabel( ri.getTitel() );
                panel[i] = new JPanel(new FlowLayout(FlowLayout.LEFT));
                    
                panel[i].add(nr[i]);
                panel[i].add(topic[i]);
                c.add(panel[i]);
            }
    	}
        catch (MalformedURLException e) {
        	System.out.println("URL ist nicht korrekt!");
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    
    public static void main(String[] args) {
    	RSSReader reader = new RSSReader();
    	reader.setSize(600, 750);
    	reader.setTitle("RSS Reader");
    	reader.setResizable(false);
    	reader.setVisible(true);
	reader.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
    
    
    public void actionPerformed(ActionEvent e) {
		if ( e.getActionCommand() == "go" ) {
			String newurl = urleingabe.getText();
			rssFeed = newurl;
		}
	}
}
```

Starte ich das Programm, holt er sich die Überschriften von Golem.de aus der RSS-Datei und zeigt sie im Fenster an.
Nun würde ich es gerne hinbekommen, dass wenn man in das JTextField eine neue URL zu einer RSS_Datei eingibt, diese dann im Fenster angezeigt wird.

Mein Plan war folgender:  wenn ich den Button Drücke, liest der ActionListener den Text aus dem Textfield und schreibt ihn in die Klassen-Variable.
Nun wird der Konstruktor neu aufgerufen und damit die Überschriften erneuert.

Völliger Schwachsinn oder möglich?
Egal ob möglich oder nicht, ich wäre für jede Hilfe dankbar!


----------



## foobar (13. Jan 2005)

Du mußt erstmal etwas Ordnung in den Code bringen, sonst wird das nichts. Ich hab den Code mal etwas überarbeitet, damit du siehst in Welche Richtung es gehen soll:

```
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import java.awt.Container;
import java.awt.event.*;
import javax.swing.*;


public class RssReader extends JFrame implements ActionListener{
   //RSS-Datei
    public static String rssFeed = "http://www.golem.de/rss.php?feed=RSS2.0";
   
    private Container c;
    private JTextField urleingabe;
    private JLabel anbieter, beschreibung;
    private JPanel infos;
    private JLabel[] nr, topic;
    private JPanel[] panel;
   
    //Konstruktor
    public RssReader() 
    {
        List items = this.getRssData( RssReader.rssFeed );
        this.createGUI( items );
        this.showRssData( items );
    }
   
     private List getRssData(String url)
     {
        RSSDocument rss = new RSSDocument();
        URL rssUrl      = new URL( url );
        rss.loadDocument(rssUrl);
        return rss.getRssItems();
     }
    
     private void createGUI(List items)
     {
         this.c = getContentPane();
         this.c.setLayout( new GridLayout( (items.size() + 2), 1, 1, 1 ) );
         
          JPanel url = new JPanel( new FlowLayout(FlowLayout.RIGHT) );
          JLabel urlbeschriftung = new JLabel("URL: ");
          urleingabe = new JTextField("http://", 20);
          urleingabe.setCaretPosition( urleingabe.getText().length() );
          JButton urlgo = new JButton("Go");
          urlgo.addActionListener(this);
          urlgo.setActionCommand("go");
         
          url.add(urlbeschriftung);
          url.add(urleingabe);
          url.add(urlgo);
          this.c.add(url);
          
          infos = new JPanel();
          anbieter = new JLabel(rss.getTitle() + " -");
          beschreibung = new JLabel(rss.getDescription());
          
          infos.add(anbieter);
          infos.add(beschreibung);
          this.c.add(infos);
          
          nr       = new JLabel[items.size()];
          topic    = new JLabel[items.size()];
          panel    = new JPanel[items.size()];
          
     }
     
     private void showRssData(List items)
     {
         try 
         {
             for (int i = 0; i < 20; ++i) 
             {
                 RSSItem ri = (RSSItem) items.get(i);
                    
                 if ( i < 9 ) 
                 {
                      nr[i] = new JLabel( "Nr. 0" + (i + 1) + "     ");
                 }
                 else 
                 {
                       nr[i] = new JLabel( "Nr. " + (i + 1) + "     ");
                 }
            
                 topic[i] = new JLabel( ri.getTitel() );
                 panel[i] = new JPanel(new FlowLayout(FlowLayout.LEFT));
                    
                 panel[i].add(nr[i]);
                 panel[i].add(topic[i]);
                 c.add(panel[i]);
             }
        }
         catch (MalformedURLException e) 
         {
            System.out.println("URL ist nicht korrekt!");
             e.printStackTrace();
         }
         catch (IOException e) 
         {
             e.printStackTrace();
         }
     }
     
     
    public static void main(String[] args) 
    {
       RssReader reader = new RssReader();
       reader.setSize(600, 750);
       reader.setTitle("RSS Reader");
       reader.setResizable(false);
       reader.setVisible(true);
        reader.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
   
   
    public void actionPerformed(ActionEvent e) 
    {
      if ( e.getActionCommand() == "go" ) 
      {
         String newurl = urleingabe.getText();
         rssFeed = newurl;
      }
   }
}
```


----------



## Guest (13. Jan 2005)

Erstmal danke, das sieht wirklich besser aus :toll: 
Hab nun aber folgende Fehler:

```
URL rssUrl      = new URL(url);
rss.loadDocument(rssUrl);
```
-> Unhandled exception type MalformedURLException



```
anbieter = new JLabel(rss.getTitle() + " -");
beschreibung = new JLabel(rss.getDescription());
```
-> rss cannot be resolved



```
catch (MalformedURLException e)
catch (IOException e)
```
-> Unreachable Catchblock


----------



## foobar (13. Jan 2005)

Da mir ein paar Klassen fehlen, konnte ich den Code nicht vollständig überarbeiten. 



> -> Unhandled exception type MalformedURLException


Du mußt einen Try-Catch-Block aufstellen.



> -> Unreachable Catchblock


Die Catcher für die IOException ist obsolet.



> rss cannot be resolved


Entweder rss als Member deklarieren oder an die Methode übergeben.


----------



## Floppy (13. Jan 2005)

Ich hab mal alle Klassen hier hingepackt:
http://www.flo-ppy.de/RSS.zip

Ich blicke irgendwie nicht durch, wäre super, wenn du helfen könntest.


----------



## foobar (13. Jan 2005)

Hier ist eine funktionsfähige Version, aber das mit den Labels ist nicht so toll. Besser wäre es die Daten in einem JTable darzustellen:

```
package rss;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class RssReader extends JFrame implements ActionListener
{
   //RSS-Datei
    public static String rssFeed = "http://www.golem.de/rss.php?feed=RSS2.0";
   
    private Container c;
    private JTextField urleingabe;
    private JLabel anbieter, beschreibung;
    private JPanel infos;
    private JLabel[] nr, topic;
    private JPanel[] panel;
   
    //Konstruktor
    public RssReader() 
    {
        RSSDocument rss = this.getRssData( RssReader.rssFeed );
        this.createGUI( rss );
        this.showRssData( rss.getRssItems() );
    }
   
    
     private RSSDocument getRssData(String url)
     {
        RSSDocument rss = new RSSDocument();
        try
        {
            URL rssUrl = new URL(url);
            rss.loadDocument(rssUrl);
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return rss;
     }
    
     private void createGUI(RSSDocument rss)
     {
         this.setSize(600, 750);
         this.setTitle("RSS Reader");
         this.setResizable(false);
         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         List items = rss.getRssItems();
         this.c = getContentPane();
         this.c.setLayout( new GridLayout( (items.size() + 2), 1, 1, 1 ) );
         
          JPanel url = new JPanel( new FlowLayout(FlowLayout.RIGHT) );
          JLabel urlbeschriftung = new JLabel("URL: ");
          urleingabe = new JTextField("http://", 20);
          urleingabe.setCaretPosition( urleingabe.getText().length() );
          JButton urlgo = new JButton("Go");
          urlgo.addActionListener(this);
          urlgo.setActionCommand("go");
         
          url.add(urlbeschriftung);
          url.add(urleingabe);
          url.add(urlgo);
          this.c.add(url);
          
          infos = new JPanel();
          anbieter = new JLabel(rss.getTitle() + " -");
          beschreibung = new JLabel(rss.getDescription());
          
          infos.add(anbieter);
          infos.add(beschreibung);
          this.c.add(infos);
          
          nr       = new JLabel[items.size()];
          topic    = new JLabel[items.size()];
          panel    = new JPanel[items.size()];
          
          this.setVisible(true);
          
     }
     
     private void showRssData(List items)
     {
       for (int i = 0; i < 20; ++i) 
       {
          RSSItem ri = (RSSItem) items.get(i);
                   
          if ( i < 9 ) 
          {
             nr[i] = new JLabel( "Nr. 0" + (i + 1) + "     ");
          }
          else 
          {
            nr[i] = new JLabel( "Nr. " + (i + 1) + "     ");
          }
            
          topic[i] = new JLabel( ri.getTitel() );
          panel[i] = new JPanel(new FlowLayout(FlowLayout.LEFT));
                   
          panel[i].add(nr[i]);
          panel[i].add(topic[i]);
          c.add(panel[i]);
       }
     }
     
     
    public static void main(String[] args) 
    {
       new RssReader();
    }
   
    public void actionPerformed(ActionEvent e) 
    {
      if ( e.getActionCommand() == "go" ) 
      {
         String newurl = urleingabe.getText();
         rssFeed = newurl;
      }
   }
}
```

P.S. Alle Klassen müssen sich in dem Package rss befinden.


----------



## foobar (13. Jan 2005)

So ich habe das Programm noch mal überarbeitet und die JLabels durch einen JTable ersetzt.


```
package rss;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;


public class RssReader extends JFrame implements ActionListener
{
   //RSS-Datei
    public static String rssFeed = "http://www.golem.de/rss.php?feed=RSS2.0";
   
    private Container c;
    private JTextField urleingabe;
    private JLabel anbieter, beschreibung;
    private JTable tblRssItems; 
    
    //Konstruktor
    public RssReader() 
    {
        RSSDocument rss = this.getRssData( RssReader.rssFeed );
        this.createGUI( rss );
    }
   
    
     private RSSDocument getRssData(String url)
     {
        RSSDocument rss = new RSSDocument();
        try
        {
            URL rssUrl = new URL(url);
            rss.loadDocument(rssUrl);
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return rss;
     }
    
     private void createGUI(RSSDocument rss)
     {
         this.setSize(600, 750);
         this.setTitle("RSS Reader");
         this.setResizable(false);
         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         List items = rss.getRssItems();
         this.c = getContentPane();
         this.c.setLayout( new BorderLayout() );
         
          JPanel url = new JPanel( new FlowLayout(FlowLayout.RIGHT) );
          JLabel urlbeschriftung = new JLabel("URL: ");
          urleingabe = new JTextField("http://", 20);
          urleingabe.setCaretPosition( urleingabe.getText().length() );
          JButton urlgo = new JButton("Go");
          urlgo.addActionListener(this);
          urlgo.setActionCommand("go");
         
          url.add(urlbeschriftung);
          url.add(urleingabe);
          url.add(urlgo);
          this.c.add(url);
          
        
          anbieter = new JLabel(rss.getTitle() + " -");
          beschreibung = new JLabel(rss.getDescription());
        
          this.tblRssItems = new JTable( new RssItemTableModel( items ));
          this.c.add(new JScrollPane( this.tblRssItems), BorderLayout.CENTER);
         this.setVisible(true);
          
     }

    public static void main(String[] args) 
    {
       new RssReader();
    }
   
    public void actionPerformed(ActionEvent e) 
    {
      if ( e.getActionCommand() == "go" ) 
      {
         String newurl = urleingabe.getText();
         
         RSSDocument rss = this.getRssData( newurl );
         ((RssItemTableModel)this.tblRssItems.getModel()).refreshTable( rss.getRssItems() );
      }
   }
}


package rss;

import java.io.IOException;
import java.net.*;
import java.util.Vector;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
/**
 * Die Klasse repräsentiert eine RSS-Datei.
 */


public class RSSDocument
{
    /**
     * Variable zur Speicherung des Titels
     */
    private StringBuffer title = new StringBuffer();
    
    /**
     * Variable zur Speicherung der Beschreibung
     */
    private StringBuffer description = new StringBuffer();
    
    /**
     * Variable zur Speicherung der @see RSSItem Objekte
     */
    private Vector items = new Vector();

    /**
     * Lädt die durch die URL angegebene RSS-Datei in das <code> RSSDocument </code> Objekt
     * @param url <code>URL</code> Objekt das auf die RSS-Datei zeigt
     */
    public void loadDocument(URL url) throws IOException
    {
        try
        {
	        XMLReader myReader = XMLReaderFactory.createXMLReader();
	        myReader.setContentHandler(new RSSDocumentHandler(this));
	        myReader.parse  ( new InputSource(url.openStream()));
        }
        catch (SAXException saxe)
        {
            throw new IOException(saxe.getMessage());
        }

    }

    /**
     * Gibt den Titel des Dokuments zurück
     * @return Titel des Dokuments
     */
    public String getTitle()
    {
        
        return title.toString();
    }

    /**
     * Gibt die Beschreibung des Dokuments zurück
     * @return Beschreibung des Dokumentes
     */
    public String getDescription()
    {
       
        return description.toString();
    }

    /**
     * Gibt den Vector mit den <code>RSSItem</code> Objekten zurück
     * @return Vector mit den  <code>RSSItem</code> Objekten
     * 
     * @see RSSItem
     * RSSItem
     */
    public Vector getRssItems()
    {
       
        return items;
    }


}




package rss;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;

/**
 * Die Klasse <code>RSSDocumentHandler</code> erweitert die Klasse <code>DefaultHandler</code>
 * und implementiert somit die Interfaces <code>EntityResolver</code>, <code>DTDHandler</code>
 * , <code>ContentHandler</code>, <code>ErrorHandler</code>
 * @see org.xml.sax.EntityResolver
 * @see org.xml.sax.DTDHandler
 * @see org.xml.sax.ContentHandler
 * @see org.xml.sax.ErrorHandler
 */
public class RSSDocumentHandler extends DefaultHandler
{
    private RSSDocument myDoc;

    private RSSItem actItem = null;

    private boolean setString = false;

    private boolean ignore = false;

    private boolean isItem = false;
    
    private boolean isLink = false;

    private String elementToIgnore;

    private StringBuffer stringToSet;

    /**
     * Erzeugt einen neuen <code>RSSDocumentHandler</code>
     * @param _myDoc
     * Das <code>RSSDocument</code> das gefüllt werden soll
     * @see RSSDocument
     * @see RSSDocumentHandler
     */
    
    public RSSDocumentHandler(RSSDocument _myDoc)
    {
        myDoc = _myDoc;
        this.stringToSet = new StringBuffer();
    }


    /**
     * Callback Funktion des XMLReaders, die immer dann aufgerufen wird, wenn Zeichen (nicht Tag)
     * im XML Dokument auftreten
     * @param ch
     * Array mit Zeichen
     * @param offset
     * Start der Zeichenfolge
     * @param length
     * Länge der Zeichenfolge
     */
    public void characters(char[] ch, int offset, int length)
    {
        if (setString && !ignore)
        {
             
             System.out.println("characters >> " + new String (ch,offset,length));
             if (isLink)
             {
                 actItem.setLink( new String (ch,offset,length) );
             }
             //else actItem.setTitle( new String (ch,offset,length) );
        }
        setString = false;
    }

    /**
     * Callback Funktion des XMLReaders, die immer dann aufgerufen wird, wenn ein Element endet
     * @param  namespaceURI
     * Der Namespace (wird hier nicht benutzt)
     * @param localName
     * Der lokale Name des Elements
     * @param qName
     * Der qualifizierte Name (wird hier nicht benutzt)
     */
    public void endElement(String namespaceURI, String localName, String qName)
    {
        if (ignore && elementToIgnore.equals( localName))
        {
            ignore = false;
        }
        if (actItem != null && localName.equals( "item"))
        {
            myDoc.getRssItems().add(actItem);
        }
        setString = false;
     }

    /**
     * Callback Funktion des XMLReaders, die immer dann aufgerufen wird, wenn ein Element beginnt
     * @param  namespaceURI
     * Der Namespace (wird hier nicht benutzt)
     * @param localName
     * Der lokale Name des Elements
     * @param qName
     * Der qualifizierte Name (wird hier nicht benutzt)
     * @param atts
     * Attribute des Elements
     */
    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) 
    {

        System.out.println("localName >>" +localName + "qname " + qName);
        if(localName.equals("title") )
        {
            setString = true;
            if (!isItem)
            {
	            stringToSet.append(myDoc.getTitle());
            }
            else
            {
                isLink = false;
            }
        }
        else if(localName.equals("link"))
        {
            if (isItem)
            {
	            setString = true;
	        	isLink    = true;
            }
        }
        else if (localName.equals("description"))
        {
            if (! isItem)
            {
	            setString = true;
	        	stringToSet.append( myDoc.getDescription() );
            }
        }
        else if (localName.equals("image"))
        {
            ignore = true;
        	elementToIgnore = localName;
        }
        else if (localName.equals("item"))
        {
            isItem = true;
        	actItem = new RSSItem();
        }	       	
    }
}




package rss;
import java.net.URL;

/**
 * Die Klasse <code>RSSItem</code> repräsentiert eine Nachricht eines <code>RSSDocument</code>
 */
public class RSSItem
{
    /**
     * Variable zur Speicherung des Link zu der Nachricht
     */
    private String link;
    /**
     * Variable zur Speicherung des Titels der Nachricht
     */
    private String title;
    /**
     * Gibt die URL zu der Nachricht zurück
     * 
     */
    public URL getLink()
    {
        try
        {
            return new URL(link);
        }
        catch (Exception e)
        {
            System.out.println("url falsch >>" + link +"<<");
            return null;
        }
    }

    /**
     * Gibt den Titel der Nachricht zurück 
     */
    public String getTitel()
    {
        return title;
    }

    public void setLink(String link)
    {
        this.link = link;
    }
    
    public void setTitle(String title)
    {
        this.title = title;
    }
}





package rss;

import java.util.List;

import javax.swing.table.AbstractTableModel;

public class RssItemTableModel extends AbstractTableModel
{
    private List items;
    public RssItemTableModel(List items)
    {
        this.items = items;
    }
    
    public int getRowCount()
    {
        return this.items.size();
    }
    
    public int getColumnCount()
    {
       return 2;
    }
    
    public Object getValueAt(int rowIndex, int columnIndex)
    {
       switch(columnIndex)
       {
           case 0: return ((RSSItem)this.items.get( rowIndex )).getTitel();
           case 1: return ((RSSItem)this.items.get( rowIndex )).getLink();
       }
       return null;
    }
    
    
    public void refreshTable(List newData)
    {
        this.items = newData;
        this.fireTableDataChanged();
    }
}
```

Es sieht zwar immer noch aus wie Sau, aber es ist ein Anfang.


----------



## Floppy (14. Jan 2005)

Erstmal vielen Dank!!!

Auch wenn das mit den Panels Mist ist, ist es mir die liebere Variante, da ich da eher durchsteige als bei den JTables. Mit denen habe ich nämlich noch nie was gemacht.
Problem an der Panel-Version ist jetzt, dass er mir gar keinen Feed mir anzeigt. Auch die Eingabe einer URL in das TextField und anschließendes drücken des Go-Buttons bewirkt nichts.

Was mache ich falsch?


----------



## foobar (14. Jan 2005)

Bei mir lief die Version mit den Panels gestern. 
Du solltest bei der Version aber unbedingt die Daten besser kapseln, ansonsten kommst du in Teufels Küche. Vielleicht ist der Fehler darauf zurück zu führen.


----------



## Floppy (24. Jan 2005)

Jetzt funktioniert das Programm wieder, aber leider schaffe ich es einfach nicht, dass wenn man im TextField eine neue, gültige Feed-URL eingibt, die neuen Headlines angezeigt werden...

Hatte mir das so gedacht:

```
public void actionPerformed(ActionEvent e)
    {
    	//Button "Go" wurde gedrückt
    	if ( e.getActionCommand() == "go" )
    	{
    		String url = urleingabe.getText();
    		RSSDocument rss = getRssData(url);
    		createGUI(rss);
            showRssData( rss.getRssItems() );
            repaint();
    	}
    }
```
Rufe also nochmal die gleichen Funktionen wie im Konstruktor auf und dann repaint.
Leider bringt das auch keinen Erfolg.

Wäre super genial, wenn mir nochmal jemand helfen könnte.


----------



## Floppy (25. Jan 2005)

Hab es dann doch noch gelöst bekommen:
erst die Panels alle entfernen, neu anlegen und dann repaint();

Vielen Dank für deine Hilfe foobar  :toll:


----------



## foobar (25. Jan 2005)

> Hab es dann doch noch gelöst bekommen:
> erst die Panels alle entfernen, neu anlegen und dann repaint();


Das ist aber nicht im Sinne des Erfinders.



> Vielen Dank für deine Hilfe foobar


Kein Problem


----------

