之前我們建立了第一個 JetBrains 編輯器擴充套件,現在來加上下方狀態列小工具(Widget)
首先要先建立一個繼承 StatusBarWidgetFactory 的 MyStatusBarWidgetFactory 類別,並複寫 getId 和 getDisplayName 兩個方法
這裡的 getId 中的回傳值和 package name 要用在 plugin.xml 中註冊:
接下來就是要設定小工具的內容了,直接在剛剛建立的 MyStatusBarWidgetFactory 類別內建立一個實作 StatusBarWidget 介面的類別,但是我們可以直接使用更輕鬆的 CustomStatusBarWidget 介面。
然後再依照小工具要顯示的內容可以選用已實作的類別快速鍵例,例如單純顯示文字的話就可以直接繼承 TextPanel 類別。然後再放入 MyStatusBarWidgetFactory 的 createWidget 中
執行後就可以看到出現在狀態列小工具選單和狀態列中了:
這裡也示範訂製狀態列小工具的方式,其實就是使用 Java Swing 套件製作介面:
然後發現了官方文件有個連結錯誤,順手修正了
參考資料:
JetBrains - Status Bar Widgets
首先要先建立一個繼承 StatusBarWidgetFactory 的 MyStatusBarWidgetFactory 類別,並複寫 getId 和 getDisplayName 兩個方法
import com.intellij.openapi.wm.StatusBarWidgetFactory
class MyStatusBarWidgetFactory : StatusBarWidgetFactory {
override fun getId(): String {
return "MyStatusBarWidgetFactory"
}
override fun getDisplayName(): String {
return "My Status Bar Widget Factory"
}
}
這裡的 getId 中的回傳值和 package name 要用在 plugin.xml 中註冊:
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">
<statusBarWidgetFactory id="MyStatusBarWidgetFactory"
implementation="com.example.ideaplugintest0405.MyStatusBarWidgetFactory"
/>
</extensions>
</idea-plugin>
接下來就是要設定小工具的內容了,直接在剛剛建立的 MyStatusBarWidgetFactory 類別內建立一個實作 StatusBarWidget 介面的類別,但是我們可以直接使用更輕鬆的 CustomStatusBarWidget 介面。
然後再依照小工具要顯示的內容可以選用已實作的類別快速鍵例,例如單純顯示文字的話就可以直接繼承 TextPanel 類別。然後再放入 MyStatusBarWidgetFactory 的 createWidget 中
import com.intellij.openapi.project.Project
import com.intellij.openapi.wm.CustomStatusBarWidget
import com.intellij.openapi.wm.StatusBarWidget
import com.intellij.openapi.wm.StatusBarWidgetFactory
import com.intellij.openapi.wm.impl.status.TextPanel
import javax.swing.JComponent
class MyStatusBarWidgetFactory : StatusBarWidgetFactory {
override fun getId(): String {
return "MyStatusBarWidgetFactory"
}
override fun getDisplayName(): String {
return "My Status Bar Widget Factory"
}
override fun createWidget(project: Project): StatusBarWidget {
return MyStatusBarWidget()
}
private class MyStatusBarWidget : TextPanel(), CustomStatusBarWidget {
override fun ID(): String {
return "MyStatusBarWidgetFactory"
}
override fun getComponent(): JComponent {
text = "Hello, World!"
return this
}
}
}
執行後就可以看到出現在狀態列小工具選單和狀態列中了:
這裡也示範訂製狀態列小工具的方式,其實就是使用 Java Swing 套件製作介面:
import com.intellij.openapi.project.Project
import com.intellij.openapi.wm.CustomStatusBarWidget
import com.intellij.openapi.wm.StatusBarWidget
import com.intellij.openapi.wm.StatusBarWidgetFactory
import java.awt.BorderLayout
import java.awt.Component
import javax.swing.JComponent
import javax.swing.JLabel
import javax.swing.JPanel
class MyStatusBarWidgetFactory : StatusBarWidgetFactory {
override fun getId(): String {
return "MyStatusBarWidgetFactory"
}
override fun getDisplayName(): String {
return "My Status Bar Widget Factory"
}
override fun createWidget(project: Project): StatusBarWidget {
return MyStatusBarWidget()
}
private class MyStatusBarWidget : com.intellij.openapi.wm.StatusBarWidget.TextPresentation, CustomStatusBarWidget {
override fun getAlignment(): Float {
return Component.RIGHT_ALIGNMENT
}
override fun getText(): String {
return "Hello, World!"
}
override fun getTooltipText(): String? {
return "this is a tooltip"
}
override fun ID(): String {
return "MyStatusBarWidgetFactory"
}
private val statusBarComponent = JPanel(BorderLayout())
init {
val label = JLabel("...")
label.text = "Hello, World!"
statusBarComponent.add(label)
}
override fun getComponent(): JComponent {
return statusBarComponent
}
}
}
然後發現了官方文件有個連結錯誤,順手修正了
參考資料:
JetBrains - Status Bar Widgets
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com