1 26 27 package ch.ethz.prose.tools; 28 29 import java.awt.Dimension ; 30 import java.awt.Point ; 31 import java.awt.event.InputEvent ; 32 import java.net.MalformedURLException ; 33 import java.rmi.NotBoundException ; 34 import java.rmi.RemoteException ; 35 36 import javax.swing.JTable ; 37 import javax.swing.ListSelectionModel ; 38 import javax.swing.event.ListSelectionEvent ; 39 import javax.swing.event.ListSelectionListener ; 40 import javax.swing.event.TableModelEvent ; 41 import javax.swing.event.TableModelListener ; 42 import javax.swing.table.DefaultTableCellRenderer ; 43 import javax.swing.table.JTableHeader ; 44 45 import javax.swing.BorderFactory ; 46 import java.awt.Color ; 47 48 52 public class JWorksheetProseClientPane extends javax.swing.JSplitPane { 53 54 public static final int ASPECT_COL_INDEX = 0; 55 public static final int JOINPOINT_COL_INDEX = 2; 56 public static final Color SEL_COLOR = new Color (255, 204, 204); 57 public static final Color NOT_SEL_COLOR = new Color (153, 153, 153); 58 public static final Color WHITE_COLOR = new Color (255, 255, 255); 59 public static final Color SEL_TABCELL_COLOR = new Color (204, 204, 255); 60 61 62 private javax.swing.JScrollPane tableScrollPaneRight; 63 private javax.swing.JScrollPane tableScrollPaneLeft; 64 65 private javax.swing.JTable leftTable; 66 private javax.swing.JTable rightTable; 67 68 private JMultipleProseClient parent = null; 69 private MultipleClientModel myModel = null; 70 private String proseName = null; 71 private String url = null; 72 private String host = null; 73 private String port = null; 74 private JTable activeTable = null; 76 77 public JWorksheetProseClientPane() {} 78 public JWorksheetProseClientPane(JMultipleProseClient parent, String name, String host, String port) 79 throws IllegalUserInputException 80 { 81 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 getHost() 94 { 95 return host; 96 } 97 98 public String getPort() 99 { 100 return port; 101 } 102 103 104 109 private void initComponents() throws IllegalUserInputException { 110 tableScrollPaneLeft = new javax.swing.JScrollPane (); 111 leftTable = new JToolTipTable(); 112 tableScrollPaneRight = new javax.swing.JScrollPane (); 113 rightTable = new JToolTipTable(); 114 115 setPreferredSize(new java.awt.Dimension (802, 452)); 116 setMinimumSize(new java.awt.Dimension (2, 2)); 117 setDividerLocation(0.5); 118 119 tableScrollPaneLeft.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 120 tableScrollPaneLeft.setPreferredSize(new java.awt.Dimension (400, 450)); 121 tableScrollPaneLeft.setName("scrollPane"); 122 tableScrollPaneLeft.setMinimumSize(new java.awt.Dimension (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 (2, 2)); 128 leftTable.setColumnSelectionAllowed(true); 129 leftTable.setTableHeader(new JTableHeader (leftTable.getColumnModel())); 130 leftTable.getTableHeader().setBackground(NOT_SEL_COLOR); 131 leftTable.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter () { 132 public void mousePressed(java.awt.event.MouseEvent evt) { 133 onMousePressed(evt); 134 } 135 }); 136 137 leftTable.setPreferredSize(new Dimension (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 (32767, 32767)); 141 leftTable.setName("leftTable"); 142 leftTable.setAutoCreateColumnsFromModel(false); 143 leftTable.setMinimumSize(new java.awt.Dimension (450, 100)); 144 leftTable.setPreferredSize(new java.awt.Dimension (450, 400)); 145 customizeTable(leftTable); 146 leftTable.addMouseListener(new java.awt.event.MouseAdapter () { 147 public void mouseClicked(java.awt.event.MouseEvent 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 (400, 450)); 159 tableScrollPaneRight.setName("scrollPane"); 160 tableScrollPaneRight.setMinimumSize(new java.awt.Dimension (0, 0)); 161 rightTable.setModel(myModel.createTableModel(proseName,host,port,false)); 162 rightTable.setIntercellSpacing(new java.awt.Dimension (2, 2)); 163 rightTable.setColumnSelectionAllowed(true); 164 rightTable.setTableHeader(new JTableHeader (rightTable.getColumnModel())); 165 rightTable.getTableHeader().setBackground(NOT_SEL_COLOR); 166 rightTable.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter () { 167 public void mousePressed(java.awt.event.MouseEvent evt) { 168 onMousePressed(evt); 169 } 170 }); 171 rightTable.setPreferredSize(new Dimension (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 (32767, 32767)); 175 rightTable.setPreferredSize(new java.awt.Dimension (450, 400)); 176 rightTable.setName("rightTable"); 177 rightTable.setAutoCreateColumnsFromModel(false); 178 rightTable.setMinimumSize(new java.awt.Dimension (450, 100)); 179 customizeTable(rightTable); 180 rightTable.addMouseListener(new java.awt.event.MouseAdapter () { 181 public void mouseClicked(java.awt.event.MouseEvent evt) { 182 tableMouseClicked(evt); 183 tableMouseRightClicked(evt); 184 } 185 }); 186 187 tableScrollPaneRight.setViewportView(rightTable); 188 189 setRightComponent(tableScrollPaneRight); 190 191 } 193 private void tableMouseRightClicked(java.awt.event.MouseEvent evt) { if (!((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK)) 195 return; 196 JTable myTable = (JTable )evt.getSource(); 197 Object 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 } 203 private void tableMouseClicked(java.awt.event.MouseEvent evt) { JTable myTable = (JTable )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 } 212 private void onMousePressed(java.awt.event.MouseEvent evt) { 213 JTable myTable = ((JTableHeader )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 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 getActiveTable() 246 { 247 return activeTable; 248 } 249 250 public boolean isActive(JTable table) 251 { 252 return table.equals(activeTable); 253 } 254 255 public JTable getLeftTable() 256 { 257 return leftTable; 258 } 259 260 public JTable getRightTable() 261 { 262 return rightTable; 263 } 264 265 public String getProseName() 266 { 267 return proseName; 268 } 269 270 public String getProseURL() 271 { 272 return url; 273 } 274 275 public String toString() 276 { 277 return ("JWorksheetProseClientPane: " + proseName); 278 } 279 280 281 protected void customizeTable(JTable table) throws IllegalUserInputException 282 { 283 setActiveTable(table); 284 ((WorksheetSingleClientModel)table.getModel()).addTableModelListener(new TableModelListener () { 285 public void tableChanged(TableModelEvent e) { 286 try 287 { 288 getActiveTable().setPreferredSize(new java.awt.Dimension (getActiveTable().getWidth(), 289 myModel.getActualTableModel().getRowCount() * 290 getActiveTable().getRowHeight())); 291 } 292 catch (IllegalUserInputException e1) 293 {} 294 } 295 }); 296 297 table.getTableHeader().setReorderingAllowed(false); 298 table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 300 table.getColumnModel().getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 301 302 table.getSelectionModel().addListSelectionListener(new ListSelectionListener () { 303 public void valueChanged(ListSelectionEvent e) { 304 try 305 { 306 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 {} 322 } 323 }); 324 325 table.getColumnModel().getSelectionModel().addListSelectionListener(new ListSelectionListener () { 326 public void valueChanged(ListSelectionEvent e) { 327 try 328 { 329 if (e.getValueIsAdjusting()) 331 return; 332 333 myModel.getActualTableModel().setSelectedColumn(getActiveTable().getSelectedColumn()); 334 } 335 catch (IllegalUserInputException e3) 336 {} 337 } 338 }); 339 340 table.addMouseListener(new java.awt.event.MouseAdapter () { 341 public void mousePressed(java.awt.event.MouseEvent evt) { 342 try 343 { 344 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 {} 351 } 352 }); 353 354 table.getColumnModel().getColumn(JOINPOINT_COL_INDEX).setCellRenderer(new MyJPSurrogateRenderer()); 355 } 356 357 358 public static class JToolTipTable extends JTable { 359 360 public String getToolTipText(java.awt.event.MouseEvent e) 361 { 362 Point p = e.getPoint(); 363 Object 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 { 372 public java.awt.Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 373 { 374 java.awt.Component 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 ("Dialog", java.awt.Font.ITALIC, 12)); 380 } 381 return component; 382 } 383 } 384 385 } 386 | Popular Tags |