KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ch > ethz > prose > tools > JWorksheetProseClientPane


1 //
2
// This file is part of the prose package.
3
//
4
// The contents of this file are subject to the Mozilla Public License
5
// Version 1.1 (the "License"); you may not use this file except in
6
// compliance with the License. You may obtain a copy of the License at
7
// http://www.mozilla.org/MPL/
8
//
9
// Software distributed under the License is distributed on an "AS IS" basis,
10
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11
// for the specific language governing rights and limitations under the
12
// License.
13
//
14
// The Original Code is prose.
15
//
16
// The Initial Developer of the Original Code is Andrei Popovici. Portions
17
// created by Andrei Popovici are Copyright (C) 2002 Andrei Popovici.
18
// All Rights Reserved.
19
//
20
// Contributor(s):
21
/*
22  * JWorksheetProseClientPane.java
23  *
24  * Created on December 26, 2002, 4:44 PM
25  */

26
27 package ch.ethz.prose.tools;
28
29 import java.awt.Dimension JavaDoc;
30 import java.awt.Point JavaDoc;
31 import java.awt.event.InputEvent JavaDoc;
32 import java.net.MalformedURLException JavaDoc;
33 import java.rmi.NotBoundException JavaDoc;
34 import java.rmi.RemoteException JavaDoc;
35
36 import javax.swing.JTable JavaDoc;
37 import javax.swing.ListSelectionModel JavaDoc;
38 import javax.swing.event.ListSelectionEvent JavaDoc;
39 import javax.swing.event.ListSelectionListener JavaDoc;
40 import javax.swing.event.TableModelEvent JavaDoc;
41 import javax.swing.event.TableModelListener JavaDoc;
42 import javax.swing.table.DefaultTableCellRenderer JavaDoc;
43 import javax.swing.table.JTableHeader JavaDoc;
44
45 import javax.swing.BorderFactory JavaDoc;
46 import java.awt.Color JavaDoc;
47
48 /**
49  *
50  * @author pschoch
51  */

