上一篇: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)效果圖,如下:
以上的效果圖就是我們今天要講的主要內(nèi)容歪赢,喜歡的朋友請(qǐng)支持一下~~~
Settings配置頁(yè)是什么化戳?為什么要使用?
配置頁(yè)面是什么埋凯,可能看圖片會(huì)比較直觀一點(diǎn)点楼,如下:
在做完基礎(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)如下圖:
PS
我做的是一個(gè)代碼統(tǒng)計(jì)工具躬厌,我的想法是打算開放統(tǒng)計(jì)類型马昨,讓用戶自己去配置,所以我添加兩個(gè)按鈕扛施,【刪除】偏陪、【添加】,還有一個(gè)表格去承載數(shù)據(jù)展示煮嫌,比較簡(jiǎn)單笛谦。
4,Table控件的使用:
首先得在Form頁(yè)面對(duì)JTable控件的【Custom Create】勾選昌阿,如圖:
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é)束了。
演示效果
中間紅色區(qū)域就是我們的創(chuàng)建的Form布局界面突雪。上面圖片顯示,我配置了統(tǒng)計(jì)Python涡贱、Javascript的文件類型咏删,統(tǒng)計(jì)效果如下:
如果覺得有點(diǎn)模糊的朋友,不妨去看下前面幾篇文章问词,我都是一步一步來講督函,來實(shí)現(xiàn)對(duì)應(yīng)的界面以及功能的。
其實(shí)只要界面做出來了激挪,實(shí)現(xiàn)邏輯還是比較簡(jiǎn)單的辰狡。我這篇文章主要解決的問題在我插件問題集2中的,第1到4的問題垄分。
今天我們要講的Settings配置頁(yè)就告一段落了宛篇,到這里能講的東西也快講完了,畢竟我自己想要做的代碼統(tǒng)計(jì)插件也做完了薄湿,大概還會(huì)持續(xù)更新兩三篇吧~~~
今天就到這里叫倍,謝謝支持~~~