org.jdesktop.swingx.plaf
Class PromptTextUI

java.lang.Object
  extended by javax.swing.plaf.ComponentUI
      extended by javax.swing.plaf.TextUI
          extended by org.jdesktop.swingx.plaf.PromptTextUI
Direct Known Subclasses:
PromptTextAreaUI, PromptTextFieldUI

public abstract class PromptTextUI
extends javax.swing.plaf.TextUI

Abstract TextUI class that delegates most work to another TextUI and additionally renders a prompt text as specified in the JTextComponents client properties by PromptSupport.

Subclasses of this class must provide a prompt component used for rendering the prompt text.

Author:
Peter Weishapl

Nested Class Summary
protected  class PromptTextUI.PainterHighlighter
           
 
Field Summary
protected  javax.swing.plaf.TextUI delegate
          Delegate the hard work to this object.
protected  javax.swing.text.JTextComponent promptComponent
          This component ist painted when rendering the prompt text.
 
Constructor Summary
PromptTextUI(javax.swing.plaf.TextUI delegate)
          Creates a new PromptTextUI which delegates most work to another TextUI.
 
Method Summary
 boolean contains(javax.swing.JComponent c, int x, int y)
           
protected abstract  javax.swing.text.JTextComponent createPromptComponent()
          Creates a component which should be used to render the prompt text.
 void damageRange(javax.swing.text.JTextComponent t, int p0, int p1)
           
 void damageRange(javax.swing.text.JTextComponent t, int p0, int p1, javax.swing.text.Position.Bias firstBias, javax.swing.text.Position.Bias secondBias)
           
 boolean equals(java.lang.Object obj)
           
 javax.accessibility.Accessible getAccessibleChild(javax.swing.JComponent c, int i)
           
 int getAccessibleChildrenCount(javax.swing.JComponent c)
           
 int getBaseline(javax.swing.JComponent c, int width, int height)
          Tries to call ComponentUI#getBaseline(int, int) on the delegate via Reflection.
 javax.swing.text.EditorKit getEditorKit(javax.swing.text.JTextComponent t)
           
 java.awt.Dimension getMaximumSize(javax.swing.JComponent c)
           
 java.awt.Dimension getMinimumSize(javax.swing.JComponent c)
           
 int getNextVisualPositionFrom(javax.swing.text.JTextComponent t, int pos, javax.swing.text.Position.Bias b, int direction, javax.swing.text.Position.Bias[] biasRet)
           
 java.awt.Dimension getPreferredSize(javax.swing.JComponent c)
          When shouldPaintPrompt(JTextComponent) returns true, the prompt component is retrieved by calling getPromptComponent(JTextComponent) and it's preferred size is returned.
 javax.swing.text.JTextComponent getPromptComponent(javax.swing.text.JTextComponent txt)
          Creates a label component, if none has already been created.
 javax.swing.text.View getRootView(javax.swing.text.JTextComponent t)
           
 java.lang.String getToolTipText(javax.swing.text.JTextComponent t, java.awt.Point pt)
           
 int hashCode()
           
 void installUI(javax.swing.JComponent c)
          Calls TextUI#installUI(JComponent) on the delegate and installs a focus listener on c which repaints the component when it gains or loses the focus.
 java.awt.Rectangle modelToView(javax.swing.text.JTextComponent t, int pos)
          Calls #modelToView(JTextComponent, int, Bias) with Position.Bias.Forward.
 java.awt.Rectangle modelToView(javax.swing.text.JTextComponent t, int pos, javax.swing.text.Position.Bias bias)
          Delegate when shouldPaintPrompt(JTextComponent) returns false.
 void paint(java.awt.Graphics g, javax.swing.JComponent c)
          Delegates painting when shouldPaintPrompt(JTextComponent) returns false.
