/* * This file is part of WebLookAndFeel library. * * WebLookAndFeel library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WebLookAndFeel library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WebLookAndFeel library. If not, see <http://www.gnu.org/licenses/>. */ package com.alee.laf.text; import com.alee.api.annotations.NotNull; import com.alee.api.annotations.Nullable; import com.alee.extended.behavior.DocumentChangeBehavior; import com.alee.laf.IInputPrompt; import com.alee.managers.hotkey.HotkeyData; import com.alee.managers.language.*; import com.alee.managers.settings.Configuration; import com.alee.managers.settings.SettingsMethods; import com.alee.managers.settings.SettingsProcessor; import com.alee.managers.settings.UISettingsManager; import com.alee.managers.style.*; import com.alee.managers.tooltip.ToolTipMethods; import com.alee.managers.tooltip.TooltipManager; import com.alee.managers.tooltip.TooltipWay; import com.alee.managers.tooltip.WebCustomTooltip; import com.alee.painter.Painter; import com.alee.painter.PainterSupport; import com.alee.utils.SwingUtils; import com.alee.utils.swing.MouseButton; import com.alee.utils.swing.extensions.*; import javax.swing.*; import javax.swing.text.Document; import java.awt.*; import java.awt.event.FocusAdapter; import java.awt.event.KeyAdapter; import java.awt.event.MouseAdapter; import java.util.List; /** * {@link JPasswordField} extension class. * It contains various useful methods to simplify core component usage. * * This component should never be used with a non-Web UIs as it might cause an unexpected behavior. * You could still use that component even if WebLaF is not your application LaF as this component will use Web-UI in any case. * * @author Mikle Garin * @see JPasswordField * @see WebPasswordFieldUI * @see PasswordFieldPainter */ public class WebPasswordField extends JPasswordField implements IInputPrompt, ILeadingComponent, ITrailingComponent, Styleable, DocumentEventMethods<WebPasswordField>, EventMethods, ToolTipMethods, LanguageMethods, LanguageEventMethods, SettingsMethods, FontMethods<WebPasswordField>, SizeMethods<WebPasswordField> { /** * Constructs new password field. */ public WebPasswordField () { this ( StyleId.auto ); } /** * Constructs new password field. * * @param password initially entered password */ public WebPasswordField ( final String password ) { this ( StyleId.auto, password ); } /** * Constructs new password field. * * @param columns number of columns used to calculate field preferred width */ public WebPasswordField ( final int columns ) { this ( StyleId.auto, columns ); } /** * Constructs new password field. * * @param password initially entered password * @param columns number of columns used to calculate field preferred width */ public WebPasswordField ( final String password, final int columns ) { this ( StyleId.auto, password, columns ); } /** * Constructs new password field. * * @param doc password storage to use * @param password initially entered password * @param columns number of columns used to calculate field preferred width */ public WebPasswordField ( final Document doc, final String password, final int columns ) { this ( StyleId.auto, doc, password, columns ); } /** * Constructs new password field. * * @param id {@link StyleId} */ public WebPasswordField ( final StyleId id ) { this ( id, null, null, 0 ); } /** * Constructs new password field. * * @param id {@link StyleId} * @param password initially entered password */ public WebPasswordField ( final StyleId id, final String password ) { this ( id, null, password, 0 ); } /** * Constructs new password field. * * @param id {@link StyleId} * @param columns number of columns used to calculate field preferred width */ public WebPasswordField ( final StyleId id, final int columns ) { this ( id, null, null, columns ); } /** * Constructs new password field. * * @param id {@link StyleId} * @param password initially entered password * @param columns number of columns used to calculate field preferred width */ public WebPasswordField ( final StyleId id, final String password, final int columns ) { this ( id, null, password, columns ); } /** * Constructs new password field. * * @param id {@link StyleId} * @param doc password storage to use * @param password initially entered password * @param columns number of columns used to calculate field preferred width */ public WebPasswordField ( final StyleId id, final Document doc, final String password, final int columns ) { super ( doc, password, columns ); setStyleId ( id ); } /** * Returns whether or not this editor is empty. * * @return {@code true} if this editor is empty, {@code false} otherwise */ public boolean isEmpty () { return SwingUtils.isEmpty ( this ); } /** * Clears editor text. */ public void clear () { setText ( "" ); } @Nullable @Override public String getInputPrompt () { return getUI ().getInputPrompt (); } @Override public void setInputPrompt ( @Nullable final String text ) { getUI ().setInputPrompt ( text ); } @Nullable @Override public JComponent getLeadingComponent () { return getUI ().getLeadingComponent (); } @Nullable @Override public JComponent setLeadingComponent ( @Nullable final JComponent leadingComponent ) { return getUI ().setLeadingComponent ( leadingComponent ); } @Nullable @Override public JComponent removeLeadingComponent () { return getUI ().removeLeadingComponent (); } @Nullable @Override public JComponent getTrailingComponent () { return getUI ().getTrailingComponent (); } @Nullable @Override public JComponent setTrailingComponent ( @Nullable final JComponent trailingComponent ) { return getUI ().setTrailingComponent ( trailingComponent ); } @Nullable @Override public JComponent removeTrailingComponent () { return getUI ().removeTrailingComponent (); } @NotNull @Override public StyleId getDefaultStyleId () { return StyleId.passwordfield; } @NotNull @Override public StyleId getStyleId () { return StyleManager.getStyleId ( this ); } @NotNull @Override public StyleId setStyleId ( @NotNull final StyleId id ) { return StyleManager.setStyleId ( this, id ); } @NotNull @Override public StyleId resetStyleId () { return StyleManager.resetStyleId ( this ); } @NotNull @Override public Skin getSkin () { return StyleManager.getSkin ( this ); } @Nullable @Override public Skin setSkin ( @NotNull final Skin skin ) { return StyleManager.setSkin ( this, skin ); } @Nullable @Override public Skin setSkin ( @NotNull final Skin skin, final boolean recursively ) { return StyleManager.setSkin ( this, skin, recursively ); } @Nullable @Override public Skin resetSkin () { return StyleManager.resetSkin ( this ); } @Override public void addStyleListener ( @NotNull final StyleListener listener ) { StyleManager.addStyleListener ( this, listener ); } @Override public void removeStyleListener ( @NotNull final StyleListener listener ) { StyleManager.removeStyleListener ( this, listener ); } @Nullable @Override public Painter getCustomPainter () { return StyleManager.getCustomPainter ( this ); } @Nullable @Override public Painter setCustomPainter ( @NotNull final Painter painter ) { return StyleManager.setCustomPainter ( this, painter ); } @Override public boolean resetCustomPainter () { return StyleManager.resetCustomPainter ( this ); } @NotNull @Override public Shape getPainterShape () { return PainterSupport.getShape ( this ); } @Override public boolean isShapeDetectionEnabled () { return PainterSupport.isShapeDetectionEnabled ( this ); } @Override public void setShapeDetectionEnabled ( final boolean enabled ) { PainterSupport.setShapeDetectionEnabled ( this, enabled ); } @Nullable @Override public Insets getMargin () { return PainterSupport.getMargin ( this ); } @Override public void setMargin ( final int margin ) { PainterSupport.setMargin ( this, margin ); } @Override public void setMargin ( final int top, final int left, final int bottom, final int right ) { PainterSupport.setMargin ( this, top, left, bottom, right ); } @Override public void setMargin ( @Nullable final Insets margin ) { PainterSupport.setMargin ( this, margin ); } @Nullable @Override public Insets getPadding () { return PainterSupport.getPadding ( this ); } @Override public void setPadding ( final int padding ) { PainterSupport.setPadding ( this, padding ); } @Override public void setPadding ( final int top, final int left, final int bottom, final int right ) { PainterSupport.setPadding ( this, top, left, bottom, right ); } @Override public void setPadding ( @Nullable final Insets padding ) { PainterSupport.setPadding ( this, padding ); } @NotNull @Override public DocumentChangeBehavior<WebPasswordField> onChange ( @NotNull final DocumentEventRunnable<WebPasswordField> runnable ) { return DocumentEventMethodsImpl.onChange ( this, runnable ); } @NotNull @Override public MouseAdapter onMousePress ( @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMousePress ( this, runnable ); } @NotNull @Override public MouseAdapter onMousePress ( @Nullable final MouseButton mouseButton, @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMousePress ( this, mouseButton, runnable ); } @NotNull @Override public MouseAdapter onMouseEnter ( @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMouseEnter ( this, runnable ); } @NotNull @Override public MouseAdapter onMouseExit ( @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMouseExit ( this, runnable ); } @NotNull @Override public MouseAdapter onMouseDrag ( @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMouseDrag ( this, runnable ); } @NotNull @Override public MouseAdapter onMouseDrag ( @Nullable final MouseButton mouseButton, @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMouseDrag ( this, mouseButton, runnable ); } @NotNull @Override public MouseAdapter onMouseClick ( @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMouseClick ( this, runnable ); } @NotNull @Override public MouseAdapter onMouseClick ( @Nullable final MouseButton mouseButton, @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMouseClick ( this, mouseButton, runnable ); } @NotNull @Override public MouseAdapter onDoubleClick ( @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onDoubleClick ( this, runnable ); } @NotNull @Override public MouseAdapter onMenuTrigger ( @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onMenuTrigger ( this, runnable ); } @NotNull @Override public KeyAdapter onKeyType ( @NotNull final KeyEventRunnable runnable ) { return EventMethodsImpl.onKeyType ( this, runnable ); } @NotNull @Override public KeyAdapter onKeyType ( @Nullable final HotkeyData hotkey, @NotNull final KeyEventRunnable runnable ) { return EventMethodsImpl.onKeyType ( this, hotkey, runnable ); } @NotNull @Override public KeyAdapter onKeyPress ( @NotNull final KeyEventRunnable runnable ) { return EventMethodsImpl.onKeyPress ( this, runnable ); } @NotNull @Override public KeyAdapter onKeyPress ( @Nullable final HotkeyData hotkey, @NotNull final KeyEventRunnable runnable ) { return EventMethodsImpl.onKeyPress ( this, hotkey, runnable ); } @NotNull @Override public KeyAdapter onKeyRelease ( @NotNull final KeyEventRunnable runnable ) { return EventMethodsImpl.onKeyRelease ( this, runnable ); } @NotNull @Override public KeyAdapter onKeyRelease ( @Nullable final HotkeyData hotkey, @NotNull final KeyEventRunnable runnable ) { return EventMethodsImpl.onKeyRelease ( this, hotkey, runnable ); } @NotNull @Override public FocusAdapter onFocusGain ( @NotNull final FocusEventRunnable runnable ) { return EventMethodsImpl.onFocusGain ( this, runnable ); } @NotNull @Override public FocusAdapter onFocusLoss ( @NotNull final FocusEventRunnable runnable ) { return EventMethodsImpl.onFocusLoss ( this, runnable ); } @NotNull @Override public MouseAdapter onDragStart ( final int shift, @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onDragStart ( this, shift, runnable ); } @NotNull @Override public MouseAdapter onDragStart ( final int shift, @Nullable final MouseButton mouseButton, @NotNull final MouseEventRunnable runnable ) { return EventMethodsImpl.onDragStart ( this, shift, mouseButton, runnable ); } @Override public WebCustomTooltip setToolTip ( final String tooltip ) { return TooltipManager.setTooltip ( this, tooltip ); } @Override public WebCustomTooltip setToolTip ( final Icon icon, final String tooltip ) { return TooltipManager.setTooltip ( this, icon, tooltip ); } @Override public WebCustomTooltip setToolTip ( final String tooltip, final TooltipWay tooltipWay ) { return TooltipManager.setTooltip ( this, tooltip, tooltipWay ); } @Override public WebCustomTooltip setToolTip ( final Icon icon, final String tooltip, final TooltipWay tooltipWay ) { return TooltipManager.setTooltip ( this, icon, tooltip, tooltipWay ); } @Override public WebCustomTooltip setToolTip ( final String tooltip, final TooltipWay tooltipWay, final int delay ) { return TooltipManager.setTooltip ( this, tooltip, tooltipWay, delay ); } @Override public WebCustomTooltip setToolTip ( final Icon icon, final String tooltip, final TooltipWay tooltipWay, final int delay ) { return TooltipManager.setTooltip ( this, icon, tooltip, tooltipWay, delay ); } @Override public WebCustomTooltip setToolTip ( final JComponent tooltip ) { return TooltipManager.setTooltip ( this, tooltip ); } @Override public WebCustomTooltip setToolTip ( final JComponent tooltip, final int delay ) { return TooltipManager.setTooltip ( this, tooltip, delay ); } @Override public WebCustomTooltip setToolTip ( final JComponent tooltip, final TooltipWay tooltipWay ) { return TooltipManager.setTooltip ( this, tooltip, tooltipWay ); } @Override public WebCustomTooltip setToolTip ( final JComponent tooltip, final TooltipWay tooltipWay, final int delay ) { return TooltipManager.setTooltip ( this, tooltip, tooltipWay, delay ); } @Override public WebCustomTooltip addToolTip ( final String tooltip ) { return TooltipManager.addTooltip ( this, tooltip ); } @Override public WebCustomTooltip addToolTip ( final Icon icon, final String tooltip ) { return TooltipManager.addTooltip ( this, icon, tooltip ); } @Override public WebCustomTooltip addToolTip ( final String tooltip, final TooltipWay tooltipWay ) { return TooltipManager.addTooltip ( this, tooltip, tooltipWay ); } @Override public WebCustomTooltip addToolTip ( final Icon icon, final String tooltip, final TooltipWay tooltipWay ) { return TooltipManager.addTooltip ( this, icon, tooltip, tooltipWay ); } @Override public WebCustomTooltip addToolTip ( final String tooltip, final TooltipWay tooltipWay, final int delay ) { return TooltipManager.addTooltip ( this, tooltip, tooltipWay, delay ); } @Override public WebCustomTooltip addToolTip ( final Icon icon, final String tooltip, final TooltipWay tooltipWay, final int delay ) { return TooltipManager.addTooltip ( this, icon, tooltip, tooltipWay, delay ); } @Override public WebCustomTooltip addToolTip ( final JComponent tooltip ) { return TooltipManager.addTooltip ( this, tooltip ); } @Override public WebCustomTooltip addToolTip ( final JComponent tooltip, final int delay ) { return TooltipManager.addTooltip ( this, tooltip, delay ); } @Override public WebCustomTooltip addToolTip ( final JComponent tooltip, final TooltipWay tooltipWay ) { return TooltipManager.addTooltip ( this, tooltip, tooltipWay ); } @Override public WebCustomTooltip addToolTip ( final JComponent tooltip, final TooltipWay tooltipWay, final int delay ) { return TooltipManager.addTooltip ( this, tooltip, tooltipWay, delay ); } @Override public void removeToolTip ( final WebCustomTooltip tooltip ) { TooltipManager.removeTooltip ( this, tooltip ); } @Override public void removeToolTips () { TooltipManager.removeTooltips ( this ); } @Override public void removeToolTips ( final WebCustomTooltip... tooltips ) { TooltipManager.removeTooltips ( this, tooltips ); } @Override public void removeToolTips ( final List<WebCustomTooltip> tooltips ) { TooltipManager.removeTooltips ( this, tooltips ); } @Nullable @Override public String getLanguage () { return UILanguageManager.getComponentKey ( this ); } @Override public void setLanguage ( @NotNull final String key, @Nullable final Object... data ) { UILanguageManager.registerComponent ( this, key, data ); } @Override public void updateLanguage ( @Nullable final Object... data ) { UILanguageManager.updateComponent ( this, data ); } @Override public void updateLanguage ( @NotNull final String key, @Nullable final Object... data ) { UILanguageManager.updateComponent ( this, key, data ); } @Override public void removeLanguage () { UILanguageManager.unregisterComponent ( this ); } @Override public boolean isLanguageSet () { return UILanguageManager.isRegisteredComponent ( this ); } @Override public void setLanguageUpdater ( @NotNull final LanguageUpdater updater ) { UILanguageManager.registerLanguageUpdater ( this, updater ); } @Override public void removeLanguageUpdater () { UILanguageManager.unregisterLanguageUpdater ( this ); } @Override public void addLanguageListener ( @NotNull final LanguageListener listener ) { UILanguageManager.addLanguageListener ( getRootPane (), listener ); } @Override public void removeLanguageListener ( @NotNull final LanguageListener listener ) { UILanguageManager.removeLanguageListener ( getRootPane (), listener ); } @Override public void removeLanguageListeners () { UILanguageManager.removeLanguageListeners ( getRootPane () ); } @Override public void addDictionaryListener ( @NotNull final DictionaryListener listener ) { UILanguageManager.addDictionaryListener ( getRootPane (), listener ); } @Override public void removeDictionaryListener ( @NotNull final DictionaryListener listener ) { UILanguageManager.removeDictionaryListener ( getRootPane (), listener ); } @Override public void removeDictionaryListeners () { UILanguageManager.removeDictionaryListeners ( getRootPane () ); } @Override public void registerSettings ( final Configuration configuration ) { UISettingsManager.registerComponent ( this, configuration ); } @Override public void registerSettings ( final SettingsProcessor processor ) { UISettingsManager.registerComponent ( this, processor ); } @Override public void unregisterSettings () { UISettingsManager.unregisterComponent ( this ); } @Override public void loadSettings () { UISettingsManager.loadSettings ( this ); } @Override public void saveSettings () { UISettingsManager.saveSettings ( this ); } @Override public WebPasswordField setPlainFont () { return FontMethodsImpl.setPlainFont ( this ); } @Override public WebPasswordField setPlainFont ( final boolean apply ) { return FontMethodsImpl.setPlainFont ( this, apply ); } @Override public boolean isPlainFont () { return FontMethodsImpl.isPlainFont ( this ); } @Override public WebPasswordField setBoldFont () { return FontMethodsImpl.setBoldFont ( this ); } @Override public WebPasswordField setBoldFont ( final boolean apply ) { return FontMethodsImpl.setBoldFont ( this, apply ); } @Override public boolean isBoldFont () { return FontMethodsImpl.isBoldFont ( this ); } @Override public WebPasswordField setItalicFont () { return FontMethodsImpl.setItalicFont ( this ); } @Override public WebPasswordField setItalicFont ( final boolean apply ) { return FontMethodsImpl.setItalicFont ( this, apply ); } @Override public boolean isItalicFont () { return FontMethodsImpl.isItalicFont ( this ); } @Override public WebPasswordField setFontStyle ( final boolean bold, final boolean italic ) { return FontMethodsImpl.setFontStyle ( this, bold, italic ); } @Override public WebPasswordField setFontStyle ( final int style ) { return FontMethodsImpl.setFontStyle ( this, style ); } @Override public WebPasswordField setFontSize ( final int fontSize ) { return FontMethodsImpl.setFontSize ( this, fontSize ); } @Override public WebPasswordField changeFontSize ( final int change ) { return FontMethodsImpl.changeFontSize ( this, change ); } @Override public int getFontSize () { return FontMethodsImpl.getFontSize ( this ); } @Override public WebPasswordField setFontSizeAndStyle ( final int fontSize, final boolean bold, final boolean italic ) { return FontMethodsImpl.setFontSizeAndStyle ( this, fontSize, bold, italic ); } @Override public WebPasswordField setFontSizeAndStyle ( final int fontSize, final int style ) { return FontMethodsImpl.setFontSizeAndStyle ( this, fontSize, style ); } @Override public WebPasswordField setFontName ( final String fontName ) { return FontMethodsImpl.setFontName ( this, fontName ); } @Override public String getFontName () { return FontMethodsImpl.getFontName ( this ); } @Override public int getPreferredWidth () { return SizeMethodsImpl.getPreferredWidth ( this ); } @NotNull @Override public WebPasswordField setPreferredWidth ( final int preferredWidth ) { return SizeMethodsImpl.setPreferredWidth ( this, preferredWidth ); } @Override public int getPreferredHeight () { return SizeMethodsImpl.getPreferredHeight ( this ); } @NotNull @Override public WebPasswordField setPreferredHeight ( final int preferredHeight ) { return SizeMethodsImpl.setPreferredHeight ( this, preferredHeight ); } @NotNull @Override public Dimension getPreferredSize () { return SizeMethodsImpl.getPreferredSize ( this, super.getPreferredSize () ); } @NotNull @Override public Dimension getOriginalPreferredSize () { return SizeMethodsImpl.getOriginalPreferredSize ( this, super.getPreferredSize () ); } @NotNull @Override public WebPasswordField setPreferredSize ( final int width, final int height ) { return SizeMethodsImpl.setPreferredSize ( this, width, height ); } @Override public int getMaximumWidth () { return SizeMethodsImpl.getMaximumWidth ( this ); } @NotNull @Override public WebPasswordField setMaximumWidth ( final int maximumWidth ) { return SizeMethodsImpl.setMaximumWidth ( this, maximumWidth ); } @Override public int getMaximumHeight () { return SizeMethodsImpl.getMaximumHeight ( this ); } @NotNull @Override public WebPasswordField setMaximumHeight ( final int maximumHeight ) { return SizeMethodsImpl.setMaximumHeight ( this, maximumHeight ); } @NotNull @Override public Dimension getMaximumSize () { return SizeMethodsImpl.getMaximumSize ( this, super.getMaximumSize () ); } @NotNull @Override public Dimension getOriginalMaximumSize () { return SizeMethodsImpl.getOriginalMaximumSize ( this, super.getMaximumSize () ); } @NotNull @Override public WebPasswordField setMaximumSize ( final int width, final int height ) { return SizeMethodsImpl.setMaximumSize ( this, width, height ); } @Override public int getMinimumWidth () { return SizeMethodsImpl.getMinimumWidth ( this ); } @NotNull @Override public WebPasswordField setMinimumWidth ( final int minimumWidth ) { return SizeMethodsImpl.setMinimumWidth ( this, minimumWidth ); } @Override public int getMinimumHeight () { return SizeMethodsImpl.getMinimumHeight ( this ); } @NotNull @Override public WebPasswordField setMinimumHeight ( final int minimumHeight ) { return SizeMethodsImpl.setMinimumHeight ( this, minimumHeight ); } @NotNull @Override public Dimension getMinimumSize () { return SizeMethodsImpl.getMinimumSize ( this, super.getMinimumSize () ); } @NotNull @Override public Dimension getOriginalMinimumSize () { return SizeMethodsImpl.getOriginalMinimumSize ( this, super.getMinimumSize () ); } @NotNull @Override public WebPasswordField setMinimumSize ( final int width, final int height ) { return SizeMethodsImpl.setMinimumSize ( this, width, height ); } /** * Returns the look and feel (LaF) object that renders this component. * * @return the {@link WPasswordFieldUI} object that renders this component */ @Override public WPasswordFieldUI getUI () { return ( WPasswordFieldUI ) super.getUI (); } /** * Sets the LaF object that renders this component. * * @param ui {@link WPasswordFieldUI} */ public void setUI ( final WPasswordFieldUI ui ) { super.setUI ( ui ); } @Override public void updateUI () { StyleManager.getDescriptor ( this ).updateUI ( this ); } @Override public String getUIClassID () { return StyleManager.getDescriptor ( this ).getUIClassId (); } }