package org.jetbrains.plugins.template.toolWindow import com.intellij.openapi.components.service import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project import com.intellij.openapi.wm.ToolWindow import com.intellij.openapi.wm.ToolWindowFactory import com.intellij.ui.components.JBLabel import com.intellij.ui.components.JBPanel import com.intellij.ui.content.ContentFactory import org.jetbrains.plugins.template.MyBundle import org.jetbrains.plugins.template.services.MyProjectService import javax.swing.JButton class MyToolWindowFactory : ToolWindowFactory { init { thisLogger().warn("Don't forget to remove all non-needed sample code files with their corresponding registration entries in `plugin.xml`.") } private val contentFactory = ContentFactory.SERVICE.getInstance() override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) { val myToolWindow = MyToolWindow(toolWindow) val content = contentFactory.createContent(myToolWindow.getContent(), null, false) toolWindow.contentManager.addContent(content) } override fun shouldBeAvailable(project: Project) = true class MyToolWindow(toolWindow: ToolWindow) { private val service = toolWindow.project.service() fun getContent() = JBPanel>().apply { val label = JBLabel(MyBundle.message("randomLabel", "?")) add(label) add(JButton(MyBundle.message("shuffle")).apply { addActionListener { label.text = MyBundle.message("randomLabel", service.getRandomNumber()) } }) } } }