Android Studio插件開發(fā)6--Settings創(chuàng)建配置頁(yè)

上一篇:JBPopup的創(chuàng)建
下一篇:ProjectViewPopupMenu的創(chuàng)建

插件已發(fā)布

1方面,在Plugins中搜索CCLines币绩,進(jìn)行下載安裝参滴;
2,源碼在Github中開源下載峦树;
3辣辫,搜索不到的朋友,可以升級(jí)一下idea后再嘗試魁巩,因?yàn)椴寮懈鷌dea的版本關(guān)聯(lián)急灭;

Settings的動(dòng)態(tài)效果圖,如下:

效果圖1
效果圖2

以上的效果圖就是我們今天要講的主要內(nèi)容歪赢,喜歡的朋友請(qǐng)支持一下~~~

Settings配置頁(yè)是什么化戳?為什么要使用?

配置頁(yè)面是什么埋凯,可能看圖片會(huì)比較直觀一點(diǎn)点楼,如下:

Settings頁(yè)面

在做完基礎(chǔ)插件后,我們可能需要對(duì)部分配置開放給用戶自己去使用白对,所有我們今天的文章講的掠廓,就是怎么在這個(gè)Settings配置頁(yè)面中,添加我們自己插件所需要的配置頁(yè)甩恼。

創(chuàng)建配置頁(yè)

1蟀瞧,

創(chuàng)建Java類后去實(shí)現(xiàn)(implements)Configurable接口,代碼如下:

/**
 * 設(shè)置界面 2017/3/20 14:12.
 */
public class Settings implements Configurable {

    private JPanel mMainPanel;
    private JButton buttonDel; // 刪除按鈕 2017/3/20 14:20
    private JButton buttonAdd; // 添加按鈕 2017/3/20 14:21
    private JTable table1;
    private DefaultTableModel mDefaultTableModel;

    private java.util.List<TypeEntity> _lstType; // 類型 2017/3/21 13:49
    private boolean _isModify = false; // 是否已經(jīng)修改 2017/3/21 13:52

    private int _curRow = -1; // 當(dāng)前行 2017/3/27 15:17
    private String _curSuffix = null; // 當(dāng)前選擇的后綴名 2017/3/27 15:22
    private java.util.List<String> _lstDels;

    /**
     * 在settings中顯示的名稱 2017/3/20 14:12
     * @return 名稱
     */
    @Nls
    @Override
    public String getDisplayName() {
        return "Compute Code Lines";
    }

    @Nullable
    @Override
    public String getHelpTopic() {
        return null;
    }

    /**
     * 初始化控件 2017/3/20 14:19
     * @return
     */
    @Nullable
    @Override
    public JComponent createComponent() {
        return null;
    }

    /**
     * 是否修改 2017/3/20 14:12
     * @return true 激活apply按鈕
     */
    @Override
    public boolean isModified() {
        return false;
    }

    /**
     * 點(diǎn)擊【apply】条摸、【OK】時(shí)悦污,調(diào)用 2017/3/20 14:12
     * @throws ConfigurationException
     */
    @Override
    public void apply() throws ConfigurationException {

    }

    /**
     * 點(diǎn)擊【Reset】時(shí),調(diào)用 2017/3/20 14:13
     */
    @Override
    public void reset() {

    }

    /**
     * 一定要實(shí)現(xiàn)钉蒲,否則在Android Studio中會(huì)報(bào)錯(cuò) 2017/4/4 17:40
     */
    @Override
    public void disposeUIResources() {

    }
}

PS

對(duì)實(shí)現(xiàn)Configurable后切端,重寫的幾個(gè)方法,上面代碼都有注釋顷啼,可以看看各個(gè)方法的作用踏枣。

2,plugin.xml添加信息

在<extensions>中添加如下信息:

<!--擴(kuò)展組件注冊(cè) 要是用到applicationConfigurable即項(xiàng)目配置等就在這里注冊(cè)-->
<extensions defaultExtensionNs="com.intellij">

  <!-- 自定義配置界面 2017/3/20 14:05 -->
  <applicationConfigurable instance="settings.Settings"/>

