01
02 /**
03 * Title: Advanced Network Client Sample<p>
04 * Description: <p>
05 * Copyright: Copyright (C) 2009 Alexey Veremenko<p>
06 * Company: <p>
07 * @author Alexey Veremenko
08 * @version 1.0
09 */
10 package networking.server.gui;
11
12 import networking.protocol.*;
13
14 import javax.swing.*;
15 import javax.swing.event.*;
16 import java.util.*;
17
18 import java.awt.Dimension;
19
20 /**
21 * JListEx extends List to allow associating user objects with List items
22 */
23 class JListEx extends JList
24 {
25 /**
26 * Mark for the leading client
27 */
28 private static final String s_mark = " (Leader)";
29
30 /**
31 * Construct new JListEx object
32 * @param rows number of visible rows
33 */
34 public JListEx(int rows)
35 {
36 setVisibleRowCount(rows);
37 }
38
39 /**
40 * Remove all items
41 */
42 synchronized public void clear()
43 {
44 setListData(new Boolean[0]);
45 }
46
47 /**
48 * Refill clients list
49 * @param msg message
50 */
51 synchronized public void fill(List l)
52 {
53 if (l.size() == 0)
54 {
55 clear();
56 return;
57 }
58
59 // Make list modifiable
60 List list = new ArrayList(l);
61
62 // Set mark on leader
63 Client leader = (Client)list.get(0);
64 list.remove(leader);
65 list.add(new Client(leader.getName() + s_mark));
66 // Sort items
67 Collections.sort(list);
68 // Set data
69 setListData(list.toArray());
70 }
71
72 /**
73 * Specify preferred size
74 */
75 public Dimension getPreferredSize()
76 {
77 Dimension d = super.getPreferredSize();
78
79 d.height = Math.max(d.height, 200);
80 d.width = Math.max(d.width, 200);
81
82 return d;
83 }
84
85 /*
86 * Specify minimum size
87 */
88 public Dimension getMinimumSize()
89 {
90 return getPreferredSize();
91 }
92 }
|