On 12/28/2012 5:56 PM, John B. Matthews wrote:
In article <kbkqb6$uu3$1@dont-email.me>,
Knute Johnson <nospam@knutejohnson.com> wrote:
I've been trying to clean up some really old code and I've hit some
snags. I've got several modified JLists and the ListCellRenderers
for them and thought it would make sense to have generic classes that
could be extended for different data types that need to be displayed.
The example below displays InetAddresses in the JList. I've got
another implementation of JList that does a lot more than what this
one does but I wanted to keep this example simple and focus on the
ListCellRenderer.
Good use of a class literal as runtime type token:
<http://docs.oracle.com/javase/tutorial/extra/generics/literals.html>
MyListCellRenderer extends the getListCellRenderer method of
DefaultListCellRenderer and adds a new method, textToDisplay(). I
added a field to the constructor that specifies the class of the data
element to be displayed. That class information is the test to make
the call to the textToDisplay() method. The
InetAddressListCellRenderer class extends MyListCellRenderer to get
this to display nice neat Strings for the InetAddresses.
I think this whole thing is a little kludgie. I've been playing with
it for so long now I'm not getting anywhere anymore. I was hoping
somebody would say "gee you ought to go this way" or "no that is
really brilliant code my man!" and I'll leave it as is :-).
Anyway, please take a look and if you have any great ideas, I would
appreciate the feedback.
Some suggestions:
Use the @Override annotation.
Use the for-each (Iterable) loop in setListData():
@Override
public void setListData(Vector<? extends E> v) {
model.clear();
for (E e : v) {
model.addElement(e);
}
}
Consider supporting List:
public void setListData(List<? extends E> v) {
model.clear();
for (E e : v) {
model.addElement(e);
}
}
Catch the more specific exception:
catch (UnknownHostException e)
Thanks John.