</extensions>

3钙蒙,

創(chuàng)建一個(gè)Form的界面布局文件茵瀑,綁定上面的Settings類,布局的結(jié)構(gòu)如下圖:

布局文件結(jié)構(gòu)

PS

我做的是一個(gè)代碼統(tǒng)計(jì)工具躬厌,我的想法是打算開放統(tǒng)計(jì)類型马昨,讓用戶自己去配置,所以我添加兩個(gè)按鈕扛施,【刪除】偏陪、【添加】,還有一個(gè)表格去承載數(shù)據(jù)展示煮嫌,比較簡(jiǎn)單笛谦。

4,Table控件的使用:

首先得在Form頁(yè)面對(duì)JTable控件的【Custom Create】勾選昌阿,如圖:


勾選饥脑,自定義創(chuàng)建

a恳邀,創(chuàng)建DefaultTableModel模型,代碼如下:

mDefaultTableModel = new DefaultTableModel() {
    @Override
    public Class<?> getColumnClass(int columnIndex) {
        if (columnIndex != 0)
            return super.getColumnClass(columnIndex);

        return Boolean.class; // 第一列為復(fù)選框 2017/3/20 15:26
    }
};

b灶轰,初始化DefaultTableModel數(shù)據(jù)谣沸,代碼如下:

this._lstType = ComputeType.getTypes(); // 獲取顯示統(tǒng)計(jì)類型 2017/3/21 13:49
if (this._lstType.size() == 0)
    return;

// 創(chuàng)建兩列 2017/3/20 14:38
Object[][] object = new Object[this._lstType.size()][2];
int i = 0;
for (TypeEntity entity:this._lstType) {
    object[i][0] = entity.isCheck(); // 直接設(shè)置boolean,CheckBox可直接設(shè)置
    object[i][1] = entity.getType();
    i++;
}

tableModel.setDataVector(object, new Object[]{"Box", "Type"});

c笋颤,創(chuàng)建JTable乳附,代碼如下:

table1 = new JTable(mDefaultTableModel) {
    public void tableChanged(TableModelEvent e) {
        super.tableChanged(e);
        repaint();
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        return column == 0;
    }


};

d,設(shè)置表格的表頭伴澄、列的大小赋除,代碼如下(注釋切記記得看,我被坑了一下):

// 設(shè)置表頭高度
table1.getTableHeader().setPreferredSize(new Dimension(table1.getTableHeader().getWidth(), 35));

// 設(shè)置兩列各自寬度非凌,有多少列举农,setPreferredWidth都得設(shè)置,才能生效 2017/3/20 15:54
table1.getColumnModel().getColumn(0).setPreferredWidth(35);
table1.getColumnModel().getColumn(0).setMaxWidth(30); // 設(shè)置最大值敞嗡,防止窗口放大縮小時(shí)颁糟,動(dòng)態(tài)變化 2017/3/20 15:55
table1.getColumnModel().getColumn(1).setPreferredWidth(465);

// 設(shè)置行的高度
table1.setRowHeight(25);

e,添加JTable點(diǎn)擊事件喉悴,獲取點(diǎn)擊的具體行棱貌、列,代碼如下:

// 添加點(diǎn)擊事件 2017/3/20 16:02
table1.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
        if (e.getClickCount() == 1) { // 獲取點(diǎn)擊的復(fù)選框 2017/3/20 16:02
            int columnIndex = table1.columnAtPoint(e.getPoint()); //獲取點(diǎn)擊的列
            int rowIndex = table1.rowAtPoint(e.getPoint()); //獲取點(diǎn)擊的行
            _curRow = rowIndex;
            if (columnIndex == 0) {
                _isModify = true; // 標(biāo)志修改箕肃,激活apply 2017/3/21 13:53
                boolean isCheck = (boolean) table1.getValueAt(rowIndex, 0);
                String type = (String) table1.getValueAt(rowIndex, 1);
            }

        }
    }
});

