Re: how to delete a JList element
On Jun 21, 5:08 pm, Roedy Green <see_webs...@mindprod.com.invalid>
wrote:
[...]
The trick is to use values() or keySet() to get a Collection then use
toArray()
[...]
Right, in my GUI:
guestJList.setModel(BedAndBreakfast.getInstance().listModel);
//BedAndBreakfast is the "database"
and then in BedAndBreakfast:
/*@see GUI
*this method makes the DefaultListModel match the
*HashMap which stores the data.
*ideally, this method shouldn't be required.
*I'm not quite sure why, but without it
*nothing synchronizes with the JList.setModel
*in the GUI*/
public void sync()
{
listModel.clear();
Collection<?> foos = getGuests();
for (Object obj : foos)
{listModel.addElement(obj);}
}
to try to "sync" up the Map with the ListModel because every example I
see imbeds the data in with the JList, which is what I think I'm going
to do.
Sending an Array or Vector from the "database" (BedAndBreakfast) just
has no effect on syncing with the JList.
For what it's work, here's the "database":
package a00720398.data;
import java.util.*;
import javax.swing.*;
import a00720398.util.*;
public class BedAndBreakfast
{
private static final BedAndBreakfast INSTANCE = new
BedAndBreakfast();
private HashMap guests = new LinkedHashMap<Integer, Guest>();
public DefaultListModel listModel = new DefaultListModel();
private BedAndBreakfast()
{sync();}
public static BedAndBreakfast getInstance()
{return INSTANCE;}
/*@see GUI
*this method makes the DefaultListModel match the
*HashMap which stores the data.
*ideally, this method shouldn't be required.
*I'm not quite sure why, but without it
*nothing synchronizes with the JList.setModel
*in the GUI*/
public void sync()
{
listModel.clear();
Collection<?> foos = getGuests();
for (Object obj : foos)
{listModel.addElement(obj);}
}
public Collection<?> getGuests()
{
return guests.values();
}
public void removeGuest(int i)
{
System.out.println("index: " + i);
guests.remove(i);
sync();
}
@SuppressWarnings( "unchecked" )
public void addGuest(Guest guest)
{
sync();
if (guest.getID() == 0)
{ //if ID is default value
int i = getGuests().size() + 1;
guest.setID(i); //kludge to append to the "end" of the Map
}
guests.put(guest.getID(), guest); //hopefully no duplicates
sync();
//System.out.println("\n************\n" + getGuests());
}
}
When I have the JList.setModel method convert the Map to Array it
simply fails to sync :(
thanks,
Thufir