protected WMSPanel addNewPanel(final JTabbedPane tabPane) { final WMSPanel wmsPanel = new WMSPanel(null); // the null indicates not to register the panel wmsPanel.initialize(this.controller); wmsPanel.getJPanel().putClientProperty("WMS_PANEL", wmsPanel); tabPane.putClientProperty(wmsPanel.getURLString(), wmsPanel); tabPane.addTab("New Server", wmsPanel.getJPanel()); tabPane.setSelectedIndex(tabPane.getTabCount() - 1); tabPane.setToolTipTextAt(tabbedPane.getSelectedIndex(), "Server WMS Contents"); wmsPanel.addPropertyChangeListener( new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals("NewServer")) { String serverLocation = (String) evt.getNewValue(); if (WWUtil.isEmpty(serverLocation)) return; // // // Check to see if it's already open. // for (int i = 0; i < tabbedPane.getTabCount(); i++) // { // JPanel jp = (JPanel) tabbedPane.getTabComponentAt(i); // if (jp != null) // { // WMSPanel wp = (WMSPanel) // jp.getClientProperty("WMS_PANEL"); // if (wp != null && // wp.getURLString().equalsIgnoreCase(serverLocation)) // { // tabbedPane.setSelectedIndex(i); // make it the // visible one // return; // } // } // } try { addNewPanel(tabPane).contactWMSServer(serverLocation); } catch (URISyntaxException e) { e.printStackTrace(); // TODO } } } }); return wmsPanel; }
/* * Tab has changed. Focus on saved component for the given tab. * When there is no saved component, focus on the first component. */ public void stateChanged(ChangeEvent e) { Component key = tabbedPane.getComponentAt(tabbedPane.getSelectedIndex()); if (key == null) return; Component value = tabFocus.get(key); // First time selecting this tab or focus policy is RESET_FOCUS if (value == null) { key.transferFocus(); tabFocus.put(key, value); } else // Use the saved component for focusing { value.requestFocusInWindow(); } }
/* * Track focus changes and update the current focus component * for the current tab */ public void propertyChange(PropertyChangeEvent e) { // No need to track focus change if (exceptions == null && focusPolicy == RESET_FOCUS) return; // Check for exceptions to the focus policy exist Component key = tabbedPane.getComponentAt(tabbedPane.getSelectedIndex()); if (exceptions != null) { if (focusPolicy == RESET_FOCUS && !exceptions.contains(key)) return; if (focusPolicy == RETAIN_FOCUS && exceptions.contains(key)) return; } // Track focus changes for the tab Component value = (Component) e.getNewValue(); if (value != null && SwingUtilities.isDescendingFrom(value, key)) { tabFocus.put(key, value); } }