TopComponent 群組的作用是在打開一個 TopComponent 組件的同時,打開其他相關的 TopComponent 組件。例如,當打開或者激活 GUI 編輯器的時候,“組件面板”、“屬性”窗口和“檢查器”窗口都會出現。當需要一個組件同時伴隨著很多其他類似于組件面板窗口的時候,利用 TopComponent 群組可以輕松實現一個組件的激活引發其他組件被打開或者被選中。
定義群組涉及到 2 種 XML 文件。首先是 wsgrp ,它代表“窗口系統群組( Window System Group )”。它定義了“窗口系統”的群組,系統根據它的定義查找對應的目錄,它也定義了群組是否應該在啟動時打開。另一個文件是 wstcgrp ,它代表“窗口系統 TopComponent 群組( Window System TopComponent Group )”,這個文件通過 ID 識別單態的 TopComponent 組件,同時還定義了一些群組的打開和關閉屬性。
TopComponent 群組編程實例
首先 創建 一個模塊項目 TopComponentGroup , 然后 新建 2 個窗口組件( TopComponent ),命名為 EditorTopComponent 和 SatelliteTopComponent ,就像窗口的名字所表示的那樣, SatelliteTopComponent 將會隨著 EditorTopComponent 的打開和關閉一同打開和關閉。
首先新建一個名為 EditorGroupWsgrp 的 xml 文件 ,這個文件里定義了名為EditorGroup的編輯器窗口群組。
< group version ="2.0" >
< module name ="org.jqueen.nb.topcomponentgroup" spec ="1.0" />
< name unique ="EditorGroup" />
< state opened ="false" />
</ group >
再新建一個名為SatelliteTopComponentWstcgrp的xml文件,在這個文件里可以通過ID識別出 SatelliteTopComponent 組件 。
< tc-group version ="2.0" >
< tc-id id ="SatelliteTopComponent" />
< open-close-behavior open ="true" close ="true" />
</ tc-group >
編輯模塊的 layer.xml 文件,在系統文件系統中的 Windows2 目錄添加一個 Group 文件夾,將名為"EditorGroup"的群組添加進Group。
< folder name ="Groups" >
< file name ="EditorGroup.wsgrp" url ="EditorGroupWsgrp.xml" />
< folder name ="EditorGroup" >
< file name ="SatelliteTopComponent.wstcgrp" url ="SatelliteTopComponentWstcgrp.xml" />
</ folder >
</ folder >
編輯
EditorTopComponent 內容,重寫TopComponent類的componentOpened()和componentClosed()方法,在 EditorTopComponent 被打開和關閉時打開和關閉名為"EditorGroup"的群組。
@Override
protected void componentOpened() {
TopComponentGroup group = WindowManager.getDefault().findTopComponentGroup( " EditorGroup " );
if (group != null ) {
group.open();
}
}
@Override
public void componentClosed() {
TopComponentGroup group = WindowManager.getDefault().findTopComponentGroup( " EditorGroup " );
if (group != null ) {
group.close();
}
}
至此,就完成了一個TopComponent群組的編輯。執行模塊項目,當從窗口菜單中打開EditorTopComponent時 SatelliteTopComponent 會自動打開, EditorTopComponent被關閉時 SatelliteTopComponent 也會自動關閉。
樣例程序下載