|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjava.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 實例的 AbstractFormatterFactorypublic JFormattedTextField.AbstractFormatterFactory getFormatterFactory()
AbstractFormatterFactory。
AbstractFormatter 的 AbstractFormatterFactorysetFormatterFactory(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 中的 processInputMethodEvente - InputMethodEventInputMethodEventprotected void processFocusEvent(FocusEvent e)
FocusEvent.FOCUS_GAINED 或 FocusEvent.FOCUS_LOST。
Component 中的 processFocusEvente - FocusEventFocusEventpublic Action[] getActions()
JTextField 中的 getActionspublic String getUIClassID()
JTextField 中的 getUIClassIDJComponent.getUIClassID()public void setDocument(Document doc)
JTextField 中的 setDocumentdoc - 要顯示/編輯的文檔JTextComponent.getDocument()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。