|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.text.JTextComponent javax.swing.JTextField javax.swing.JFormattedTextField
public class JFormattedTextField
JFormattedTextField
擴展了 JTextField
,添加了對格式化任意值的支持,以及一旦使用者編輯了文本就檢索特定物件的支持。以下程式碼說明了如何配置 JFormattedTextField
來編輯日期:
JFormattedTextField ftf = new JFormattedTextField(); ftf.setValue(new Date());
一旦創建了 JFormattedTextField
,就可以通過添加 PropertyChangeListener
的方式來偵聽編輯更改,並且使用屬性名 value
來偵聽 PropertyChangeEvent
。
JFormattedTextField
允許配置在失去焦點時應該採取的措施。可能的值為:
值 | 描述 |
---|---|
JFormattedTextField.REVERT | 恢復顯示以比對 getValue ,這可能丟失當前的編輯內容。
|
JFormattedTextField.COMMIT | 提交當前值。如果 AbstractFormatter 不認為所編輯的值是合法值,則拋出 ParseException ,然後不更改該值並保留已編輯的值。
|
JFormattedTextField.COMMIT_OR_REVERT | 與 COMMIT 類似,但是如果該值不是合法的,則其行為類似於 REVERT 。
|
JFormattedTextField.PERSIST | 不執行任何操作,不獲取新的 AbstractFormatter 也不更新該值。
|
JFormattedTextField.COMMIT_OR_REVERT
,有關此內容的更多資訊,請參閱 setFocusLostBehavior(int)
。
JFormattedTextField
允許焦點離開,即使當前編輯的值是無效的也是如此。要在 JFormattedTextField
處於無效編輯狀態時鎖定焦點,可以附加一個 InputVerifier
。以下程式碼片斷顯示了這種 InputVerifier
的可能實作:
public class FormattedTextFieldVerifier extends InputVerifier { public boolean verify(JComponent input) { if (input instanceof JFormattedTextField) { JFormattedTextField ftf = (JFormattedTextField)input; AbstractFormatter formatter = ftf.getFormatter(); if (formatter != null) { String text = ftf.getText(); try { formatter.stringToValue(text); return true; } catch (ParseException pe) { return false; } } } return true; } public boolean shouldYieldFocus(JComponent input) { return verify(input); } }
或者,也可以調用 commitEdit
,這也會提交該值。
JFormattedTextField
本身不執行格式化,而是通過從 JFormattedTextField.AbstractFormatterFactory
實例獲得的 JFormattedTextField.AbstractFormatter
實例完成格式化。通過 install
方法的方式使 JFormattedTextField.AbstractFormatter
的實例處於啟動狀態時會通知它們,此時 JFormattedTextField.AbstractFormatter
可以安裝其所需的任何內容,通常是 DocumentFilter
。類似地,當 JFormattedTextField
不再需要 AbstractFormatter
時,它會調用 uninstall
。
JFormattedTextField
通常在獲得或丟失焦點時查詢 AbstractFormatterFactory
以找到 AbstractFormat
。但根據焦點丟失策略也可以更改此行為。如果焦點丟失策略是 JFormattedTextField.PERSIST
並且已編輯了 JFormattedTextField
,則在值提交之前不會查詢 AbstractFormatterFactory
。類似地,如果焦點丟失策略是 JFormattedTextField.COMMIT
並且從 stringToValue
中拋出異常,則丟失或獲得焦點時不查詢 AbstractFormatterFactory
。
JFormattedTextField.AbstractFormatter
還負責確定何時將值提交給 JFormattedTextField
。某些 JFormattedTextField.AbstractFormatter
在每次編輯時都提供新值,而其他的則從不提交該值。可以強行從當前的 JFormattedTextField.AbstractFormatter
獲得當前值,方法是調用 commitEdit
。每當在 JFormattedTextField
中按下了 return 鍵,就調用 commitEdit
。
如果尚未顯式地設置 AbstractFormatterFactory
,則在調用 setValue
後(假定 value 是非 null 的),根據 value 型別的 Class
設置該值。例如,在以下程式碼中將創建一個合適的 AbstractFormatterFactory
和 AbstractFormatter
,以處理數字的格式化:
JFormattedTextField tf = new JFormattedTextField(); tf.setValue(new Number(100));
警告:由於 AbstractFormatter
通常在 Document
上安裝一個 DocumentFilter
,在 JFormattedTextField
上安裝一個 NavigationFilter
,所以您不應安裝自己的過濾器。如果您安裝了,則會看到奇怪的行為,因為將無法強制執行 AbstractFormatter
的編輯策略。
警告:Swing 不是執行緒安全的。有關更多資訊,請參閱 Swing's Threading Policy。
警告:此類別的序列化物件與以後的 Swing 版本不相容。當前序列化支持適用於短期存儲,或適用於在運行相同 Swing 版本的應用程序之間進行 RMI(Remote Method Invocation,遠端方法調用)。從 1.4 版本開始,已在 java.beans
套件中添加了支持所有 JavaBeansTM 長期存儲的功能。請參見 XMLEncoder
。
巢狀類別摘要 | |
---|---|
static class |
JFormattedTextField.AbstractFormatter
JFormattedTextField 所使用的 AbstractFormatter 實例,用於處理從 Object 到 String 和從 String 到 Object 的轉換。 |
static class |
JFormattedTextField.AbstractFormatterFactory
JFormattedTextField 使用的 AbstractFormatterFactory 實例,用來獲得 AbstractFormatter 實例,依次使用該實例格式化各個值。 |
從類別 javax.swing.JTextField 繼承的巢狀類別/介面 |
---|
JTextField.AccessibleJTextField |
從類別 javax.swing.text.JTextComponent 繼承的巢狀類別/介面 |
---|
JTextComponent.AccessibleJTextComponent, JTextComponent.DropLocation, JTextComponent.KeyBinding |
從類別 javax.swing.JComponent 繼承的巢狀類別/介面 |
---|
JComponent.AccessibleJComponent |
從類別 java.awt.Container 繼承的巢狀類別/介面 |
---|
Container.AccessibleAWTContainer |
從類別 java.awt.Component 繼承的巢狀類別/介面 |
---|
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy |
欄位摘要 | |
---|---|
static int |
COMMIT
標識丟失焦點時,應該調用 commitEdit 的常數。 |
static int |
COMMIT_OR_REVERT
標識丟失焦點時,應該調用 commitEdit 的常數。 |
static int |
PERSIST
標識丟失焦點時,應該保留編輯值的常數。 |
static int |
REVERT
標識丟失焦點時,應該將編輯的值恢復為 JFormattedTextField 上所設當前值的常數。 |
從類別 javax.swing.JTextField 繼承的欄位 |
---|
notifyAction |
從類別 javax.swing.text.JTextComponent 繼承的欄位 |
---|
DEFAULT_KEYMAP, FOCUS_ACCELERATOR_KEY |
從類別 javax.swing.JComponent 繼承的欄位 |
---|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
從類別 java.awt.Component 繼承的欄位 |
---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
從介面 javax.swing.SwingConstants 繼承的欄位 |
---|
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST |
從介面 java.awt.image.ImageObserver 繼承的欄位 |
---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
建構子摘要 | |
---|---|
JFormattedTextField()
創建一個沒有 AbstractFormatterFactory 的 JFormattedTextField 。 |
|
JFormattedTextField(Format format)
創建一個 JFormattedTextField 。 |
|
JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
創建一個具有指定 AbstractFormatter 的 JFormattedTextField 。 |
|
JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory)
創建一個具有指定 AbstractFormatterFactory 的 JFormattedTextField 。 |
|
JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory,
Object currentValue)
創建一個具有指定 AbstractFormatterFactory 和初始值的 JFormattedTextField 。 |
|
JFormattedTextField(Object value)
創建一個具有指定值的 JFormattedTextField。 |
方法摘要 | |
---|---|
void |
commitEdit()
強制從 AbstractFormatter 獲得當前值並將其設置為當前值。 |
Action[] |
getActions()
獲取編輯器的命令列表。 |
int |
getFocusLostBehavior()
返回丟失焦點時的行為。 |
JFormattedTextField.AbstractFormatter |
getFormatter()
返回用於格式化和分析當前值的 AbstractFormatter 。 |
JFormattedTextField.AbstractFormatterFactory |
getFormatterFactory()
返回當前的 AbstractFormatterFactory 。 |
String |
getUIClassID()
獲得 UI 的類別 ID。 |
Object |
getValue()
返回最後一個有效值。 |
protected void |
invalidEdit()
使用者輸入無效值時調用。 |
boolean |
isEditValid()
如果所編輯的當前值有效,則返回 true。 |
protected void |
processFocusEvent(FocusEvent e)
處理所有的焦點事件,如 FocusEvent.FOCUS_GAINED 或 FocusEvent.FOCUS_LOST 。 |
protected void |
processInputMethodEvent(InputMethodEvent e)
處理所有的輸入法事件,如 InputMethodEvent.INPUT_METHOD_TEXT_CHANGED 或 InputMethodEvent.CARET_POSITION_CHANGED 。 |
void |
setDocument(Document doc)
將該編輯器與某個文本文檔關聯。 |
void |
setFocusLostBehavior(int behavior)
設置丟失焦點時的行為。 |
protected void |
setFormatter(JFormattedTextField.AbstractFormatter format)
設置當前的 AbstractFormatter 。 |
void |
setFormatterFactory(JFormattedTextField.AbstractFormatterFactory tf)
設置 AbstractFormatterFactory 。 |
void |
setValue(Object value)
設置值,該值由從當前 AbstractFormatterFactory 獲得的 AbstractFormatter 進行格式化。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
欄位詳細資訊 |
---|
public static final int COMMIT
commitEdit
的常數。如果在提交新值的過程中拋出 ParseException
,則將保留無效值。
setFocusLostBehavior(int)
,
常數欄位值public static final int COMMIT_OR_REVERT
commitEdit
的常數。如果在提交新值的過程中拋出 ParseException
,則將恢復原值。
setFocusLostBehavior(int)
,
常數欄位值public static final int REVERT
JFormattedTextField
上所設當前值的常數。
setFocusLostBehavior(int)
,
常數欄位值public static final int PERSIST
setFocusLostBehavior(int)
,
常數欄位值建構子詳細資訊 |
---|
public JFormattedTextField()
AbstractFormatterFactory
的 JFormattedTextField
。使用 setMask
或 setFormatterFactory
配置 JFormattedTextField
以編輯特定的值型別。
public JFormattedTextField(Object value)
value
的型別創建一個 AbstractFormatterFactory
。
value
- JFormattedTextField 的初始值public JFormattedTextField(Format format)
JFormattedTextField
。format
套件裝在一個適當的 AbstractFormatter
中,然後該 AbstractFormatter 套件裝在一個 AbstractFormatterFactory
中。
format
- 用於尋找 AbstractFormatter 的 Formatpublic JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
AbstractFormatter
的 JFormattedTextField
。該 AbstractFormatter
被放置在 AbstractFormatterFactory
中。
formatter
- 進行格式化所使用的 AbstractFormatter。public JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory)
AbstractFormatterFactory
的 JFormattedTextField
。
factory
- 用於進行格式化的 AbstractFormatterFactory。public JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory, Object currentValue)
AbstractFormatterFactory
和初始值的 JFormattedTextField
。
factory
- 用於進行格式化的 AbstractFormatterFactory
。currentValue
- 要使用的初始值方法詳細資訊 |
---|
public void setFocusLostBehavior(int behavior)
JFormattedTextField.COMMIT_OR_REVERT
、JFormattedTextField.REVERT
、JFormattedTextField.COMMIT
或 JFormattedTextField.PERSIST
之一。注意,某些 AbstractFormatter
可能在出現更改時即進行下一步操作,所以該值無效。
如果傳入的物件不是上述值之一,則將拋出 IllegalArgumentException
。
此屬性的預設值為 JFormattedTextField.COMMIT_OR_REVERT
。
behavior
- 標識丟失焦點時的行為
IllegalArgumentException
- 如果 behavior 不是某個已知值public int getFocusLostBehavior()
COMMIT_OR_REVERT
、COMMIT
、REVERT
或 PERSIST
之一。注意,某些 AbstractFormatter
可能在出現更改時即進行下一步操作,所以該值無效。
public void setFormatterFactory(JFormattedTextField.AbstractFormatterFactory tf)
AbstractFormatterFactory
。AbstractFormatterFactory
能夠返回 AbstractFormatter
的實例,它可用於格式化要顯示的某個值,以及強制執行編輯策略。
如果尚未通過此方法(或建構子)顯式地設置 AbstractFormatterFactory
,則根據該值的 Class
使用 AbstractFormatterFactory
,然後使用 AbstractFormatter
。NumberFormatter
用於 Number
,DateFormatter
用於 Dates
,其他值將使用 DefaultFormatter
。
這是一個 JavaBeans 綁定 (bound) 屬性。
tf
- 用於尋找 AbstractFormatter
實例的 AbstractFormatterFactory
public JFormattedTextField.AbstractFormatterFactory getFormatterFactory()
AbstractFormatterFactory
。
AbstractFormatter
的 AbstractFormatterFactory
setFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
protected void setFormatter(JFormattedTextField.AbstractFormatter format)
AbstractFormatter
。
通常不應調用此方法,而是設置 AbstractFormatterFactory
或設置值。當 JFormattedTextField
的狀態更改並且需要重置該值時,JFormattedTextField
將調用此方法。JFormattedTextField
傳入從 AbstractFormatterFactory
所獲得的 AbstractFormatter
。
這是一個 JavaBeans 綁定屬性。
format
- 進行格式化所使用的 AbstractFormattersetFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
public JFormattedTextField.AbstractFormatter getFormatter()
AbstractFormatter
。
public void setValue(Object value)
AbstractFormatterFactory
獲得的 AbstractFormatter
進行格式化。如果尚未指定任何 AbstractFormatterFactory
,則此方法會試圖根據 value
的型別創建它。
此屬性的預設值為 null。
這是一個 JavaBeans 綁定屬性。
value
- 要顯示的當前值public Object getValue()
AbstractFormatter
的編輯策略,此方法可能不會返回當前值。可通過調用 commitEdit
後調用 getValue
來獲得當前編輯的值。
public void commitEdit() throws ParseException
AbstractFormatter
獲得當前值並將其設置為當前值。 如果當前沒有已安裝的 AbstractFormatter
,則此方法無效。
ParseException
- 如果 AbstractFormatter
無法格式化當前值public boolean isEditValid()
AbstractFormatter
進行管理,並且沒有針對它的公共 setter。
protected void invalidEdit()
protected void processInputMethodEvent(InputMethodEvent e)
InputMethodEvent.INPUT_METHOD_TEXT_CHANGED
或 InputMethodEvent.CARET_POSITION_CHANGED
。
JTextComponent
中的 processInputMethodEvent
e
- InputMethodEvent
InputMethodEvent
protected void processFocusEvent(FocusEvent e)
FocusEvent.FOCUS_GAINED
或 FocusEvent.FOCUS_LOST
。
Component
中的 processFocusEvent
e
- FocusEvent
FocusEvent
public Action[] getActions()
JTextField
中的 getActions
public String getUIClassID()
JTextField
中的 getUIClassID
JComponent.getUIClassID()
public void setDocument(Document doc)
JTextField
中的 setDocument
doc
- 要顯示/編輯的文檔JTextComponent.getDocument()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。