52 public class JWorksheetProseClientPane extends javax.swing.JSplitPane JavaDoc {
53
54   public static final int ASPECT_COL_INDEX = 0;
55   public static final int JOINPOINT_COL_INDEX = 2;
56   public static final Color JavaDoc SEL_COLOR = new Color JavaDoc(255, 204, 204);
57   public static final Color JavaDoc NOT_SEL_COLOR = new Color JavaDoc(153, 153, 153);
58   public static final Color JavaDoc WHITE_COLOR = new Color JavaDoc(255, 255, 255);
59   public static final Color JavaDoc SEL_TABCELL_COLOR = new Color JavaDoc(204, 204, 255);
60
61
62   private javax.swing.JScrollPane JavaDoc tableScrollPaneRight;
63   private javax.swing.JScrollPane JavaDoc tableScrollPaneLeft;
64
65   private javax.swing.JTable JavaDoc leftTable;
66   private javax.swing.JTable JavaDoc rightTable;
67
68   private JMultipleProseClient parent = null;
69   private MultipleClientModel myModel = null;
70   private String JavaDoc proseName = null;
71   private String JavaDoc url = null;
72   private String JavaDoc host = null;
73   private String JavaDoc port = null;
74   private JTable JavaDoc activeTable = null; // will be either the left or the right table
75

76   /** Creates new form BeanForm */
77   public JWorksheetProseClientPane() {}
78   public JWorksheetProseClientPane(JMultipleProseClient parent, String JavaDoc name, String JavaDoc host, String JavaDoc port)
79     throws IllegalUserInputException
80     {
81       // setOrientation(VERTICAL_SPLIT);
82
this.parent = parent;
83       this.myModel = parent.getModel();
84       this.proseName = name;
85       this.url = host + ":" + port;
86       this.host = host;
87       this.port = port;
88       initComponents();
89
90       setActiveTable(leftTable);
91     }
92
93   public String JavaDoc getHost()
94     {
95       return host;
96     }
97
98   public String JavaDoc getPort()
99     {
100       return port;
101     }
102
103
104   /** This method is called from within the constructor to
105    * initialize the form.
106    * WARNING: Do NOT modify this code. The content of this method is
107    * always regenerated by the Form Editor.
108    */

109   private void initComponents() throws IllegalUserInputException {
110         tableScrollPaneLeft = new javax.swing.JScrollPane JavaDoc();
111         leftTable = new JToolTipTable();
112         tableScrollPaneRight = new javax.swing.JScrollPane JavaDoc();
113         rightTable = new JToolTipTable();
114
115         setPreferredSize(new java.awt.Dimension JavaDoc(802, 452));
116         setMinimumSize(new java.awt.Dimension JavaDoc(2, 2));
117     setDividerLocation(0.5);
118
119         tableScrollPaneLeft.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
120         tableScrollPaneLeft.setPreferredSize(new java.awt.Dimension JavaDoc(400, 450));
121         tableScrollPaneLeft.setName("scrollPane");
122         tableScrollPaneLeft.setMinimumSize(new java.awt.Dimension JavaDoc(0, 0));
123         leftTable.setModel(myModel.createTableModel(proseName,host,port,true));
124
125     tableScrollPaneLeft.setBorder(BorderFactory.createTitledBorder("REAL ASPECT MANAGER"));
126     tableScrollPaneRight.setBorder(BorderFactory.createTitledBorder("TEST ASPECT MANAGER"));
127     leftTable.setIntercellSpacing(new java.awt.Dimension JavaDoc(2, 2));
128     leftTable.setColumnSelectionAllowed(true);
129     leftTable.setTableHeader(new JTableHeader JavaDoc(leftTable.getColumnModel()));
130     leftTable.getTableHeader().setBackground(NOT_SEL_COLOR);
131     leftTable.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
132         public void mousePressed(java.awt.event.MouseEvent JavaDoc evt) {
133           onMousePressed(evt);
134         }
135       });
136
137     leftTable.setPreferredSize(new Dimension JavaDoc(this.getWidth(), ((WorksheetSingleClientModel)leftTable.getModel()).getRowCount()
138                          * leftTable.getRowHeight()));
139     leftTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
140     leftTable.setMaximumSize(new java.awt.Dimension JavaDoc(32767, 32767));
141     leftTable.setName("leftTable");
142     leftTable.setAutoCreateColumnsFromModel(false);
143     leftTable.setMinimumSize(new java.awt.Dimension JavaDoc(450, 100));
144     leftTable.setPreferredSize(new java.awt.Dimension JavaDoc(450, 400));
145     customizeTable(leftTable);
146     leftTable.addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
147         public void mouseClicked(java.awt.event.MouseEvent JavaDoc evt) {
148           tableMouseClicked(evt);
149           tableMouseRightClicked(evt);
150         }
151       });
152
153     tableScrollPaneLeft.setViewportView(leftTable);
154
155     setLeftComponent(tableScrollPaneLeft);
156
157     tableScrollPaneRight.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
158     tableScrollPaneRight.setPreferredSize(new java.awt.Dimension JavaDoc(400, 450));
159     tableScrollPaneRight.setName("scrollPane");
160     tableScrollPaneRight.setMinimumSize(new java.awt.Dimension JavaDoc(0, 0));
161     rightTable.setModel(myModel.createTableModel(proseName,host,port,false));
162     rightTable.setIntercellSpacing(new java.awt.Dimension JavaDoc(2, 2));
163     rightTable.setColumnSelectionAllowed(true);
164     rightTable.setTableHeader(new JTableHeader JavaDoc(rightTable.getColumnModel()));
165     rightTable.getTableHeader().setBackground(NOT_SEL_COLOR);
166     rightTable.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
167         public void mousePressed(java.awt.event.MouseEvent JavaDoc evt) {
168           onMousePressed(evt);
169         }
170       });
171     rightTable.setPreferredSize(new Dimension JavaDoc(this.getWidth(), ((WorksheetSingleClientModel)rightTable.getModel()).getRowCount()
172                           * rightTable.getRowHeight()));
173     rightTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
174     rightTable.setMaximumSize(new java.awt.Dimension JavaDoc(32767, 32767));
175     rightTable.setPreferredSize(new java.awt.Dimension JavaDoc(450, 400));
176     rightTable.setName("rightTable");
177     rightTable.setAutoCreateColumnsFromModel(false);
178     rightTable.setMinimumSize(new java.awt.Dimension JavaDoc(450, 100));
179     customizeTable(rightTable);
180     rightTable.addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
181         public void mouseClicked(java.awt.event.MouseEvent JavaDoc evt) {
182           tableMouseClicked(evt);
183           tableMouseRightClicked(evt);
184         }
185       });
186
187     tableScrollPaneRight.setViewportView(rightTable);
188
189     setRightComponent(tableScrollPaneRight);
190
191     }//GEN-END:initComponents
192