protected  void paintPromptComponent(java.awt.Graphics g, javax.swing.text.JTextComponent txt)
           
 boolean shouldPaintPrompt(javax.swing.text.JTextComponent txt)
          Returns if the prompt or the text field should be painted, depending on the state of txt.
 java.lang.String toString()
           
 void uninstallUI(javax.swing.JComponent c)
          Delegates, then uninstalls the focus listener.
 void update(java.awt.Graphics g, javax.swing.JComponent c)
          Calls super.update(Graphics, JComponent), which in turn calls the paint method of this object.
 int viewToModel(javax.swing.text.JTextComponent t, java.awt.Point pt)
           
 int viewToModel(javax.swing.text.JTextComponent t, java.awt.Point pt, javax.swing.text.Position.Bias[] biasReturn)
           
 
Methods inherited from class javax.swing.plaf.ComponentUI
createUI, getBaselineResizeBehavior
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

delegate

protected final javax.swing.plaf.TextUI delegate
Delegate the hard work to this object.


promptComponent

protected javax.swing.text.JTextComponent promptComponent
This component ist painted when rendering the prompt text.

Constructor Detail

PromptTextUI

public PromptTextUI(javax.swing.plaf.TextUI delegate)
Creates a new PromptTextUI which delegates most work to another TextUI.

Parameters:
delegate -
Method Detail

createPromptComponent

protected abstract javax.swing.text.JTextComponent createPromptComponent()
Creates a component which should be used to render the prompt text.

Returns:

installUI

public void installUI(javax.swing.JComponent c)
Calls TextUI#installUI(JComponent) on the delegate and installs a focus listener on c which repaints the component when it gains or loses the focus.

Overrides:
installUI in class javax.swing.plaf.ComponentUI

uninstallUI

public void uninstallUI(javax.swing.JComponent c)
Delegates, then uninstalls the focus listener.

Overrides:
uninstallUI in class javax.swing.plaf.ComponentUI

getPromptComponent

public javax.swing.text.JTextComponent getPromptComponent(javax.swing.text.JTextComponent txt)
Creates a label component, if none has already been created. Sets the prompt components properties to reflect the given JTextComponents properties and returns it.

Parameters:
txt -
Returns:
the adjusted prompt component

getPreferredSize

public java.awt.Dimension getPreferredSize(javax.swing.JComponent c)
When shouldPaintPrompt(JTextComponent) returns true, the prompt component is retrieved by calling getPromptComponent(JTextComponent) and it's preferred size is returned. Otherwise supergetPreferredSize(JComponent) is called.

Overrides:
getPreferredSize in class javax.swing.plaf.ComponentUI

paint

public void paint(java.awt.Graphics g,
                  javax.swing.JComponent c)
Delegates painting when shouldPaintPrompt(JTextComponent) returns false. Otherwise the prompt component is retrieved by calling getPromptComponent(JTextComponent) and painted. Then the caret of the given text component is painted.

Overrides:
paint in class javax.swing.plaf.ComponentUI

paintPromptComponent

protected void paintPromptComponent(java.awt.Graphics g,
                                    javax.swing.text.JTextComponent txt)

shouldPaintPrompt

public boolean shouldPaintPrompt(javax.swing.text.JTextComponent txt)
Returns if the prompt or the text field should be painted, depending on the state of txt.

Parameters:
txt -
Returns:
true when txt contains not text, otherwise false

update

public void update(java.awt.Graphics g,
                   javax.swing.JComponent c)
Calls super.update(Graphics, JComponent), which in turn calls the paint method of this object.

Overrides:
update in class javax.swing.plaf.ComponentUI

modelToView

public java.awt.Rectangle modelToView(javax.swing.text.JTextComponent t,
                                      int pos,
                                      javax.swing.text.Position.Bias bias)
                               throws javax.swing.text.BadLocationException
Delegate when shouldPaintPrompt(JTextComponent) returns false. Otherwise get the prompt component's UI and delegate to it. This ensures that the Caret is painted on the correct position (this is important when the text is centered, so that the caret will not be painted inside the label text)

