今天就给大家介绍一下怎么自定义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); } } } }); }
运行的效果
好了,插件的介绍到此为止,有缘再写。