?。?!最近突然想起這個系列的文章鴿了好久,重新看了下,發(fā)現(xiàn)開源中國的摸魚模塊已經沒了,所以demo可能跑不通了,至于下一篇什么時候,只能說關注敬請期待
開頭還是啰嗦幾句,此文章是一個系列的文章,上一篇可以在http://www.itdecent.cn/p/c18d1eacdb42處找到,歡迎閱讀點贊。
依然是我們的定位賽,依然是一個小例子,此次的例子比上一篇文章增加了一點點的難度,代碼在https://gitee.com/yuanzizhenxin/PluginDemo,對應分支為v2,以后所有的例子對應的代碼我都會放到對應的分支下,會把例子之外多余的代碼刪掉,方便大家進行閱讀,不被其他代碼干擾到,好了,下面還是先介紹一些基本的概念,然后用例子去實踐插件開發(fā)。
1、技術簡介
(1)swing:我們通過搜索引擎可以查到此技術其實是一種java的客戶端gui解決方案,跟他同類的還有javafx,說白點就是做可以看到內容的技術,但是目前我所知道的,此類技術的市場已經很小了,如果不是因為要開發(fā)插件,可能我都不會去接觸此類技術,當然我也不建議大家花費很長時間去學,需要什么只要找萬能的搜索引擎搜索代碼示例就行了(某度跳過廣告也湊活還能用),我也會在用到的swing組件上寫一些內容,由于本人也只是用到啥看啥,所以我只能講解入門,還沒法講到放棄(狗頭)。
(2)jsoup:此框架是用來解析html內容的,它可以通過類似css的語法獲取html內容中的元素,而我們今天的這個例子就用到此框架進行解析html片段內容。具體的教程可以參考?https://www.cnblogs.com/zhangyinhua/p/8037599.html,后邊看情況如果需要我會整理一份實戰(zhàn)的文檔(flag先立下來)。
(3)展示框:此次實例我們將要實現(xiàn)一個彈窗,彈窗內容是從開源中國獲取到的內容,其中牽扯到一個做彈窗必須繼承的類,叫做com.intellij.openapi.ui.DialogWrapper,記住此類是idea插件里面彈窗要繼承的抽象類,重寫createCenterPanel方法就可以。
2、實例開始
介紹完幾個東西之后,讓我們來看看插件示例有啥內容吧
(1)功能介紹:看開源中國網站的用戶摸魚。
在開源中國的官方首頁右側有個動彈的功能,那我們怎么在敲代碼的時候能看到別人摸魚豈不是很有意思,ok,需求就是這樣,怎么實現(xiàn)看我的。
(2)需求分析:看到這個需求,需要先分析需求,我個人習慣會先抽象化需求,此需求是從別人的網站獲取內容展示在idea中,所以三個需求點如下,其中b和c需求可以考慮合并,這里我沒有進行合并,因為不同網站內容獲取的刷新機制是不一樣的,有的需要輪詢,有的是websocket。
a、獲取內容-----開源中國官方首頁右側的動彈獲取
b、展示內容-----展示在idea某個地方
c、刷新內容-----實時刷新最新的摸魚動態(tài)
(3)需求代碼實戰(zhàn)過程
首先需要去開源中國官網看下動彈是怎么實現(xiàn)的,打開chrome并訪問https://www.oschina.net/,看到右側有個動態(tài),見下圖

點擊F12打開調試工具,選擇network并刷新當前頁面,然后就要瞪大眼睛一個個的地址去猜,沒錯,這里就是個體力活,然后成功定位到這個地址(https://www.oschina.net/widgets/_index_tweets_list?type=ajax&tab=newestTweet&nocache=1587199611761)

可能會疑惑怎么找到的,這個分很多情況,寫爬蟲多的人應該很容易能找到,如果對這種課題比較感興趣,可以反饋給我,我可以寫個這方面的專欄內容。
找到這個地址之后,發(fā)現(xiàn)這個地址的返回結果是一個html的結果片段,那這種html片段該怎么處理呢?這里就引出了剛介紹的jsoup,使用jsoup就可以將html片段進行解析生成一個dom樹的結構。具體代碼可以看com.jd.demo.rpc.OpenSourceHttp#getInfo,已經注釋寫上了。
當我們能獲取動彈內容后,接下來就是要展示出來了,這個就需要用到剛說的com.intellij.openapi.ui.DialogWrapper類了,具體代碼見com.jd.demo.ui.OpenSourceList類,簡單說下這個類,首先這個類是繼承了DialogWrapper抽象類,并覆蓋重寫了createCenterPanel方法,說白點就是中間部分是什么樣子就看這個方法了,見下圖部分,中間部分就是createCenterPanel方法需要返回的UI的內容部分,此外還有兩個方法,去代碼中看吧。

(4)最后說明:
A、v2分支中的action入口我放在了頂部Build菜單下面第一個,大家可以參考plugin配置文件去研究一下位置是怎么擺放的。
B、在dialog中牽扯了兩個類,一個是JTextArea,還有一個是JScrollPane,這個是swing相關的部分,這個放到下一篇文章單獨講一下。
C、我沒有實現(xiàn)實時刷新的功能,大家可以嘗試自己改一下目前我的代碼,實現(xiàn)實時刷新的能力。
最后的最后自我介紹一下,我是夢游神,就職于京東,我們下一篇文章見??!