Specified by:
modelToView in class javax.swing.plaf.TextUI
Throws:
javax.swing.text.BadLocationException

modelToView

public java.awt.Rectangle modelToView(javax.swing.text.JTextComponent t,
                                      int pos)
                               throws javax.swing.text.BadLocationException
Calls #modelToView(JTextComponent, int, Bias) with Position.Bias.Forward.

Specified by:
modelToView in class javax.swing.plaf.TextUI
Throws:
javax.swing.text.BadLocationException

contains

public boolean contains(javax.swing.JComponent c,
                        int x,
                        int y)
Overrides:
contains in class javax.swing.plaf.ComponentUI

damageRange

public void damageRange(javax.swing.text.JTextComponent t,
                        int p0,
                        int p1,
                        javax.swing.text.Position.Bias firstBias,
                        javax.swing.text.Position.Bias secondBias)
Specified by:
damageRange in class javax.swing.plaf.TextUI

damageRange

public void damageRange(javax.swing.text.JTextComponent t,
                        int p0,
                        int p1)
Specified by:
damageRange in class javax.swing.plaf.TextUI

equals

public boolean equals(java.lang.Object obj)
Overrides:
equals in class java.lang.Object

getAccessibleChild

public javax.accessibility.Accessible getAccessibleChild(javax.swing.JComponent c,
                                                         int i)
Overrides:
getAccessibleChild in class javax.swing.plaf.ComponentUI

getAccessibleChildrenCount

public int getAccessibleChildrenCount(javax.swing.JComponent c)
Overrides:
getAccessibleChildrenCount in class javax.swing.plaf.ComponentUI

getEditorKit

public javax.swing.text.EditorKit getEditorKit(javax.swing.text.JTextComponent t)
Specified by:
getEditorKit in class javax.swing.plaf.TextUI

getMaximumSize

public java.awt.Dimension getMaximumSize(javax.swing.JComponent c)
Overrides:
getMaximumSize in class javax.swing.plaf.ComponentUI

getMinimumSize

public java.awt.Dimension getMinimumSize(javax.swing.JComponent c)
Overrides:
getMinimumSize in class javax.swing.plaf.ComponentUI

getNextVisualPositionFrom

public int getNextVisualPositionFrom(javax.swing.text.JTextComponent t,
                                     int pos,
                                     javax.swing.text.Position.Bias b,
                                     int direction,
                                     javax.swing.text.Position.Bias[] biasRet)
                              throws javax.swing.text.BadLocationException
Specified by:
getNextVisualPositionFrom in class javax.swing.plaf.TextUI
Throws:
javax.swing.text.BadLocationException

getRootView

public javax.swing.text.View getRootView(javax.swing.text.JTextComponent t)
Specified by:
getRootView in class javax.swing.plaf.TextUI

getToolTipText

public java.lang.String getToolTipText(javax.swing.text.JTextComponent t,
                                       java.awt.Point pt)
Overrides:
getToolTipText in class javax.swing.plaf.TextUI

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

viewToModel

public int viewToModel(javax.swing.text.JTextComponent t,
                       java.awt.Point pt,
                       javax.swing.text.Position.Bias[] biasReturn)
Specified by:
viewToModel in class javax.swing.plaf.TextUI

viewToModel

public int viewToModel(javax.swing.text.JTextComponent t,
                       java.awt.Point pt)
Specified by:
viewToModel in class javax.swing.plaf.TextUI

getBaseline

public int getBaseline(javax.swing.JComponent c,
                       int width,
                       int height)
Tries to call ComponentUI#getBaseline(int, int) on the delegate via Reflection. Workaround to maintain compatibility with Java 5. Ideally we should also override ComponentUI.getBaselineResizeBehavior(JComponent), but that's impossible since the Component.BaselineResizeBehavior class, which does not exist in Java 5, is involved.

Overrides:
getBaseline in class javax.swing.plaf.ComponentUI
Returns:
the baseline, or -2 if getBaseline could not be invoked on the delegate.