G
Guest
Gast
Hallo!
Ich habe folgendes Problem bei einer JList.
Ich verwalte in einem ListModel so Info-Zeilen, die ich in einer JList anzeigen will. Für die Info-Zeilen hab ich eine Klasse Message geschrieben; das sind aber praktisch Strings. Wenn ich nun die JList zeichne, werden null-Messages in einer eigenen Zeile ausgegeben. Wie kann man das verhindern? Ich möchte also nur die Messages in der Liste anzeigen, nicht die nulls auch noch.
Hier noch mein Code. Zu erwähnen wäre noch, dass ich die Messages in einem Message-Array speichere, den ich als Ringbuffer verwende. Für mein ListModel hab ich auch wieder eine eigene Klasse, die AbstractListModel erweitert.
Die initView()-Methode meiner Gui-Klasse, in der ich die Liste anzeige:
Mfg,
Espiritu
Ich habe folgendes Problem bei einer JList.
Ich verwalte in einem ListModel so Info-Zeilen, die ich in einer JList anzeigen will. Für die Info-Zeilen hab ich eine Klasse Message geschrieben; das sind aber praktisch Strings. Wenn ich nun die JList zeichne, werden null-Messages in einer eigenen Zeile ausgegeben. Wie kann man das verhindern? Ich möchte also nur die Messages in der Liste anzeigen, nicht die nulls auch noch.
Hier noch mein Code. Zu erwähnen wäre noch, dass ich die Messages in einem Message-Array speichere, den ich als Ringbuffer verwende. Für mein ListModel hab ich auch wieder eine eigene Klasse, die AbstractListModel erweitert.
Code:
public class InfoData extends AbstractListModel
{
/**
* Nachrichten-Buffer.
*/
private Message[] buffer;
/**
* Aktuelle Schreibposition im Buffer.
*/
private int currPos;
/**
* Standardgröße des Buffers.
*/
private static final int STD_BUFFER_SIZE = 100;
/**************************************************************************/
/**
* Standard-Konstruktor
*/
public ServerInfoData()
{
super();
currPos = 0;
buffer = new Message[ServerInfoData.STD_BUFFER_SIZE];
} //Konstruktor
/**
* Liefert die Buffergröße zurück.
*
* @return Buffergröße
*/
public int getSize()
{
return buffer.length;
} //getSize()
/**
* Setzt die Buffergröße. Der Buffer wird dabei entsprechend vergrößert oder
* verkleinert. Falls die neue Buffergröße kleiner als die Anzahl der
* gespeicherten Nachrichten ist, werden die "ältesten" Nachrichten verworfen.
*
* @param bufferSize neue Buffergröße
*
*/
public void setSize(int bufferSize)
{
... //nicht wichtig für meine Frage
} //setSize()
/**
* Liefert die Nachricht an der übergebenen Position zurück.
*
* @param index Die gesuchte Position
*
* @return Die Nachricht an der Position index
*
*/
public Object getElementAt(int index)
{
if (index >= 0 && index < buffer.length && buffer[index] != null)
{
//index ist gültig und buffer ist an dieser Stelle nicht leer
return buffer[index];
}
else
return null;
} //getElementAt()
/**
* add fügt eine neue Nachricht in den Buffer ein. Falls der Buffer voll ist,
* wird die älteste Nachricht überschrieben.
*
* @param msg hinzuzufügende Nachricht
*
*/
public void add(Message msg)
{
buffer[currPos] = msg;
currPos++;
//wenn currPos über das Ende des Arrays hinaus ist, wieder vorne (bei 0) beginnen
if (currPos == buffer.length)
{
currPos = 0;
}
} //add()
public String toString()
{
//...
} //toString()
} //class ServerInfoData
Die initView()-Methode meiner Gui-Klasse, in der ich die Liste anzeige:
Code:
/**
* initView initialisiert die Gui
*/
private void initView()
{
//...
//this.setBorder(new LineBorder(new Color(0, 0, 0)));
//Nachrichten-Liste
JList lstInfos = new JList(model.getData()); //model.getData() liefert Instanz von obigem AbstractListModel zurück
// lstInfos.setEnabled(false);
//Liste scrollbar machen
JScrollPane spInfos = new JScrollPane(lstInfos);
spInfos.setPreferredSize(new Dimension(190, 85));
this.add(spInfos);
//...
} //initView()
Mfg,
Espiritu