public boolean selectSubTabByPref(Class<? extends SubPreferenceSetting> clazz) { for (PreferenceSetting setting : settings) { if (clazz.isInstance(setting)) { final SubPreferenceSetting sub = (SubPreferenceSetting) setting; final TabPreferenceSetting tab = sub.getTabPreferenceSetting(PreferenceTabbedPane.this); selectTabBy( new TabIdentifier() { @Override public boolean identify(TabPreferenceSetting tps, Object unused) { return tps.equals(tab); } }, null); return tab.selectSubTab(sub); } } return false; }
@Override public void stateChanged(ChangeEvent e) { int index = getSelectedIndex(); Component sel = getSelectedComponent(); if (index > -1 && sel instanceof PreferenceTab) { PreferenceTab tab = (PreferenceTab) sel; TabPreferenceSetting preferenceSettings = tab.getTabPreferenceSetting(); if (!settingsInitialized.contains(preferenceSettings)) { try { getModel().removeChangeListener(this); preferenceSettings.addGui(this); // Add GUI for sub preferences for (PreferenceSetting setting : settings) { if (setting instanceof SubPreferenceSetting) { SubPreferenceSetting sps = (SubPreferenceSetting) setting; if (sps.getTabPreferenceSetting(this) == preferenceSettings) { try { sps.addGui(this); } catch (SecurityException ex) { ex.printStackTrace(); } catch (Throwable ex) { BugReportExceptionHandler.handleException(ex); } finally { settingsInitialized.add(sps); } } } } Icon icon = getIconAt(index); remove(index); insertGUITabsForSetting(icon, preferenceSettings, index); setSelectedIndex(index); } catch (SecurityException ex) { ex.printStackTrace(); } catch (Throwable ex) { // allow to change most settings even if e.g. a plugin fails BugReportExceptionHandler.handleException(ex); } finally { settingsInitialized.add(preferenceSettings); getModel().addChangeListener(this); } } } }