平台文字組織架構中提供有浮動說明支援,可讓您在編輯器中顯示的文字和尺規上實作參考資訊的浮動說明(或蹦現資訊)。
浮動說明支援是選用的。依預設,SourceViewerConfiguration 不會安裝浮動說明行為,因為沒有任何有用的一般資訊可顯示。 為了能夠提供文字或尺規浮動說明,您必須配置編輯器的程式檔檢視器, 才能定義可外掛的浮動說明物件。
讓我們再次查看 JavaSourceViewerConfiguration,以明白哪些方法定義浮動說明行為:
public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { return new JavaTextHover(); } public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new JavaAnnotationHover(); }
您也可以使用 SourceViewer 通訊協定(setTextHover 和 setAnnotationHover),以動態方式安裝 Hover Helper 類別。 以任一種方法執行它,並沒有任何特殊執行時期好處,但是將所有可外掛的行為置換放在 SourceViewerConfiguration 子類別,將提供在一個地方合併所有定義的優點。
讓我們查看提供這兩種浮動說明的細節。
浮動說明可讓您提供有關在編輯器中顯示之文字的參考資訊文字。 做法是使用 ITextHover 介面。浮動說明負責計算應該作為浮動說明資訊之來源的區域,提供偏移至文件中。它同時也負責提供有關特定區域的參考資訊文字。 JavaTextHover 十分簡單。它會檢查並察看, 針對浮動說明提供的偏移是否包含在文字選項中。若是如此,它將提供選項範圍作為浮動說明區域。
public class JavaTextHover implements ITextHover { ... public IRegion getHoverRegion(ITextViewer textViewer, int offset) { Point selection= textViewer.getSelectedRange(); if (selection.x <= offset && offset < selection.x + selection.y) return new Region(selection.x, selection.y); return new Region(offset, 0); } }
如果有自己算出的浮動說明區域,它將從它的文件取得所選文字,並傳回以作為浮動說明資訊。
public class JavaTextHover implements ITextHover { public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { if (hoverRegion != null) { try { if (hoverRegion.getLength() > -1) return textViewer.getDocument().get(hoverRegion.getOffset(), hoverRegion.getLength()); } catch (BadLocationException x) { } } return JavaEditorMessages.getString("JavaTextHover.emptySelection"); } ... }
這足以讓我們看到,如果以浮動說明編輯器中的選項,浮動說明會顯示選項。
更複雜的環境定義資訊可以用來計算有用的浮動說明資訊。 這類範例可以在以 JDT 編輯器實作的 JavaTextHover 中找到。
浮動說明在垂直尺規之上有助於顯示字行導向的資訊。 浮動說明類別是按照上面所述來配置。IAnnotationHover 是尺規浮動說明物件的介面。雖然名稱暗示浮動說明係針對尺規中的附註來設計, 但是實際上是由個別編輯器決定何者適用。尺規浮動說明負責傳回與特殊行號相關聯的資訊字串, 不管該行上是否呈現標記。
Java 範例編輯器的 JavaAnnotationHover 實作所有字行的浮動說明。 它使用行號,來取得浮動說明字行上的所有文字,並傳回它作為資訊字串。
public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) { IDocument document= sourceViewer.getDocument(); try { IRegion info= document.getLineInformation(lineNumber); return document.get(info.getOffset(), info.getLength()); } catch (BadLocationException x) { } return null; }
既然浮動說明對文件和程式檔檢視器具有存取權,則它會具有全部必要的資訊,以定出關於應該顯示之資訊的更複雜環境定義決策。 舉例來說,附註模型可以擷取自程式檔檢視器,以便提供浮動說明資訊給任何顯示在垂直尺規的附註。 JDT 編輯器提供的 JavaAnnotationHover 會提供這種功能。