View Javadoc

1   /*
2   
3       dsh-eventlist-view-examples  Examples for the eventlist-view library.
4       Copyright (c) 2010-2013 held jointly by the individual authors.
5   
6       This library is free software; you can redistribute it and/or modify it
7       under the terms of the GNU Lesser General Public License as published
8       by the Free Software Foundation; either version 3 of the License, or (at
9       your option) any later version.
10  
11      This library is distributed in the hope that it will be useful, but WITHOUT
12      ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
13      FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14      License for more details.
15  
16      You should have received a copy of the GNU Lesser General Public License
17      along with this library;  if not, write to the Free Software Foundation,
18      Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA.
19  
20      > http://www.fsf.org/licensing/licenses/lgpl.html
21      > http://www.opensource.org/licenses/lgpl-license.php
22  
23  */
24  package org.dishevelled.eventlist.view.examples;
25  
26  import ca.odell.glazedlists.EventList;
27  import ca.odell.glazedlists.GlazedLists;
28  
29  import java.awt.GridLayout;
30  
31  import java.awt.event.ActionEvent;
32  import java.awt.event.ActionListener;
33  
34  import java.util.ArrayList;
35  import java.util.HashMap;
36  import java.util.List;
37  import java.util.Map;
38  
39  import javax.swing.JComponent;
40  import javax.swing.JFrame;
41  import javax.swing.JLabel;
42  import javax.swing.JPanel;
43  import javax.swing.Timer;
44  import javax.swing.SwingUtilities;
45  
46  import javax.swing.border.EmptyBorder;
47  
48  import ca.odell.glazedlists.gui.TableFormat;
49  
50  import org.dishevelled.functor.UnaryFunction;
51  
52  import org.dishevelled.eventlist.view.CountLabel;
53  import org.dishevelled.eventlist.view.ElementsLabel;
54  import org.dishevelled.eventlist.view.ElementsList;
55  import org.dishevelled.eventlist.view.ElementsTable;
56  import org.dishevelled.eventlist.view.ElementsSummary;
57  import org.dishevelled.eventlist.view.IdElementsList;
58  import org.dishevelled.eventlist.view.IdElementsSummary;
59  
60  import org.dishevelled.layout.LabelFieldPanel;
61  
62  /**
63   * Event list view example.
64   *
65   * @author  Michael Heuer
66   */
67  public final class EventListViewExample
68      extends LabelFieldPanel
69      implements Runnable
70  {
71      /** Values. */
72      private final EventList<String> eventList;
73  
74  
75      /**
76       * Create a new event list view example.
77       */
78      public EventListViewExample()
79      {
80          super();
81          setBorder(new EmptyBorder(12, 12, 12, 12));
82  
83          List<String> strings = new ArrayList<String>();
84          for (int i = 0; i < 100; i++)
85          {
86              strings.add("Value " + i);
87          }
88          eventList = GlazedLists.eventList(strings);
89  
90          addField("Count label:", new CountLabel<String>(eventList));
91          addField("Elements label:", new ElementsLabel<String>(eventList));
92          addLabel("Elements summary:");
93  
94          UnaryFunction<String, JComponent> modelToLabel = new UnaryFunction<String, JComponent>()
95          {
96              // todo:  this really aught to be a list synchronized with the event list
97              private final Map<String, JComponent> cache = new HashMap<String, JComponent>();
98  
99              @Override
100             public JComponent evaluate(final String element)
101             {
102                 if (!cache.containsKey(element))
103                 {
104                     cache.put(element, new JLabel(element));
105                 }
106                 return cache.get(element);
107             }
108         };
109 
110         addField(new ElementsSummary<String>(eventList, modelToLabel));
111         addSpacing(12);
112         addLabel("Identifiable elements summary:");
113         addField(new IdElementsSummary<String>(eventList));
114         addSpacing(12);
115         addFinalField(createLowerPanel());
116 
117         Timer t = new Timer(5000, new ActionListener()
118             {
119                 @Override
120                 public void actionPerformed(final ActionEvent e)
121                 {
122                     if (!eventList.isEmpty())
123                     {
124                         eventList.remove(0);
125                     }
126                 }
127             });
128         t.setRepeats(true);
129         t.start();
130     }
131 
132 
133     /**
134      * Create and return a new lower panel.
135      *
136      * @return a new lower panel
137      */
138     private JPanel createLowerPanel()
139     {
140         JPanel panel = new JPanel();
141         panel.setLayout(new GridLayout(1, 3, 12, 12));
142 
143         LabelFieldPanel left = new LabelFieldPanel();
144         left.addLabel("Elements list:");
145         left.addFinalField(new ElementsList<String>("Elements:", eventList));
146 
147         LabelFieldPanel center = new LabelFieldPanel();
148         center.addLabel("Identifiable elements list:");
149         center.addFinalField(new IdElementsList<String>("Identifiable elements:", eventList));
150 
151         LabelFieldPanel right = new LabelFieldPanel();
152         right.addLabel("Elements table:");
153         TableFormat<String> tableFormat = new TableFormat<String>()
154             {
155                 @Override
156                 public int getColumnCount()
157                 {
158                     return 2;
159                 }
160 
161                 @Override
162                 public String getColumnName(final int column)
163                 {
164                     if (column == 0)
165                     {
166                         return "Value";
167                     }
168                     else
169                     {
170                         return "Length";
171                     }
172                 }
173 
174                 @Override
175                 public Object getColumnValue(final String value, final int column)
176                 {
177                     if (column == 0)
178                     {
179                         return value;
180                     }
181                     else
182                     {
183                         return value.length();
184                     }
185                 }
186             };
187         right.addFinalField(new ElementsTable<String>("Elements:", eventList, tableFormat));
188 
189         panel.add(left);
190         panel.add(center);
191         panel.add(right);
192         return panel;
193     }
194 
195 
196     @Override
197     public void run()
198     {
199         JFrame f = new JFrame("Event list view example");
200         f.setContentPane(this);
201         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
202         f.setBounds(100, 100, 1080, 606);
203         f.setVisible(true);
204     }
205 
206 
207     /**
208      * Main.
209      *
210      * @param args command line arguments, ignored
211      */
212     public static void main(final String[] args)
213     {
214         SwingUtilities.invokeLater(new EventListViewExample());
215     }
216 }