193   private void tableMouseRightClicked(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_tableMouseRightClicked
194
if (!((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK))
195         return;
196     JTable JavaDoc myTable = (JTable JavaDoc)evt.getSource();
197     Object JavaDoc value = myTable.getModel().getValueAt(myTable.rowAtPoint(evt.getPoint()), myTable.columnAtPoint(evt.getPoint()));
198     if (value == null)
199         return;
200     ((JMultipleProseClient)getTopLevelAncestor()).newTextAreaContent(value.toString());
201   }//GEN-LAST:event_tableMouseRightClicked
202

203   private void tableMouseClicked(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_tableMouseClicked
204
JTable JavaDoc myTable = (JTable JavaDoc)evt.getSource();
205     if (isActive(myTable))
206         return;
207     setActiveTable(myTable);
208     ((WorksheetSingleClientModel)myTable.getModel()).setSelectedCells(new int[] { myTable.rowAtPoint(evt.getPoint()) });
209     ((WorksheetSingleClientModel)myTable.getModel()).setSelectedColumn(myTable.columnAtPoint(evt.getPoint()));
210   }//GEN-LAST:event_tableMouseClicked
211

212   private void onMousePressed(java.awt.event.MouseEvent JavaDoc evt) {
213     JTable JavaDoc myTable = ((JTableHeader JavaDoc)evt.getComponent()).getTable();
214     if (isActive(myTable))
215         return;
216     setActiveTable(myTable);
217   }
218
219
220
221   public void select()
222     {
223       myModel.setActualTableModel((WorksheetSingleClientModel)activeTable.getModel());
224     }
225
226
227   private void setActiveTable(JTable JavaDoc myTable)
228     {
229
230       if (activeTable != null)
231         {
232           activeTable.getTableHeader().setBackground(NOT_SEL_COLOR);
233           activeTable.setSelectionBackground(WHITE_COLOR);
234     }
235
236        if (!myTable.equals(activeTable))
237     {
238       activeTable = myTable;
239       activeTable.getTableHeader().setBackground(SEL_COLOR);
240       activeTable.setSelectionBackground(SEL_TABCELL_COLOR);
241       myModel.setActualTableModel((WorksheetSingleClientModel)activeTable.getModel());
242     }
243     }
244
245   public JTable JavaDoc getActiveTable()
246     {
247       return activeTable;
248     }
249
250   public boolean isActive(JTable JavaDoc table)
251     {
252       return table.equals(activeTable);
253     }
254
255   public JTable JavaDoc getLeftTable()
256     {
257       return leftTable;
258     }
259
260   public JTable JavaDoc getRightTable()
261     {
262       return rightTable;
263     }
264
265   public String JavaDoc getProseName()
266     {
267       return proseName;
268     }
269
270   public String JavaDoc getProseURL()
271     {
272       return url;
273     }
274
275   public String JavaDoc toString()
276     {
277       return ("JWorksheetProseClientPane: " + proseName);
278     }
279
280
281   protected void customizeTable(JTable JavaDoc table) throws IllegalUserInputException
282     {
283       setActiveTable(table);
284       ((WorksheetSingleClientModel)table.getModel()).addTableModelListener(new TableModelListener JavaDoc() {
285           public void tableChanged(TableModelEvent JavaDoc e) {
286         try
287           {
288         getActiveTable().setPreferredSize(new java.awt.Dimension JavaDoc(getActiveTable().getWidth(),
289                                      myModel.getActualTableModel().getRowCount() *
290                                      getActiveTable().getRowHeight()));
291           }
292         catch (IllegalUserInputException e1)
293           {/*cannot happen */}
294           }
295         });
296
297         table.getTableHeader().setReorderingAllowed(false);
298         //assign selection model for row selection and for column selection
299
table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
300         table.getColumnModel().getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
301
302         table.getSelectionModel().addListSelectionListener(new ListSelectionListener JavaDoc() {
303           public void valueChanged(ListSelectionEvent JavaDoc e) {
304         try
305           {
306         // install the ListSelectionListener that listens on row selection changes
307
if (e.getValueIsAdjusting())
308           return;
309
310         myModel.getActualTableModel().setSelectedCells(getActiveTable().getSelectedRows());
311
312         if (getActiveTable().getSelectedRowCount() > 0)
313           {
314             if (getActiveTable().getSelectedColumnCount() == 1)
315               myModel.getActualTableModel().setSelectedColumn(getActiveTable().getSelectedColumn());
316           }
317         else
318           myModel.getActualTableModel().setSelectedColumn(-1);
319           }
320         catch (IllegalUserInputException e2)
321           {/*cannot happen */}
322           }
323         });
324
325         table.getColumnModel().getSelectionModel().addListSelectionListener(new ListSelectionListener JavaDoc() {
326           public void valueChanged(ListSelectionEvent JavaDoc e) {
327         try
328           {
329             // install the ListSelectionListener that listens on column selection changes
330
if (e.getValueIsAdjusting())
331                 return;
332
333             myModel.getActualTableModel().setSelectedColumn(getActiveTable().getSelectedColumn());
334           }
335         catch (IllegalUserInputException e3)
336           {/*cannot happen */}
337           }
338         });
339
340         table.addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
341           public void mousePressed(java.awt.event.MouseEvent JavaDoc evt) {
342         try
343           {
344             // to indicate the selected cells correctly. By default the forground color is omitted every second time.
345
if (getActiveTable().getColumnModel().getColumnIndexAtX(evt.getX()) == myModel.getActualTableModel().getSelectedColumn())
346                 getActiveTable().getColumnModel().getSelectionModel().setSelectionInterval(
347           myModel.getActualTableModel().getSelectedColumn(), myModel.getActualTableModel().getSelectedColumn());
348           }
349         catch (IllegalUserInputException e4)
350           {/*cannot happen */}
351           }
352         });
353
354         table.getColumnModel().getColumn(JOINPOINT_COL_INDEX).setCellRenderer(new MyJPSurrogateRenderer());
355   }
356
357
358   public static class JToolTipTable extends JTable JavaDoc {
359
360     public String JavaDoc getToolTipText(java.awt.event.MouseEvent JavaDoc e)
361       {
362         Point JavaDoc p = e.getPoint();
363         Object JavaDoc value = getValueAt(rowAtPoint(p), columnAtPoint(p));
364         if (value != null)
365             return value.toString();
366         else
367             return "";
368       }
369   }
370
371   public class MyJPSurrogateRenderer extends DefaultTableCellRenderer JavaDoc {
372     public java.awt.Component JavaDoc getTableCellRendererComponent(JTable JavaDoc table, Object JavaDoc value, boolean isSelected, boolean hasFocus, int row, int column)
373       {
374         java.awt.Component JavaDoc component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
375         int [] pastedCells = ((WorksheetSingleClientModel)table.getModel()).pastedCells;
376         if ((pastedCells != null) && (row >= pastedCells[0]) &&
377               (row <= pastedCells[pastedCells.length-1]))
378           {
379             this.setFont(new java.awt.Font JavaDoc("Dialog", java.awt.Font.ITALIC, 12));
380           }
381         return component;
382       }
383   }
384
385 }
386
Popular Tags