@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); } } } }