Android Studio插件開發6--Settings創建配置頁

上一篇:JBPopup的創建
下一篇:ProjectViewPopupMenu的創建

插件已發布

1,在Plugins中搜索CCLines,進行下載安裝;
2,源碼在Github中開源下載
3,搜索不到的朋友,可以升級一下idea后再嘗試,因為插件有跟idea的版本關聯;

Settings的動態效果圖,如下:

效果圖1
效果圖2

以上的效果圖就是我們今天要講的主要內容,喜歡的朋友請支持一下~~~

Settings配置頁是什么?為什么要使用?

配置頁面是什么,可能看圖片會比較直觀一點,如下:

Settings頁面

在做完基礎插件后,我們可能需要對部分配置開放給用戶自己去使用,所有我們今天的文章講的,就是怎么在這個Settings配置頁面中,添加我們自己插件所需要的配置頁。

創建配置頁

1,

創建Java類后去實現(implements)Configurable接口,代碼如下:

/**
 * 設置界面 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; // 是否已經修改 2017/3/21 13:52

    private int _curRow = -1; // 當前行 2017/3/27 15:17
    private String _curSuffix = null; // 當前選擇的后綴名 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;
    }

    /**
     * 點擊【apply】、【OK】時,調用 2017/3/20 14:12
     * @throws ConfigurationException
     */
    @Override
    public void apply() throws ConfigurationException {

    }

    /**
     * 點擊【Reset】時,調用 2017/3/20 14:13
     */
    @Override
    public void reset() {

    }

    /**
     * 一定要實現,否則在Android Studio中會報錯 2017/4/4 17:40
     */
    @Override
    public void disposeUIResources() {

    }
}

PS

對實現Configurable后,重寫的幾個方法,上面代碼都有注釋,可以看看各個方法的作用。

2,plugin.xml添加信息

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

<!--擴展組件注冊 要是用到applicationConfigurable即項目配置等就在這里注冊-->
<extensions defaultExtensionNs="com.intellij">

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

</extensions>

3,

創建一個Form的界面布局文件,綁定上面的Settings類,布局的結構如下圖:

布局文件結構

PS

我做的是一個代碼統計工具,我的想法是打算開放統計類型,讓用戶自己去配置,所以我添加兩個按鈕,【刪除】、【添加】,還有一個表格去承載數據展示,比較簡單。

4,Table控件的使用:

首先得在Form頁面對JTable控件的【Custom Create】勾選,如圖:


勾選,自定義創建

a,創建DefaultTableModel模型,代碼如下:

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

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

b,初始化DefaultTableModel數據,代碼如下:

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

// 創建兩列 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(); // 直接設置boolean,CheckBox可直接設置
    object[i][1] = entity.getType();
    i++;
}

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

c,創建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,設置表格的表頭、列的大小,代碼如下(注釋切記記得看,我被坑了一下):

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

// 設置兩列各自寬度,有多少列,setPreferredWidth都得設置,才能生效 2017/3/20 15:54
table1.getColumnModel().getColumn(0).setPreferredWidth(35);
table1.getColumnModel().getColumn(0).setMaxWidth(30); // 設置最大值,防止窗口放大縮小時,動態變化 2017/3/20 15:55
table1.getColumnModel().getColumn(1).setPreferredWidth(465);

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

e,添加JTable點擊事件,獲取點擊的具體行、列,代碼如下:

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

        }
    }
});

PS

到這里的話,我們的Settings配置頁與其中包含的表格控件的創建與使用就結束了。

演示效果

Settings效果圖

中間紅色區域就是我們的創建的Form布局界面。上面圖片顯示,我配置了統計Python、Javascript的文件類型,統計效果如下:

測試項目結構圖
統計結果圖

如果覺得有點模糊的朋友,不妨去看下前面幾篇文章,我都是一步一步來講,來實現對應的界面以及功能的。

其實只要界面做出來了,實現邏輯還是比較簡單的。我這篇文章主要解決的問題在我插件問題集2中的,第1到4的問題。

今天我們要講的Settings配置頁就告一段落了,到這里能講的東西也快講完了,畢竟我自己想要做的代碼統計插件也做完了,大概還會持續更新兩三篇吧~~~

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,981評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,466評論 25 708
  • 實例 —— 云服務器 o-w-o.space 我的畢業設計~ 列表 終端工具tmuxzsh [+ oh-my-zs...
    君與一夏閱讀 458評論 0 0
  • 1. 場景一: 我:“跳跳,幫媽媽拿過來手機好嗎?” 跳跳就樂顛顛的給我拿了過來。 場景二: 跳跳:“媽媽,你能幫...
    宛若辰曦閱讀 197評論 0 1
  • 陽光溫熱,歲月正好,你還不來,我怎敢老去。——張愛玲 今天是西方的情人節,我們中國也受到西方文化的影響,很多人也過...
    阿木拉閱讀 659評論 0 0