今天就给大家介绍一下怎么自定义toolWindow里面的内容。如:创建一个树,可以自定义里面的内容,并且刷新树
1.前面两篇讲解了创建一个按钮,今天来将一下创建一个toolWindow并添加里面的内容
编写插件离不开plugin.xml,在插件中配置自己的toolWindow,此时自己配置的toolWindow已经打开。
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
<!-- 自定义控制台输入 -->
<!--canCloseContents 允许用户关闭-->
<toolWindow canCloseContents="true" anchor="bottom"
id="JDCompute Code Lines"
factoryClass="MyBottomWin">
</toolWindow>
</extensions>
运行toolWindow,并按下图打开,你会看到右下角有自定义的toolWindow;
2.接下来讲一下点击打开自定义的toolWindow
{
if (e.getProject() != null) {
// 将项目对象,ToolWindow的id传入,获取控件对象
ToolWindow toolWindow = ToolWindowManager.getInstance(e.getProject()).getToolWindow("JDCompute Code Lines");
if (toolWindow != null) {
// 无论当前状态为关闭/打开,进行强制打开ToolWindow
toolWindow.show(new Runnable() {
@Override
public void run() {
}
});
}
}
}
从代码中可以看出,涉及到了单例模式以及线程,再传project的时候,小编也是猜的,不知道传什么值,看到网上的一些例子只是传入了文本数据。
这样就可以实现点击的时候打开自定义的toolWindow
3.在toolWindow上写入一棵下拉的树,并可以增加子菜单。
在配置文件中可以看到MyBottomWin这个工厂类,他实现了ToolWindowFactory接口,
@Override
public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
// myToolWindow=toolWindow;
ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
Content content = contentFactory.createContent(mainPanel,"", false);
toolWindow.getContentManager().addContent(content);
}
接口实现以后就可以在重写的方法里面定义自己的面板等。
然后初始化这个类
public MyBottomWin() {
//定义字体
Font fnt = new Font("Microsoft YaHei UI", Font.PLAIN, 15);
//找到字体的资源管理
FontUIResource fontRes = new FontUIResource(fnt);
for (Enumeration keys = UIManager.getDefaults().keys(); keys.hasMoreElements(); ) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof FontUIResource)
UIManager.put(key, fontRes);
}
//定义tree 的根目录
DefaultMutableTreeNode root = new DefaultMutableTreeNode("京东集团");
//定义根节点下面的子节点
DefaultMutableTreeNode n1 = new DefaultMutableTreeNode("京东研发");
DefaultMutableTreeNode n2 = new DefaultMutableTreeNode("京东行政");
DefaultMutableTreeNode n3 = new DefaultMutableTreeNode("京东物流");
DefaultMutableTreeNode n4 = new DefaultMutableTreeNode("京东金融");
DefaultMutableTreeNode n5 = new DefaultMutableTreeNode("京东商城");
DefaultMutableTreeNode n6 = new DefaultMutableTreeNode("京东财务");
root.add(n1);
root.add(n2);
root.add(n3);
root.add(n4);
root.add(n5);
root.add(n6);
//构造一个treeModel 对象,进行刷新树操作
dt = new DefaultTreeModel(root);
tree1 = new JTree(dt);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); //得到屏幕的尺寸
//设置主面板的大小
mainPanel.setPreferredSize(new Dimension((int)screenSize.getWidth()-50, (int) screenSize.getHeight()/3*2));
//tree 设置大小
tree1.setPreferredSize(new Dimension((int)screenSize.getWidth()-50, (int) screenSize.getHeight()/3*2));
///构造一个 有滚动条的面板
scrollPane = new JScrollPane();
//设置滚动条面板位置
scrollPane.setPreferredSize(new Dimension((int)screenSize.getWidth()-50, (int) screenSize.getHeight()/3*2-50));
//将tree添加道滚动条面板上
scrollPane.setViewportView(tree1);
//将滚动条面板设置哼可见
scrollPane.setVisible(true);
//设置滚动条的滚动速度
scrollPane.getVerticalScrollBar().setUnitIncrement(15);
//解决闪烁问题
scrollPane.getVerticalScrollBar().setDoubleBuffered(true);
mainPanel=new JPanel();
mainPanel.add(scrollPane);
tree1.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getButton() == e.BUTTON3) { //BUTTON3是鼠标右键
//获取点击的tree节点
DefaultMutableTreeNode note = (DefaultMutableTreeNode) tree1.getLastSelectedPathComponent();
if(note!=null) {
addTreeChilden(note);
}
}
}
});
}
运行的效果
好了,插件的介绍到此为止,有缘再写。