Android Studio插件開發(fā)5--JBPopup創(chuàng)建

上一篇:ToolWindow的創(chuàng)建
下一篇:Settings配置頁的創(chuàng)建

插件已發(fā)布

1想虎,在Plugins中搜索CCLines翩隧,進行下載安裝堡掏;
2购城,源碼在Github中開源下載吕座;
3,搜索不到的朋友工猜,可以升級一下idea后再嘗試米诉,因為插件有跟idea的版本關聯(lián);

JBPopup的演示效果圖

popup效果

以上的gif動態(tài)圖展示的內(nèi)容就是今天我們要講的主要內(nèi)容篷帅,喜歡的記得支持一下~~~

JBPopup是什么?為什么要使用拴泌?

了解上一篇我們要創(chuàng)建使用ToolWindow控件的場景后(如果不是太清楚的朋友可以點擊上面的鏈接魏身,查看ToolWindow的創(chuàng)建),今天我們講一講什么是JBPopup控件蚪腐。

其實看這個名字箭昵,我們可以很直觀的了解到,JBPopup控件是一個彈出菜單控件回季。如果想要直接看效果的朋友家制,可以直接打開Android studio中底部的Tool Buttons中的【Android Monitor】(或者任意其它ToolWindows控件),然后鼠標對準中間區(qū)域泡一,點擊右鍵即可看到彈出一個菜單颤殴。

這就是我們今天要實現(xiàn)的目標。

那為什么要使用這個鼻忠?我在上一篇中創(chuàng)建ToolWindow控件來展示所有的Log信息涵但,但既然有所展示,就需要有所清除帖蔓,所以最簡單的功能就是來實現(xiàn)一個【清除】功能矮瘟。

需要解決的問題

今天我講這篇,我主要需要解決的問題就兩個塑娇,就是我在插件問題集中的第7澈侠、8個問題,今天這篇技術文章講完埋酬,第一個問題集也就全部結束了哨啃。如果有接觸插件開發(fā)的朋友們,碰到問題的話奇瘦,可以參考我所碰到的問題棘催,看看能不能有所幫助。

創(chuàng)建JBPopup

上一篇我們在ToolWindow中創(chuàng)建了一個JTextArea控件來展示Log信息耳标,如下:


控件關系

添加觸發(fā)事件

那我們首先要添加一個鼠標觸發(fā)事件醇坝,作為觸發(fā)創(chuàng)建JBPopup的入口,在【ToolFactoryCompute.createToolWindowContent】的方法中添加鼠標事件,代碼如下:

// 添加鼠標事件 2017/3/18 21:12
txtContent.addMouseListener(new MouseListener() {
    @Override
    public void mouseClicked(MouseEvent e) {
        // 在此添加觸發(fā)事件 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) {
    // 在此添加觸發(fā)事件 2017/3/18 21:12
    if (e.getButton() == 3) { // 鼠標右鍵 2017/3/18 21:12

    }
}

創(chuàng)建、顯示JBPopup

截獲鼠標右鍵事件后宋距,創(chuàng)建轴踱、顯示JBPopup控件,代碼如下:

// 添加右鍵菜單的內(nèi)容 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); // 設置數(shù)據(jù) 2017/3/18 21:13

// 創(chuàng)建菜單 2017/3/18 21:13
JBPopup popup = new PopupChooserBuilder(list)
        .setItemChoosenCallback(new Runnable() { // 添加點擊項的監(jiān)聽事件 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

我們以上代碼實現(xiàn)了兩個功能淫僻,一個是【Select All】、一個是【Clear All】壶唤。

演示效果圖對比

到這里雳灵,JBPopup控件也就創(chuàng)建完了,效果圖如下:

JBPopup效果圖

用了兩下JBPopup闸盔,我對比了其它的效果悯辙,覺得效果怪怪的,比如迎吵,Android Studio中Monitor的效果圖如下:

其它效果圖

我發(fā)現(xiàn)我創(chuàng)建的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

清除選中效果了击费,但是剩下一個高亮邊框一直存在拢蛋。后來想了一下,認定這個應該是一個焦點事件觸發(fā)的高亮邊框荡灾,順著這個思路找到了如下代碼:

list.setFocusable(false);

效果圖3

效果圖3

好了瓤狐,到這里我們今天要講的JBPopup控件的創(chuàng)建與使用到這里就告一段落了,如果需要了解更多的創(chuàng)建方式批幌,可以查看官方文檔--Popup創(chuàng)建础锐。

結合今天完成的這一篇和前面4篇文章,我們已經(jīng)可以簡單的開發(fā)一個可以使用的插件荧缘,去實現(xiàn)我們想要做的功能皆警。

但是我要做的事還沒有完結,在這里再一次說明一下截粗,我要做的是一個代碼統(tǒng)計工具信姓,后續(xù)將繼續(xù)添加功能、繼續(xù)更新文章绸罗、繼續(xù)記錄開發(fā)過程中所遇到的問題意推,所解決的問題。

今天就到這里珊蟀,謝謝支持~~~

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菊值,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腻窒,老刑警劉巖昵宇,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異儿子,居然都是意外死亡瓦哎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門柔逼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒋譬,“玉大人,你說我怎么就攤上這事愉适∠鄄” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵儡毕,是天一觀的道長。 經(jīng)常有香客問我扑媚,道長腰湾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任疆股,我火速辦了婚禮费坊,結果婚禮上,老公的妹妹穿的比我還像新娘旬痹。我一直安慰自己附井,他們只是感情好,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布两残。 她就那樣靜靜地躺著永毅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪人弓。 梳的紋絲不亂的頭發(fā)上沼死,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音崔赌,去河邊找鬼意蛀。 笑死,一個胖子當著我的面吹牛健芭,可吹牛的內(nèi)容都是我干的县钥。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼慈迈,長吁一口氣:“原來是場噩夢啊……” “哼若贮!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤兜看,失蹤者是張志新(化名)和其女友劉穎锥咸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體细移,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡搏予,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弧轧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雪侥。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖精绎,靈堂內(nèi)的尸體忽然破棺而出速缨,到底是詐尸還是另有隱情,我是刑警寧澤代乃,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布旬牲,位于F島的核電站,受9級特大地震影響搁吓,放射性物質發(fā)生泄漏原茅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一堕仔、第九天 我趴在偏房一處隱蔽的房頂上張望擂橘。 院中可真熱鬧,春花似錦摩骨、人聲如沸通贞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昌罩。三九已至,卻和暖如春唤冈,著一層夾襖步出監(jiān)牢的瞬間峡迷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工你虹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绘搞,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓傅物,卻偏偏與公主長得像夯辖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子董饰,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容