上一篇: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篇文章,我们已经可以简单的开发一个可以使用的插件,去实现我们想要做的功能。
但是我要做的事还没有完结,在这里再一次说明一下,我要做的是一个代码统计工具,后续将继续添加功能、继续更新文章、继续记录开发过程中所遇到的问题,所解决的问题。
今天就到这里,谢谢支持~~~
网友评论