|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.text.JTextComponent javax.swing.JEditorPane
public class JEditorPane
可編輯各種內容的文本元件。有關基礎知識資訊和使用編輯器窗格的範例,請參閱 The Java Tutorial 中的 Using Text Components 一節。
此元件使用 EditorKit
的實作來完成其操作。對於給予它的各種內容,它能有效地將其形態變換為適當的文本編輯器種類別。該編輯器在任意給定時間的內容型別都由當前已安裝的 EditorKit
確定。如果將內容設置為新的 URL,則使用其型別來確定載入該內容所應使用的 EditorKit
。
預設情況下,已知下列內容型別:
DefaultEditorKit
的擴展,可產生有換行的純文本視圖。
javax.swing.text.html.HTMLEditorKit
,支持 HTML 3.2。
javax.swing.text.rtf.RTFEditorKit
,它提供了對多樣化文本格式 (Rich Text Format) 的有限支持。
有多種方式可將內容載入到此元件中。
setText
方法來初始化字元串元件。在這種情況下,將使用當前的 EditorKit
,且此型別為期望的內容型別。
read
方法來初始化 Reader
元件。注意,如果內容型別為 HTML,那麼只有使用了 <base> 標記,或者設置了 HTMLDocument
上的 Base 屬性時才能解析相關的參考(例如對於類似圖像等內容)。在這種情況下,將使用當前的 EditorKit
,且此型別為期望的內容型別。
setPage
方法來初始化 URL 元件。在這種情況下,將根據該 URL 來確定內容型別,並且設置為該內容型別所註冊的 EditorKit
。
某些內容型別可能通過產生超連接事件來提供對超連接的支持。如果 JEditorPane
是不可編輯的(已調用了 JEditorPane.setEditable(false);
),則 HTML EditorKit
將產生超連接事件。如果文檔中嵌入了 HTML frame,則典型的回應是更改當前文檔的某一部分。以下程式碼片段是一種可能的超連接偵聽器實作,它特殊對待 HTML frame 事件,並且簡單地顯示其他所有已啟動的超連接。
class Hyperactive implements HyperlinkListener {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
JEditorPane pane = (JEditorPane) e.getSource();
if (e instanceof HTMLFrameHyperlinkEvent) {
HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent)e;
HTMLDocument doc = (HTMLDocument)pane.getDocument();
doc.processHTMLFrameHyperlinkEvent(evt);
} else {
try {
pane.setPage(e.getURL());
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}
}
有關自定義如何呈現 text/html 的資訊,請參閱 W3C_LENGTH_UNITS
和 HONOR_DISPLAY_PROPERTIES
某些文檔中與文化相關的資訊是通過一種稱為字元編碼的機制來處理的。字元編碼是字元集的成員(字母、象形文字、數字、符號或控制函數)和具體數字程式碼值的明確映射關係。它表示了檔案的存儲方式。字元編碼有 ISO-8859-1、ISO-8859-5、Shift-jis、Euc-jp 和 UTF-8。將檔案傳遞給使用者代理 (JEditorPane
) 時,該檔案被轉換為文檔字元集 (ISO-10646 aka Unicode)。
有多種方式可獲得使用 JEditorPane
時所用的字元集映射關係。
EditorKit
.read 操作拋出將要被捕獲的 ChangedCharSetException
。然後使用新的 Reader 重新開始該 read 操作,該 Reader 使用 ChangedCharSetException
(這是一個 IOException
)中所指定的字元集。
警告: Swing 不是執行緒安全的。有關更多資訊,請參閱 Swing's Threading Policy。
警告:此類別的序列化物件與以後的 Swing 版本不相容。當前序列化支持適用於短期存儲,或適用於在運行相同 Swing 版本的應用程序之間進行 RMI(Remote Method Invocation,遠端方法調用)。從 1.4 版本開始,已在 java.beans
套件中添加了支持所有 JavaBeansTM 長期存儲的功能。請參見 XMLEncoder
。
巢狀類別摘要 | |
---|---|
protected class |
JEditorPane.AccessibleJEditorPane
此類別實作對 JEditorPane 類別的可存取性支持。 |
protected class |
JEditorPane.AccessibleJEditorPaneHTML
此類別提供了對 AccessibleHypertext 的支持,並且用於這類別實例中:在此 JEditorPane 中安裝的 EditorKit 是一個 HTMLEditorKit 實例。 |
protected class |
JEditorPane.JEditorPaneAccessibleHypertextSupport
AccessibleJEditorPaneHTML.getAccessibleText 返回的內容。 |
從類別 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 String |
HONOR_DISPLAY_PROPERTIES
用於客戶機屬性的關鍵字,指示如果在樣式化文本中未指定字體或前景色,那麼是否使用該元件的預設字體和前景色。 |
static String |
W3C_LENGTH_UNITS
用於客戶機屬性的關鍵字,指示是否為 html 呈現使用 w3c 相容的長度單位。 |
從類別 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 |
從介面 java.awt.image.ImageObserver 繼承的欄位 |
---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
建構子摘要 | |
---|---|
JEditorPane()
創建一個新的 JEditorPane 。 |
|
JEditorPane(String url)
根據包含 URL 規範的字元串創建一個 JEditorPane 。 |
|
JEditorPane(String type,
String text)
創建一個已初始化為給定檔案的 JEditorPane 。 |
|
JEditorPane(URL initialPage)
根據用作輸入的指定 URL 創建一個 JEditorPane 。 |
方法摘要 | |
---|---|
void |
addHyperlinkListener(HyperlinkListener listener)
為了通知所有的更改(例如選中和進入某個連接)而添加一個超連接偵聽器。 |
protected EditorKit |
createDefaultEditorKit()
首次創建元件時,創建預設的編輯器工具套件 ( PlainEditorKit )。 |
static EditorKit |
createEditorKitForContentType(String type)
根據預設的編輯器工具套件註冊表為給定的型別創建處理程序。 |
void |
fireHyperlinkUpdate(HyperlinkEvent e)
通知因對此事件型別的通知感興趣而已註冊的所有偵聽器。 |
AccessibleContext |
getAccessibleContext()
獲取與此 JEditorPane 關聯的 AccessibleContext。 |
String |
getContentType()
獲得設置此編輯器當前要處理的內容型別。 |
EditorKit |
getEditorKit()
獲取用於處理內容的、當前已安裝的工具套件。 |
static String |
getEditorKitClassNameForContentType(String type)
返回當前向型別 type 所註冊的 EditorKit 類別名。 |
EditorKit |
getEditorKitForContentType(String type)
獲取用於給定內容型別的編輯器工具套件。 |
HyperlinkListener[] |
getHyperlinkListeners()
返回使用 addHyperlinkListener() 添加到此 JEditorPane 的所有 HyperLinkListener 的陣列。 |
URL |
getPage()
獲得當前正在顯示的 URL。 |
Dimension |
getPreferredSize()
返回該 JEditorPane 的首選大小。 |
boolean |
getScrollableTracksViewportHeight()
如果某個視口始終應該強迫此 Scrollable 的高度符合該視口的高度,則返回 true。 |
boolean |
getScrollableTracksViewportWidth()
如果某個視口始終應該強迫此 Scrollable 的寬度符合該視口的寬度,則返回 true。 |
protected InputStream |
getStream(URL page)
獲取給定 URL 的串流,該 URL 是將要由 setPage 方法載入的。 |
String |
getText()
根據此編輯器的內容型別返回此 TextComponent 中所包含的文本。 |
String |
getUIClassID()
獲得該 UI 的類別 ID。 |
protected String |
paramString()
返回此 JEditorPane 的字元串表示形式。 |
void |
read(InputStream in,
Object desc)
此方法根據串流進行初始化。 |
static void |
registerEditorKitForContentType(String type,
String classname)
建立 type 到 classname 的預設綁定。 |
static void |
registerEditorKitForContentType(String type,
String classname,
ClassLoader loader)
建立 type 到 classname 的預設綁定。 |
void |
removeHyperlinkListener(HyperlinkListener listener)
移除超連接偵聽器。 |
void |
replaceSelection(String content)
用由給定字元串表示的新內容替換當前選中的內容。 |
void |
scrollToReference(String reference)
將視圖滾動到給定的參考位置(也就是正在顯示的 URL 的 UL.getRef 方法所返回的值)。 |
void |
setContentType(String type)
設置此編輯器所處理的內容型別。 |
void |
setEditorKit(EditorKit kit)
設置當前為處理內容而安裝的工具套件。 |
void |
setEditorKitForContentType(String type,
EditorKit k)
直接設置用於給定型別的編輯器工具套件。 |
void |
setPage(String url)
設置當前要顯示的 URL。 |
void |
setPage(URL page)
設置當前要顯示的 URL。 |
void |
setText(String t)
將此 TextComponent 的文本設置為指定內容,預期以此編輯器的內容型別格式提供該內容。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
欄位詳細資訊 |
---|
public static final String W3C_LENGTH_UNITS
預設不啟用此屬性;要啟用它,可將帶有此名稱的客戶機 property
設置為 Boolean.TRUE
。
public static final String HONOR_DISPLAY_PROPERTIES
根據外觀的不同,該預設值有所不同;要啟用該屬性,可將帶有此名稱的客戶機 property
設置為 Boolean.TRUE
。
建構子詳細資訊 |
---|
public JEditorPane()
JEditorPane
。文檔模型被設置為 null
。
public JEditorPane(URL initialPage) throws IOException
JEditorPane
。
initialPage
- URL
IOException
- 如果該 URL 為 null
或者無法存取public JEditorPane(String url) throws IOException
JEditorPane
。
url
- URL
IOException
- 如果該 URL 為 null
或者無法存取public JEditorPane(String type, String text)
JEditorPane
。這是調用 setContentType
和 setText
方法的便捷建構子。
type
- 給定文本的 mime 型別text
- 初始化所使用的文本;可能為 null
NullPointerException
- 如果 type
參數為 null
方法詳細資訊 |
---|
public void addHyperlinkListener(HyperlinkListener listener)
listener
- 偵聽器public void removeHyperlinkListener(HyperlinkListener listener)
listener
- 偵聽器public HyperlinkListener[] getHyperlinkListeners()
HyperLinkListener
的陣列。
HyperLinkListener
,如果尚未添加偵聽器,則返回一個空陣列public void fireHyperlinkUpdate(HyperlinkEvent e)
EditorKit
調用此方法。從後向前處理偵聽器列表。
e
- 事件EventListenerList
public void setPage(URL page) throws IOException
null
的,則創建一個新的預設文檔並將 URL 讀入該文檔。如果該 URL 套件含並參考了位置,則通過調用 scrollToReference
方法滾動到該位置。如果所需的 URL 就是當前所顯示的,則不會重新載入該文檔。要強行重新載入某個文檔,必須清除該文檔的串流描述屬性。以下程式碼顯示了如何完成該任務:
Document doc = jEditorPane.getDocument(); doc.putProperty(Document.StreamDescriptionProperty, null);如果所需的 URL 不是當前所顯示的,則調用
getStream
方法,讓子類別控制所提供的串流。
這可能會同步或非同步地載入,具體取決於 EditorKit
所返回的文檔。如果該 Document
的型別是 AbstractDocument
並且具有由大於或等於零的 AbstractDocument.getAsynchronousLoadPriority
返回的值,則使用該優先級將該頁面載入到單獨的執行緒中。
如果同步載入文檔,則先使用串流填充文檔,然後通過調用 setDocument
將其安裝到編輯器中,而該調用將觸發屬性更改事件。如果拋出 IOException
,則丟棄部分載入的文檔,並且不觸發文檔和頁面屬性更改事件。如果成功載入並安裝了該文檔,則由 UI 為其建立一個視圖,如有必要,接著滾動該 UI,之後觸發頁面屬性更改事件。
如果非同步載入該文檔,則立即通過調用 setDocument
(這會觸發文檔屬性更改事件)將該文檔安裝到編輯器中,然後創建一個執行緒,而該執行緒將開始執行實際的載入工作。在這種情況下,直接調用此方法不會觸發頁面屬性更改事件,而在執行緒載入結束時會觸發該事件。在事件排程執行緒上也會觸發該事件。因為調用執行緒無法在其他執行緒上出現失敗事件的情況下拋出 IOException
,所以在其他執行緒完成任務時(不管載入是否成功)將觸發頁面屬性更改事件。
page
- 頁面的 URL
IOException
- 對於 null
或無效的頁面規範,或者來自所讀取的串流的異常getPage()
public void read(InputStream in, Object desc) throws IOException
HTMLEditorKit
型別,並且 desc
參數是 HTMLDocument
,則此方法調用 HTMLEditorKit
來初始化讀取。否則它調用以純文本的方式載入模型的父級類別方法。
in
- 從中讀取的串流desc
- 描述串流的物件
IOException
- 由用於初始化的串流拋出JTextComponent.read(java.io.Reader, java.lang.Object)
,
JTextComponent.setDocument(javax.swing.text.Document)
protected InputStream getStream(URL page) throws IOException
setPage
方法載入的。預設情況下,這只是簡單地打開該 URL 並返回串流。可重新實作此方法以執行有用的任務,例如從快取記憶體中獲取串流、監視該串流的進程等等。
期望此方法具有的副作用是:建立該內容型別,從而設置載入串流所要使用的合適的 EditorKit
。
如果該串流為 http 連接,那麼接著會進行重定向,並將得到的 URL 設置為 Document.StreamDescriptionProperty
,這樣即可正確地解析相關的 URL。
page
- 頁面 URL
IOException
public void scrollToReference(String reference)
UL.getRef
方法所返回的值)。預設情況下,此方法僅知道如何在 HTMLDocument 中定位一個參考位置。該實作調用 scrollRectToVisible
方法來完成實際的滾動。如果 HTML 之外的文檔型別需要滾動到參考位置,則應該重新實作此方法。如果元件不可見,則此方法無效。
reference
- 要滾動到的指定位置public URL getPage()
null
,並且不解析相關的 URL。
null
public void setPage(String url) throws IOException
url
- 要顯示的 URL
IOException
- 對於 null
或無效的 URL 規範public String getUIClassID()
JComponent
中的 getUIClassID
JComponent.getUIClassID()
,
UIDefaults.getUI(javax.swing.JComponent)
protected EditorKit createDefaultEditorKit()
PlainEditorKit
)。
public EditorKit getEditorKit()
createDefaultEditorKit
來安裝預設的工具套件。
public final String getContentType()
EditorKit
相關聯的型別。
null
public final void setContentType(String type)
getEditorKitForContentType
,然後調用 setEditorKit
。作為直接調用 setEditorKit
的一種替代方式,這是可用的最便捷的方法。
如果將字元集定義指定為內容型別規範的參數,則在使用關聯的 EditorKit
載入輸入串流時使用它。例如,如果 type 指定為 text/html; charset=EUC-JP
,則用註冊為 text/html
的 EditorKit
載入內容,並且提供給該 EditorKit
以便將 unicode 載入到文檔中的 Reader 將使用 EUC-JP
字元集轉換到 unicode。如果無法識別該 type,則使用為純文本 text/plain
註冊的 EditorKit
載入內容。
type
- 支持內容編輯的非 null
mime 型別
NullPointerException
- 如果 type
參數為 null
getContentType()
public void setEditorKit(EditorKit kit)
null
,則安裝新的工具套件並為其創建預設文檔。調用 setEditorKit
時始終觸發 PropertyChange
事件 ("editorKit")。
註:這具有更改模型的副作用,因為 EditorKit
是模擬特定內容型別的方式的根源。此方法將導致代表調用者來調用 setDocument
,以確保內部狀態的完整性。
kit
- 所需的編輯器行為getEditorKit()
public EditorKit getEditorKitForContentType(String type)
EditorKit
,則它會嘗試根據預設的 EditorKit
註冊表創建一個 EditorKit
。如果創建失敗,則在假定所有文本文檔都可以表示為純文本的基礎上使用 PlainEditorKit
。
可重新實作此方法,以使用某個其他的註冊表型別。例如,可重新實作它以使用 Java Activation Framework。
type
- 非 null
的內容型別
public void setEditorKitForContentType(String type, EditorKit k)
createEditorKitForContentType
為具有某種外觀偏好的內容型別安裝處理程序。
type
- 非 null
的內容型別k
- 要設置的編輯器工具套件public void replaceSelection(String content)
null
),那麼就等效於移除當前的選擇。替換文本具有當前為輸入所定義的各種屬性。如果該元件是不可編輯的,則發出蜂鳴聲並返回。
雖然大多數 Swing 方法不是執行緒安全的,但此方法是執行緒安全的。有關更多資訊,請參見 How to Use Threads。
JTextComponent
中的 replaceSelection
content
- 要替換選擇內容的內容。此值可以為 null
public static EditorKit createEditorKitForContentType(String type)
ClassLoader
註冊了該型別,則使用該 ClassLoader
載入該原型。如果沒有已註冊的 ClassLoader
,則使用 Class.forName
載入該原型。
一旦成功地找到 EditorKit
實例,則複製它並返回該副本。
type
- 內容型別
null
public static void registerEditorKitForContentType(String type, String classname)
type
到 classname
的預設綁定。實際需要該類別時,將在稍後動態地載入該類別,並且在使用前可安全地更改,以避免載入不需要的類別。使用此方法註冊後,將使用 Class.forName
載入 EditorKit
原型。
type
- 非 null
的內容型別classname
- 稍後載入的類別public static void registerEditorKitForContentType(String type, String classname, ClassLoader loader)
type
到 classname
的預設綁定。實際需要該類別時,將在稍後使用給定的 ClassLoader
動態地載入該類別,並且在使用前可安全地更改,以避免載入不需要的類別。
type
- 非 null
的內容型別classname
- 稍後載入的類別loader
- 用於載入該名稱的類別的 ClassLoader
public static String getEditorKitClassNameForContentType(String type)
type
所註冊的 EditorKit
類別名。
type
- 非 null
的內容型別public Dimension getPreferredSize()
JEditorPane
的首選大小。JEditorPane
的首選大小與父級類別的首選大小稍微有所不同。如果視口 (viewport) 的大小已經小於元件的最低大小,則用於追蹤寬度或高度的可滾動定義將變為 false。預設的視口佈局將給出首選大小,並且該大小在可滾動定義正在進行追蹤的情況下是不需要的。在這種情況下,將正常的 首選大小調整為最低大小。這就允許將 HTML 表縮小為其最低大小,然後以其最低大小進行佈局,而不再做進一步的縮小。
JComponent
中的 getPreferredSize
Dimension
JComponent.setPreferredSize(java.awt.Dimension)
,
ComponentUI
public void setText(String t)
TextComponent
的文本設置為指定內容,預期以此編輯器的內容型別格式提供該內容。例如,如果將型別設置為 text/html
,則應按照 HTML 指定該字元串。
實作此方法可移除當前文檔的內容,並通過使用當前的 EditorKit
分析給定字元串來替換該內容。這提供了父級類別的語義,方法是不更改模型,同時支持當前在此元件上所設置的內容型別。前提是以前的內容相對較少,並且以前的內容沒有副作用。可以違反這兩個前提,但這會導致不需要的結果。為了避免發生此情況,可用 getEditorKit().createDefaultDocument()
創建一個新文檔,並用該新文檔替換現有的 Document
。然後就可以確保以前的 Document
沒有任何遺留的狀態。
載入帶有字元串的此元件的另一種方式是創建一個 StringReader 並調用 read 方法。在這種情況下,使用字元串內容初始化模型後將替換該模型。
雖然大多數 Swing 方法不是執行緒安全的,但此方法是執行緒安全的。有關更多資訊,請參閱 How to Use Threads。
JTextComponent
中的 setText
t
- 要設置的新文本;如果為 null
,則刪除舊的文本getText()
public String getText()
TextComponent
中所包含的文本。如果試圖檢索文本的同時拋出異常,則返回 null
。實作此方法以調用帶有 StringWriter
的 JTextComponent.write
。
JTextComponent
中的 getText
setText(java.lang.String)
public boolean getScrollableTracksViewportWidth()
Scrollable
的寬度符合該視口的寬度,則返回 true。
Scrollable
中的 getScrollableTracksViewportWidth
JTextComponent
中的 getScrollableTracksViewportWidth
public boolean getScrollableTracksViewportHeight()
Scrollable
的高度符合該視口的高度,則返回 true。
Scrollable
中的 getScrollableTracksViewportHeight
JTextComponent
中的 getScrollableTracksViewportHeight
Scrollable
的高度符合其高度,則返回 true;否則返回 falseprotected String paramString()
JEditorPane
的字元串表示形式。此方法僅在進行除錯的時候使用,對於各個實作,所返回字元串的內容和格式可能有所不同。返回的字元串可能為空,但不可能為 null
。
JTextComponent
中的 paramString
JEditorPane
的字元串表示形式public AccessibleContext getAccessibleContext()
Accessible
中的 getAccessibleContext
JTextComponent
中的 getAccessibleContext
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。