bb.gui
Class DialogInputSecure
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Dialog
javax.swing.JDialog
bb.gui.DialogInputSecure
- All Implemented Interfaces:
- ImageObserver, MenuContainer, Serializable, Accessible, RootPaneContainer, WindowConstants
public class DialogInputSecure
- extends JDialog
Subclass of JDialog
which lets the user input some highly sensitive piece of text (e.g. a password).
The text is entered in a TextFieldSecure
instance inside the dialog.
This class allows optional header text above the TextFieldSecure (e.g. for instructions, a password hint, etc),
as well as requires prompt text on the left to label the TextFieldSecure.
It automatically puts a label on the right which specifies the maximum number of chars that may be entered.
The only public member is the static getInputSecure
method, which is all that normal users will use.
For subclassing purposes, the other members of this class have protected access.
Like typical Java GUI code, this class's GUI parts (the constructor and all instance methods) are not multithread safe:
they expect to only be called by EventQueue
's dispatch thread
.
This threading limitation is checked in every such public method.
Note, however, that the chief public API method, getInputSecure
, may be safely called by any thread.
- Author:
- Brent Boyer
- See Also:
- Serialized Form
Nested Class Summary |
private static class |
DialogInputSecure.DialogTask
Bridges the requirement of getInputSecure that any thread can call that method
with the requirement of the constructor that only EventQueue's dispatch thread can call it. |
static class |
DialogInputSecure.UnitTest
See the Overview page of the project's javadocs for a general description of this unit test class. |
Methods inherited from class javax.swing.JDialog |
addImpl, createRootPane, dialogInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update |
Methods inherited from class java.awt.Dialog |
addNotify, getModalityType, getTitle, hide, isModal, isResizable, isUndecorated, setModal, setModalityType, setResizable, setTitle, setUndecorated, setVisible, show, toBack |
Methods inherited from class java.awt.Window |
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeNotify, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImage, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, toFront |
Methods inherited from class java.awt.Container |
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree |
Methods inherited from class java.awt.Component |
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle |
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
textFieldSecure
private final TextFieldSecure textFieldSecure
- A
TextFieldSecure
instance that is used by this class to input highly sensitive text.
DialogInputSecure
protected DialogInputSecure(Frame parent,
String title,
boolean modal,
String header,
String prompt,
int numberCharsMax)
throws IllegalArgumentException
- Constructs a new DialogInputSecure instance.
- Parameters:
parent
- the parent Frame that this JDialog will be attached to; may be nulltitle
- the dialog's title; may be nullmodal
- specifies whether or not this JDialog is a modal dialogheader
- optional text (e.g. instructions, a password hint) displayed above the TextFieldSecure;
this text will be put into a JLabel, so it may be html formatted; may be nullprompt
- mandatory text displayed next to the TextFieldSecure;
this text will be put into a JLabel, so it may be html formatted; must be non-blanknumberCharsMax
- the maximum number of chars that may be typed in the TextFieldSecure
as well as the number of columns in the TextFieldSecure (this affects its displayed width); must be > 0
- Throws:
IllegalArgumentException
- if prompt is blank; numberCharsMax <= 0
getInputSecure
public static final char[] getInputSecure(Frame parent,
String title,
boolean modal,
String header,
String prompt,
int numberCharsMax)
throws InterruptedException,
InvocationTargetException
- Reads and returns some sensitive piece of information (e.g. a password) from a new DialogInputSecure instance.
The result is a char[], not a String, so that it can be zeroed out after use.
See the constructor
for documentation of all the params and throws.
Note: any thread may safely call this method.
- Throws:
InterruptedException
- if the calling thread is interrupted will waiting inside this method
InvocationTargetException
- if a problem happens while reading user input;
this Exception will wrap some underlying one (e.g. an IllegalArgumentException if one of the args of this method is invalid)
buildGui
protected JComponent buildGui(String header,
String prompt,
int numberCharsMax)
buildSecureEntry
protected JComponent buildSecureEntry(String prompt,
int numberCharsMax)
buildButtons
protected JComponent buildButtons()