平台文字組織架構中提供有滑鼠橫越支援,可讓您在編輯器中顯示的文字和尺規上實作參考資訊的滑鼠橫越(或蹦現資訊)。
滑鼠橫越支援是選用的。依預設,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 會提供這種功能。