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

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

插件已发布

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

JBPopup的演示效果图

Android Studio插件开发5--JBPopup创建_第1张图片
popup效果

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

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

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

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

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

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

需要解决的问题

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

创建JBPopup

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


Android Studio插件开发5--JBPopup创建_第2张图片
控件关系

添加触发事件

那我们首先要添加一个鼠标触发事件,作为触发创建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 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控件也就创建完了,效果图如下:

Android Studio插件开发5--JBPopup创建_第3张图片
JBPopup效果图

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

Android Studio插件开发5--JBPopup创建_第4张图片
其它效果图

我发现我创建的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

Android Studio插件开发5--JBPopup创建_第5张图片
效果图2

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

list.setFocusable(false);

效果图3

Android Studio插件开发5--JBPopup创建_第6张图片
效果图3

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

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

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

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

你可能感兴趣的:(Android Studio插件开发5--JBPopup创建)