1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package de.jaret.examples.timebars.touren;
21
22 import java.awt.BorderLayout;
23 import java.awt.Color;
24 import java.awt.Dimension;
25 import java.awt.Rectangle;
26 import java.beans.PropertyChangeEvent;
27 import java.beans.PropertyChangeListener;
28
29 import javax.swing.JComponent;
30 import javax.swing.JFrame;
31 import javax.swing.JLabel;
32 import javax.swing.JPanel;
33 import javax.swing.JScrollPane;
34 import javax.swing.JSplitPane;
35 import javax.swing.JTable;
36
37 import de.jaret.util.date.JaretDate;
38 import de.jaret.util.ui.timebars.TimeBarRowFilter;
39 import de.jaret.util.ui.timebars.TimeBarRowSorter;
40 import de.jaret.util.ui.timebars.model.DefaultTimeBarModel;
41 import de.jaret.util.ui.timebars.swing.TimeBarViewer;
42
43 /***
44 * This example is a proof of concept showing trips from one point to another point ("Touren") in the timebarviewer and
45 * shows additional data in an attached JTable. Since newer versiocns of the viewer component scroll smooth - a feature
46 * the JTable lacks to have - the integration with th table is not as nice as it could be. For demonstration purposes a
47 * sorter and a filter can be chosen from comboboxes. Scaling is possible. Renderer for the tour elements is
48 * specialized. A gap renderer is used to render the point labels.
49 *
50 * @author Peter Kliem
51 * @version $Id: TourenExample.java 275 2007-02-18 21:50:30Z olk $
52 */
53 public class TourenExample {
54
55 public static void main(String[] args) {
56 JFrame f = new JFrame(TourenExample.class.getName());
57 f.setSize(1000, 600);
58 f.getContentPane().setLayout(new BorderLayout());
59 f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
60
61 DefaultTimeBarModel model = new DefaultTimeBarModel();
62 JaretDate base = new JaretDate();
63 base.setHours(0);
64 base.setMinutes(0);
65 for (int d = 0; d < 3; d++) {
66 for (int i = 0; i < 330; i++) {
67 Tour t = new Tour(d * 1000 + i, base);
68 model.addRow(t);
69 }
70 base.advanceDays(1);
71 }
72
73 final TimeBarViewer tbv = new TimeBarViewer(model, false, false);
74 tbv.setTimeScalePosition(TimeBarViewer.TIMESCALE_POSITION_TOP);
75 tbv.setStartDate(new JaretDate());
76 tbv.setDrawRowGrid(true);
77 tbv.setTimeBarRenderer(new TourenElementRenderer());
78 tbv.setPixelPerSecond(800.0 / (24.0 * 60.0 * 60.0));
79 tbv.setGapRenderer(new TourenGapRenderer());
80
81 JPanel tablePanel = new JPanel();
82 tablePanel.setBackground(Color.YELLOW);
83 tablePanel.setLayout(new BorderLayout());
84
85 final TourenTableModel tmodel = new TourenTableModel(model);
86 final JTable table = new JTable(tmodel);
87 final JScrollPane scroll = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_NEVER,
88 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
89 tablePanel.add(scroll, BorderLayout.CENTER);
90
91 JComponent filler = new JLabel();
92 int height = tbv.getTimeScaleRenderer().getHeight() - table.getTableHeader().getPreferredSize().height;
93 Dimension size = new Dimension(20, height);
94 filler.setMinimumSize(size);
95 filler.setMaximumSize(size);
96 filler.setPreferredSize(size);
97 tablePanel.add(filler, BorderLayout.NORTH);
98
99 table.setRowHeight(tbv.getRowHeight());
100 tbv.addPropertyChangeListener(new PropertyChangeListener() {
101
102 public void propertyChange(PropertyChangeEvent evt) {
103 if (evt.getPropertyName().equals("RowHeight")) {
104 table.setRowHeight(tbv.getRowHeight());
105 int firstrow = tbv.getFirstRowDisplayed();
106 Rectangle rect = table.getCellRect(firstrow, 0, true);
107 scroll.getVerticalScrollBar().setValue(rect.y);
108 } else if (evt.getPropertyName().equals("FirstRow")) {
109 int firstrow = tbv.getFirstRowDisplayed();
110 Rectangle rect = table.getCellRect(firstrow, 0, true);
111 scroll.getVerticalScrollBar().setValue(rect.y);
112 } else if (evt.getPropertyName().equals("RowSorter")) {
113 tmodel.setTimeBarRowSorter((TimeBarRowSorter) evt.getNewValue());
114 } else if (evt.getPropertyName().equals("RowFilter")) {
115 tmodel.setTimeBarRowFilter((TimeBarRowFilter) evt.getNewValue());
116 }
117 }
118
119 });
120
121 JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
122 splitter.add(tbv);
123 splitter.add(tablePanel);
124 f.getContentPane().add(splitter, BorderLayout.CENTER);
125
126
127 ControlPanel cp = new ControlPanel(tbv, null);
128 f.getContentPane().add(cp, BorderLayout.NORTH);
129
130 f.setVisible(true);
131
132 splitter.setDividerLocation(0.8);
133
134 }
135
136 }