Master Detail with JCombo & JList?

M

mttc

JComboBox as master, JList as detail. both components fill the model
from DB.
How make it work, when i change the master, the detail update list
automatically.
comment: I prepare load all records of details at once, there is few
records. but I not see on DefaultListModel any method for filter view
according the master key
 
A

Albert

mttc a écrit :
JComboBox as master, JList as detail. both components fill the model
from DB.
How make it work, when i change the master, the detail update list
automatically.
comment: I prepare load all records of details at once, there is few
records. but I not see on DefaultListModel any method for filter view
according the master key

Yes, you have to do it. You can use a hashmap wich maps each master key
to an arraylist of "details". And then fill the JList from the good
arraylist each time the jcombobox value change (actionEvent).
 
M

mttc

mttc a écrit :


Yes, you have to do it. You can use a hashmap wich maps each master key
to an arraylist of "details". And then fill the JList from the good
arraylist each time the jcombobox value change (actionEvent).

have some link for this?
 
M

Michael Rauscher

mttc said:
JComboBox as master, JList as detail. both components fill the model
from DB.
How make it work, when i change the master, the detail update list
automatically.
comment: I prepare load all records of details at once, there is few
records. but I not see on DefaultListModel any method for filter view
according the master key

Of course. There's no reason for (Default)ListModel to provide filter
methods. There are many ways to implement a filter but it depends on
interpretation, the concrete situation and the design of the
application, of course.

A simple approach could look like the following:

interface Entity {
int getParentId();
}

class DetailsListModel extends AbstractListModel {
private List<Entity> details;
private List<Entity> data;
private int filterId;

public DetailsListModel(List<Entity> details) {
this.details = details;
filter();
}

public void setFilterId(int id) {
this.filterId = id;
filter();
}

private void filter() {
if ( filterId == 0 )
data = details;
else {
data = new ArrayList<Entity>();
// add matching elements to data
}
fireContentsChanged(this, 0, data.size());
}

// implement abstract methods based on data
// getSize
// getElementAt
}

To get a reusable filter one could implement an observable filter class
that uses Comparator or bean introspection. A ListModel can then use and
observe an instance of this filter class.

Bye
Michael
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,012
Latest member
RoxanneDzm

Latest Threads

Top