美文网首页Plugins开发Android area程序员
Android Studio插件开发5--JBPopup创建

Android Studio插件开发5--JBPopup创建

作者: 街头客 | 来源:发表于2017-03-27 10:30 被阅读169次

    上一篇:ToolWindow的创建
    下一篇:Settings配置页的创建

    插件已发布

    1,在Plugins中搜索CCLines,进行下载安装;
    2,源码在Github中开源下载
    3,搜索不到的朋友,可以升级一下idea后再尝试,因为插件有跟idea的版本关联;

    JBPopup的演示效果图

    popup效果

    以上的gif动态图展示的内容就是今天我们要讲的主要内容,喜欢的记得支持一下~~~

    JBPopup是什么?为什么要使用?

    了解上一篇我们要创建使用ToolWindow控件的场景后(如果不是太清楚的朋友可以点击上面的链接,查看ToolWindow的创建),今天我们讲一讲什么是JBPopup控件。

    其实看这个名字,我们可以很直观的了解到,JBPopup控件是一个弹出菜单控件。如果想要直接看效果的朋友,可以直接打开Android studio中底部的Tool Buttons中的【Android Monitor】(或者任意其它ToolWindows控件),然后鼠标对准中间区域,点击右键即可看到弹出一个菜单。

    这就是我们今天要实现的目标。

    那为什么要使用这个?我在上一篇中创建ToolWindow控件来展示所有的Log信息,但既然有所展示,就需要有所清除,所以最简单的功能就是来实现一个【清除】功能。

    需要解决的问题

    今天我讲这篇,我主要需要解决的问题就两个,就是我在插件问题集中的第7、8个问题,今天这篇技术文章讲完,第一个问题集也就全部结束了。如果有接触插件开发的朋友们,碰到问题的话,可以参考我所碰到的问题,看看能不能有所帮助。

    创建JBPopup

    上一篇我们在ToolWindow中创建了一个JTextArea控件来展示Log信息,如下:


    控件关系

    添加触发事件

    那我们首先要添加一个鼠标触发事件,作为触发创建JBPopup的入口,在【ToolFactoryCompute.createToolWindowContent】的方法中添加鼠标事件,代码如下:

    // 添加鼠标事件 2017/3/18 21:12
    txtContent.addMouseListener(new MouseListener() {
        @Override
        public void mouseClicked(MouseEvent e) {
            // 在此添加触发事件 2017/3/18 21:12
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
    
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
    
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
    
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
    
        }
    });
    

    在【mouseClicked】中处理事件

    在这里我们首先需要在【mouseClicked】中对鼠标点击事件做判断,判断当前的鼠标点击事件是否为鼠标右键点击,代码如下:

    @Override
    public void mouseClicked(MouseEvent e) {
        // 在此添加触发事件 2017/3/18 21:12
        if (e.getButton() == 3) { // 鼠标右键 2017/3/18 21:12
    
        }
    }
    

    创建、显示JBPopup

    截获鼠标右键事件后,创建、显示JBPopup控件,代码如下:

    // 添加右键菜单的内容 2017/3/18 21:12
    JBList<String> list = new JBList<>();
    String[] title = new String[2];
    title[0] = "    Select All";
    title[1] = "    Clear All";
    list.setListData(title); // 设置数据 2017/3/18 21:13
    
    // 创建菜单 2017/3/18 21:13
    JBPopup popup = new PopupChooserBuilder(list)
            .setItemChoosenCallback(new Runnable() { // 添加点击项的监听事件 2017/3/18 21:13
                @Override
                public void run() {
                    String value = list.getSelectedValue();
                    if ("    Clear All".equals(value)) {
                        txtContent.setText("");
                    } else if ("    Select All".equals(value)) {
                        txtContent.selectAll();
                    }
                }
            }).createPopup();
    
    // 设置大小 2017/3/18 21:13
    Dimension dimension = popup.getContent().getPreferredSize();
    popup.setSize(new Dimension(150, dimension.height));
    
    // 显示 2017/3/18 21:25
    popup.show(new RelativePoint(e)); // 传入e,获取位置进行显示 2017/3/19 09:48
    

    我们以上代码实现了两个功能,一个是【Select All】、一个是【Clear All】。

    演示效果图对比

    到这里,JBPopup控件也就创建完了,效果图如下:

    JBPopup效果图

    用了两下JBPopup,我对比了其它的效果,觉得效果怪怪的,比如,Android Studio中Monitor的效果图如下:

    其它效果图

    我发现我创建的JBPopup总是会默认第一项,后来我使用了如下代码,进行清除:

    list.clearSelection();
    
    // 添加鼠标进入List事件 2017/3/18 21:25
    list.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseEntered(MouseEvent e) {
            super.mouseEntered(e);
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
            super.mouseExited(e);
            list.clearSelection();
        }
    });
    

    效果图2

    效果图2

    清除选中效果了,但是剩下一个高亮边框一直存在。后来想了一下,认定这个应该是一个焦点事件触发的高亮边框,顺着这个思路找到了如下代码:

    list.setFocusable(false);
    

    效果图3

    效果图3

    好了,到这里我们今天要讲的JBPopup控件的创建与使用到这里就告一段落了,如果需要了解更多的创建方式,可以查看官方文档--Popup创建

    结合今天完成的这一篇和前面4篇文章,我们已经可以简单的开发一个可以使用的插件,去实现我们想要做的功能。

    但是我要做的事还没有完结,在这里再一次说明一下,我要做的是一个代码统计工具,后续将继续添加功能、继续更新文章、继续记录开发过程中所遇到的问题,所解决的问题。

    今天就到这里,谢谢支持~~~

    相关文章

      网友评论

        本文标题:Android Studio插件开发5--JBPopup创建

        本文链接:https://www.haomeiwen.com/subject/vkblottx.html