PS

到這里的話键畴,我們的Settings配置頁(yè)與其中包含的表格控件的創(chuàng)建與使用就結(jié)束了。

演示效果

Settings效果圖

中間紅色區(qū)域就是我們的創(chuàng)建的Form布局界面突雪。上面圖片顯示,我配置了統(tǒng)計(jì)Python涡贱、Javascript的文件類型咏删,統(tǒng)計(jì)效果如下:

測(cè)試項(xiàng)目結(jié)構(gòu)圖
統(tǒng)計(jì)結(jié)果圖

如果覺得有點(diǎn)模糊的朋友,不妨去看下前面幾篇文章问词,我都是一步一步來講督函,來實(shí)現(xiàn)對(duì)應(yīng)的界面以及功能的。

其實(shí)只要界面做出來了激挪,實(shí)現(xiàn)邏輯還是比較簡(jiǎn)單的辰狡。我這篇文章主要解決的問題在我插件問題集2中的,第1到4的問題垄分。

今天我們要講的Settings配置頁(yè)就告一段落了宛篇,到這里能講的東西也快講完了,畢竟我自己想要做的代碼統(tǒng)計(jì)插件也做完了薄湿,大概還會(huì)持續(xù)更新兩三篇吧~~~

今天就到這里叫倍,謝謝支持~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偷卧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吆倦,更是在濱河造成了極大的恐慌听诸,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚕泽,死亡現(xiàn)場(chǎng)離奇詭異晌梨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)须妻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門仔蝌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人璧南,你說我怎么就攤上這事掌逛。” “怎么了司倚?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵豆混,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我动知,道長(zhǎng)皿伺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任盒粮,我火速辦了婚禮鸵鸥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丹皱。我一直安慰自己妒穴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布摊崭。 她就那樣靜靜地躺著讼油,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呢簸。 梳的紋絲不亂的頭發(fā)上矮台,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音根时,去河邊找鬼瘦赫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛤迎,可吹牛的內(nèi)容都是我干的确虱。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼替裆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蝉娜!你這毒婦竟也來了唱较?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤召川,失蹤者是張志新(化名)和其女友劉穎南缓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荧呐,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汉形,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倍阐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片概疆。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖峰搪,靈堂內(nèi)的尸體忽然破棺而出岔冀,到底是詐尸還是另有隱情,我是刑警寧澤概耻,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布使套,位于F島的核電站,受9級(jí)特大地震影響鞠柄,放射性物質(zhì)發(fā)生泄漏侦高。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一厌杜、第九天 我趴在偏房一處隱蔽的房頂上張望奉呛。 院中可真熱鬧,春花似錦夯尽、人聲如沸瞧壮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咆槽。三九已至,卻和暖如春肺孤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背济欢。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工赠堵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人法褥。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓茫叭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親半等。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揍愁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理呐萨,服務(wù)發(fā)現(xiàn),斷路器莽囤,智...
    卡卡羅2017閱讀 134,717評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,336評(píng)論 25 707
  • 實(shí)例 —— 云服務(wù)器 o-w-o.space 我的畢業(yè)設(shè)計(jì)~ 列表 終端工具tmuxzsh [+ oh-my-zs...
    君與一夏閱讀 454評(píng)論 0 0
  • 1. 場(chǎng)景一: 我:“跳跳谬擦,幫媽媽拿過來手機(jī)好嗎?” 跳跳就樂顛顛的給我拿了過來朽缎。 場(chǎng)景二: 跳跳:“媽媽惨远,你能幫...
    宛若辰曦閱讀 193評(píng)論 0 1
  • 陽(yáng)光溫?zé)岜被啵瑲q月正好,你還不來最筒,我怎敢老去贺氓。——張愛玲 今天是西方的情人節(jié)床蜘,我們中國(guó)也受到西方文化的影響辙培,很多人也過...
    阿木拉閱讀 641評(píng)論 0 0