文字和尺規浮動說明

平台文字組織架構中提供有浮動說明支援,可讓您在編輯器中顯示的文字和尺規上實作參考資訊的浮動說明(或蹦現資訊)。

浮動說明支援是選用的。依預設,SourceViewerConfiguration 不會安裝浮動說明行為,因為沒有任何有用的一般資訊可顯示。 為了能夠提供文字或尺規浮動說明,您必須配置編輯器的程式檔檢視器, 才能定義可外掛的浮動說明物件。

讓我們再次查看 JavaSourceViewerConfiguration,以明白哪些方法定義浮動說明行為:

public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
	return new JavaTextHover();
}
public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
	return new JavaAnnotationHover();
}

您也可以使用 SourceViewer 通訊協定(setTextHoversetAnnotationHover),以動態方式安裝 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 會提供這種功能。