精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一時興起,自己動手開發了個IDEA插件!

開發 前端
一個插件的開發、調試、安裝就完成了,理論上通過這個簡單的例子就可以實現一些實際的功能了,因為其完整展示了數據輸入到數據獲取整個過程。

[[407214]]

前言

最近工作比較閑,自己琢磨點東西,一時興起想自己做個IDEA插件玩玩,說不定還能賣錢,哈哈。

版本工具

  • 說明JDK1.8
  • IDEA2020.1
  • 插件項目基于gradle構建。
  • 知識背景:swing

達到什么目標?

本實例實現一個Idea的插件,彈出一個表單Dialog,然后點擊按鈕,獲取表單里輸入的內容,然后將內容打印在表單的上方。

成品圖展示:

項目初始化

新建一個gradle項目,修改其build.gradle文件:

  1. plugins { 
  2.     id 'java' 
  3.     id 'org.jetbrains.intellij' version '0.4.14' //引入intellij的gradle插件 
  4.   
  5. group 'org.example' 
  6. version '1.0' //定義jar包/zip包的版本號 
  7.   
  8. sourceCompatibility = 1.8 //限制jdk的使用版本號,這里限制到8,表示生成的idea插件只能運行在jdk8以上的環境中 
  9.   
  10. repositories { 
  11.     mavenCentral() //遠程倉庫 
  12.   
  13. dependencies { 
  14.     //這里引別的依賴包 
  15.     testCompile group'junit'name'junit', version: '4.12' 
  16.   
  17. // See https://github.com/JetBrains/gradle-intellij-plugin/ 
  18. intellij { 
  19.     // 這里是指打插件包的時候用idea什么版本的依賴包打 
  20.     // 比如這里用2019.3打包,如果你的插件實現源碼里用了2019.3不存在的依賴包或類,就會報錯 
  21.     // 一般就填當前IDEA的版本號即可 
  22.     version "2019.3" 
  23.   
  24. patchPluginXml { 
  25.   
  26.     //changeNotes里的內容展示位置參考圖14 
  27.     changeNotes ""
  28.       1.0版本. 
  29.  
  30.       第1.0版本:初始化這個測試插件項目""
  31.   
  32.     // 這個意思是說當前定義的這個插件最早支持到什么版本的IDEA 
  33.     // 這里配置sinceBuild=191,表示插件只能被版本號大于等于2019.1版本的IDEA安裝,低于這個版本的將拋無法兼容的錯誤 
  34.     // ↑上方參考這篇問答:https://intellij-support.jetbrains.com/hc/en-us/community/posts/360003338799-Build-compatible-plugin 
  35.     sinceBuild "191" 

然后Idea的右邊欄gradle將會多出intellij選項:

“這里說下runIde,它用來調試插件,運行它會再次啟動一個Idea,這個Idea會自動安裝上你當前定義的插件包,讓你用來調試。

新增plugin.xml

這個文件非常重要,它可以指定你定義的插件出現在IDEA的哪個位置,可以指定具體的處理邏輯,還可以定義插件名稱、子名稱等等。

這個文件位于MATE-INF下:

配置內容為:

  1. <idea-plugin> 
  2.     <!--插件的id,注意不要跟其他插件重復,這個id全局唯一,盡可能復雜些--> 
  3.     <id>plugin.test</id> 
  4.     <!--插件的名稱--> 
  5.     <name>PluginTest</name
  6.     <vendor email="xxxx@qq.com" url="http://www.bilibili.com">你公司的名字</vendor> 
  7.  
  8.     <!--插件的描述信息,支持html,展示的位置參考圖14--> 
  9.     <description><![CDATA[ 
  10.     Plugin Test<br> 
  11.     第一行:單純只是個測試<br> 
  12.     第二行:都說了只是個測試(● ̄(エ) ̄●)<br> 
  13.     <a href='https://www.bilibili.com'>你猜猜這是哪個網站?</a> 
  14.     <em>v1.0</em> 
  15.     ]]></description> 
  16.      
  17.     <extensions defaultExtensionNs="com.intellij"
  18.         <!-- Add your extensions here --> 
  19.     </extensions> 
  20.  
  21.     <!--跟build.gradle里的sinceBuild一致即可,意義相同,必須配置--> 
  22.     <idea-version since-build="191"/> 
  23.  
  24.     <actions> 
  25.         <!--下面的group是分組,分組需要有一個唯一的id標識,text用來控制分組出現在IDEA時呈現的文案,description是描述,不會展現出來,簡單描述下分組就行--> 
  26.         <group id="PluginTest" text="插件測試組" description="插件測試描述"
  27.             <!--add-to-group控制把該分組加到IDEA里,group-id用來描述加在哪個位置,MainMenu表示加在IDEA上方的主菜單欄里, 
  28.             anchor表示順序,last表示最后一個,所以下面的配置可以描述為:將該插件加到IDEA上方主菜單欄的最后一位--> 
  29.             <add-to-group group-id="MainMenu" anchor="last"/> 
  30.             <!--這個用來指定一個分組下的觸發動作,同樣的需要一個id,自定義;class就是用來處理這個動作的邏輯類,具體的插件邏輯都會寫到對應的action類里,text用來控制文案,description為描述--> 
  31.             <action id="Plugin.Test.Action" 
  32.                     class="plugin.test.FromAction" 
  33.                     text="表單測試" description="表單測試描述"/> 
  34.         </group
  35.     </actions> 
  36. </idea-plugin> 

然后定義一個Action類,記為FormAction,繼承AnAction,實現其抽象方法actionPerformed即可:

  1. public class FromAction extends AnAction { 
  2.     @Override 
  3.     public void actionPerformed(@NotNull AnActionEvent e) { 
  4.         //TODO 這里放插件邏輯 
  5.     } 

啟動

現在雙擊runIde即可調出另外一個安裝了這個插件的IDEA界面,然后可以看運行結果進行調試。runIde還支持debug模式,不過運行時要右擊選擇:

來看下調試IDEA的界面運行效果:

定義Action

1. 定義會話框類

經過上面三步的配置,插件的基本樣式已經展示出來,但是點擊下方“表單測試”的action,并沒有什么用,因為其綁定的FormAction類里沒有任何有意義的實現。現在來實現開始的目標,點擊“表單測試”后,彈出一個自定義的表單會話框,然后點擊按鈕,獲取表單內容后打印在會話框內。

會話框(Dialog)需要定義一個繼承了IDEA的DialogWrapper抽象類的子類,這個子類就是自定義的會話框實現,所有的樣式定義、功能觸發都是放到這個子類里的,現定于如下子類:

  1. public class FormTestDialog extends DialogWrapper { 
  2.   
  3.     private String projectName; //假如需要獲取到項目名,作為該類的屬性放進來 
  4.   
  5.     // DialogWrapper沒有默認的無參構造方法,所以需要重寫構造方法,它提供了很多重載構造方法, 
  6.     // 這里使用傳project類型參數的那個,通過Project對象可以獲取當前IDEA內打開的項目的一些屬性, 
  7.     // 比如項目名,項目路徑等 
  8.     public FormTestDialog(@Nullable Project project) { 
  9.         super(project); 
  10.         setTitle("表單測試~~"); // 設置會話框標題 
  11.         this.projectName = project.getName(); 
  12.     } 
  13.   
  14.     // 重寫下面的方法,返回一個自定義的swing樣式,該樣式會展示在會話框的最上方的位置 
  15.     @Override 
  16.     protected JComponent createNorthPanel() { 
  17.         return null
  18.     } 
  19.   
  20.     // 重寫下面的方法,返回一個自定義的swing樣式,該樣式會展示在會話框的最下方的位置 
  21.     @Override 
  22.     protected JComponent createSouthPanel() { 
  23.         return null
  24.     } 
  25.   
  26.     // 重寫下面的方法,返回一個自定義的swing樣式,該樣式會展示在會話框的中央位置 
  27.     @Override 
  28.     protected JComponent createCenterPanel() { 
  29.         return null
  30.     } 

2. 會話框模塊&類元素對照

找個實際的會話框為例,針對上述中幾個方法所控制的會話框里的元素如下:

3. 會話框方法重定義

按照本文的實現目標,自定義的表單主體部分可以位于createCenterPanel里,然后表單的大標題可以放到createNorthPanel里,提交按鈕可以放到createSouthPanel里,現在改寫如下:

  1. public class FormTestDialog extends DialogWrapper { 
  2.   
  3.     private String projectName; 
  4.       
  5.     //swing樣式類,定義在4.3.2 
  6.     private FormTestSwing formTestSwing = new FormTestSwing(); 
  7.   
  8.     public FormTestDialog(@Nullable Project project) { 
  9.         super(true); 
  10.         setTitle("表單測試~~"); //設置會話框標題 
  11.         this.projectName = project.getName(); //獲取到當前項目的名稱 
  12.         init(); //觸發一下init方法,否則swing樣式將無法展示在會話框 
  13.     } 
  14.   
  15.     @Override 
  16.     protected JComponent createNorthPanel() { 
  17.         return formTestSwing.initNorth(); //返回位于會話框north位置的swing樣式 
  18.     } 
  19.   
  20.     // 特別說明:不需要展示SouthPanel要重寫返回null,否則IDEA將展示默認的"Cancel""OK"按鈕 
  21.     @Override 
  22.     protected JComponent createSouthPanel() { 
  23.         return formTestSwing.initSouth(); 
  24.     } 
  25.   
  26.     @Override 
  27.     protected JComponent createCenterPanel() { 
  28.         //定義表單的主題,放置到IDEA會話框的中央位置 
  29.         return formTestSwing.initCenter(); 
  30.     } 

4. 自定義swing樣式

下面是放置swing樣式的類:

  1. public class FormTestSwing { 
  2.   
  3.     private JPanel north = new JPanel(); 
  4.   
  5.     private JPanel center = new JPanel(); 
  6.   
  7.     private JPanel south = new JPanel(); 
  8.   
  9.     //為了讓位于底部的按鈕可以拿到組件內容,這里把表單組件做成類屬性 
  10.     private JLabel r1 = new JLabel("輸出:"); 
  11.     private JLabel r2 = new JLabel("NULL"); 
  12.   
  13.     private JLabel name = new JLabel("姓名:"); 
  14.     private JTextField nameContent = new JTextField(); 
  15.   
  16.     private JLabel age = new JLabel("年齡:"); 
  17.     private JTextField ageContent = new JTextField(); 
  18.   
  19.     public JPanel initNorth() { 
  20.   
  21.         //定義表單的標題部分,放置到IDEA會話框的頂部位置 
  22.   
  23.         JLabel title = new JLabel("表單標題"); 
  24.         title.setFont(new Font("微軟雅黑", Font.PLAIN, 26)); //字體樣式 
  25.         title.setHorizontalAlignment(SwingConstants.CENTER); //水平居中 
  26.         title.setVerticalAlignment(SwingConstants.CENTER); //垂直居中 
  27.         north.add(title); 
  28.   
  29.         return north; 
  30.     } 
  31.   
  32.     public JPanel initCenter() { 
  33.   
  34.         //定義表單的主體部分,放置到IDEA會話框的中央位置 
  35.   
  36.         //一個簡單的3行2列的表格布局 
  37.         center.setLayout(new GridLayout(3, 2)); 
  38.   
  39.         //row1:按鈕事件觸發后將結果打印在這里 
  40.         r1.setForeground(new Color(255, 47, 93)); //設置字體顏色 
  41.         center.add(r1); 
  42.         r2.setForeground(new Color(139, 181, 20)); //設置字體顏色 
  43.         center.add(r2); 
  44.   
  45.         //row2:姓名+文本框 
  46.         center.add(name); 
  47.         center.add(nameContent); 
  48.   
  49.         //row3:年齡+文本框 
  50.         center.add(age); 
  51.         center.add(ageContent); 
  52.   
  53.         return center; 
  54.     } 
  55.   
  56.     public JPanel initSouth() { 
  57.   
  58.         //定義表單的提交按鈕,放置到IDEA會話框的底部位置 
  59.   
  60.         JButton submit = new JButton("提交"); 
  61.         submit.setHorizontalAlignment(SwingConstants.CENTER); //水平居中 
  62.         submit.setVerticalAlignment(SwingConstants.CENTER); //垂直居中 
  63.         south.add(submit); 
  64.   
  65.         return south; 
  66.     } 

現在點擊下runIde按鈕,同樣的,在調試IDE里點擊“表單測試”,然后就會彈出如下表單框:

“除非有特殊情況需要自定義swing樣式,否則建議不加任何swing樣式,這樣自定義的swing界面是會隨著IDEA的主題改變而去自適應的,比如將圖7中的調試IDE的主題設置成Darcula,自定義的表單也會自適應的變成黑色背景:

5. 事件綁定

定義好了樣式,現在給“提交”按鈕綁定一個事件,現在改寫下FormTestSwing.initSouth方法:

  1. public JPanel initSouth() { 
  2.   
  3.     //定義表單的提交按鈕,放置到IDEA會話框的底部位置 
  4.   
  5.     JButton submit = new JButton("提交"); 
  6.     submit.setHorizontalAlignment(SwingConstants.CENTER); //水平居中 
  7.     submit.setVerticalAlignment(SwingConstants.CENTER); //垂直居中 
  8.     south.add(submit); 
  9.   
  10.     //按鈕事件綁定 
  11.     submit.addActionListener(e -> { 
  12.         //獲取到name和age 
  13.         String name = nameContent.getText(); 
  14.         String age = ageContent.getText(); 
  15.         //刷新r2標簽里的內容,替換為name和age 
  16.         r2.setText(String.format("name:%s, age:%s"name, age)); 
  17.     }); 
  18.   
  19.     return south; 

現在再來點擊下“提交”按鈕,就可以輸出表單內容了:

6. 插件綁定類:FormAction

之前講過,這個類是插件的入口,結合上面定義好的表單Dialog,來看下它是怎么寫的:

  1. public class FromAction extends AnAction { 
  2.     @Override 
  3.     public void actionPerformed(@NotNull AnActionEvent e) { 
  4.         FormTestDialog formTestDialog = new FormTestDialog(e.getProject()); 
  5.         formTestDialog.setResizable(true); //是否允許用戶通過拖拽的方式擴大或縮小你的表單框,我這里定義為true,表示允許 
  6.         formTestDialog.show(); 
  7.     } 

7. 插件的打包&安裝

截止到第四步,都只是在調試IDE里查看效果,如果一個插件開發完成后,需要被實際的IDEA安裝,這個時候就需要借助打包選項來打包你的插件,點擊下面的選項構建插件:

構建完成后,查看build包下的distributions目錄,里面的zip包就可以直接安裝進你的IDEA:

然后選擇IDEA的Preferences下的plugins選項,彈出如下框,按照圖里的指示選擇zip包安裝即可:

然后安裝完成,重啟IDEA即可:

各個展示模塊對應插件項目里配置的來源參考下圖:

重啟后出現了跟調試IDEA里一樣的菜單欄,選中后運行成功:

總結

截止到這里,一個插件的開發、調試、安裝就完成了,理論上通過這個簡單的例子就可以實現一些實際的功能了,因為其完整展示了數據輸入到數據獲取整個過程。

因為工作當中需要寫一個代碼生成器,想要以一個IDEA插件的方式提供服務,所以在這里做個記錄,防止以后再次用到時從零開始。

要有一定的swing基礎,我在開發代碼生成器的時候,就是因為swing基礎太差,布局花了非常多的時間。

 

責任編輯:姜華 來源: 無聊學Java
相關推薦

2011-08-25 09:30:22

2021-04-26 07:31:22

SpringMVCweb框架

2015-09-01 09:49:28

2024-12-06 09:58:09

2017-03-02 13:31:02

監控系統

2023-07-10 09:53:59

console開發插件

2010-07-23 10:23:05

Google機房

2017-02-14 10:20:43

Java Class解析器

2020-10-10 06:32:43

IDEA插件環境

2023-02-13 00:18:22

前端庫框架集合

2016-07-25 18:09:29

2025-03-11 01:28:16

2015-06-02 10:24:43

iOS網絡請求降低耦合

2015-06-02 09:51:40

iOS網絡請求封裝接口

2011-10-31 10:17:05

插件

2016-09-21 12:34:10

Chrome瀏覽器插件

2022-11-10 09:28:40

框架開發

2024-03-08 12:45:00

C#Web服務器

2020-10-12 10:58:15

IDEA插件監聽

2021-02-06 23:26:25

聊天室開發WebSocket
點贊
收藏

51CTO技術棧公眾號

国产亚洲福利社区| 久久久久久欧美| 天天干天天草天天| av片在线观看永久免费| 国产福利精品一区二区| 5566日本婷婷色中文字幕97| 成人在线观看免费高清| 天堂久久av| 91国内精品野花午夜精品| 国产美女视频免费| 国产精品国产高清国产| 久久成人免费日本黄色| 77777亚洲午夜久久多人| 欧美人与禽zoz0善交| 日韩中文字幕一区二区高清99| 欧美日韩精品在线| 国产在线拍揄自揄拍无码| 色网站在线免费观看| 国产精品一卡二| 国产成人一区二区三区电影| 久久久久无码国产精品不卡| 久久中文亚洲字幕| 精品亚洲一区二区三区在线播放 | 国产原厂视频在线观看| 99久久精品免费| 亚洲一区二区三区久久| 青青草视频在线观看免费| 亚洲二区免费| 美日韩丰满少妇在线观看| 在线观看福利片| 成人性生交大片免费看96| 欧美日韩国产不卡| 成人亚洲视频在线观看| 91色在线看| 亚洲免费在线电影| 国产精品jizz在线观看老狼| 国外av在线| 97精品视频在线观看自产线路二| yellow视频在线观看一区二区 | 日韩精品一区二区三区四区视频 | 久久人人超碰精品| 国产精品久久久久免费| 精品国自产在线观看| 九九在线精品视频| 国产美女搞久久| 国产99久久久久久免费看| 亚洲影视综合| 26uuu亚洲伊人春色| 精品亚洲永久免费| 国产精品www.| 欧美激情精品久久久久久免费印度| 久久精品在线观看视频| 成人羞羞网站入口免费| 一区二区欧美激情| 精品丰满少妇一区二区三区| 欧美日一区二区| 亚洲午夜精品久久久久久久久久久久| 人人妻人人澡人人爽人人精品 | 中日韩精品视频在线观看| 国产主播一区| 国内成人精品一区| 欧美一二三区视频| 亚洲女同同性videoxma| 欧美专区在线观看| 免费看一级视频| 日韩精品一二三区| 国产精品丝袜久久久久久高清| 国产天堂第一区| 麻豆精品一区二区综合av| 国产综合色香蕉精品| 国产精品无码专区av免费播放| 韩国女主播成人在线观看| 91网站免费看| 亚洲a视频在线| 99久精品国产| 婷婷精品国产一区二区三区日韩| 婷婷五月在线视频| 亚洲男人天堂av网| 少妇人妻在线视频| 欧美日韩大片| 7777女厕盗摄久久久| 国产高潮失禁喷水爽到抽搐| 欧美日韩麻豆| 在线午夜精品自拍| 日本天堂中文字幕| 国产精品久久久亚洲一区| 国产精品啪视频| 午夜免费福利视频| 久久亚洲私人国产精品va媚药| 日韩一区国产在线观看| 日韩免费影院| 91精品1区2区| 日韩精品――色哟哟| 免费成人网www| 日韩视频在线观看免费| 日韩欧美高清在线观看| 免费高清视频精品| 国产精品久久久久久久久久久久冷 | av影院在线| 欧美日韩专区在线| jjzzjjzz欧美69巨大| 国产成人ay| 欧美激情18p| 曰批又黄又爽免费视频| 成人av午夜电影| 亚洲国产精品一区二区第一页 | 91麻豆国产自产在线观看亚洲| 欧美日韩国产二区| 一级片aaaa| 91欧美激情一区二区三区成人| 中文字幕人成一区| 高清不卡亚洲| 亚洲高清久久久久久| 亚洲女人毛茸茸高潮| 国产日韩欧美一区在线 | 一级黄色特级片| 欧美爱爱网站| 欧美成人一区二区三区电影| 波多野结衣黄色网址| 波多野结衣一区二区三区| 欧美h视频在线观看| www成人在线视频| 亚洲国产婷婷香蕉久久久久久| 日本黄色录像视频| 日本视频在线一区| 免费日韩电影在线观看| 丁香花在线观看完整版电影| 欧美精品 国产精品| 特级西西www444人体聚色| 一区二区福利| 国产另类第一区| 欧美理论片在线播放| 91精品国产欧美日韩| 黄色国产在线播放| 日本欧美在线看| 日韩福利影院| 色婷婷综合久久久中字幕精品久久 | 亚洲综合成人网| 特黄视频免费观看| 日韩成人免费| 国产精品三级在线| av在线三区| 欧亚一区二区三区| 久久久久久久毛片| 男女性色大片免费观看一区二区 | 国产精品久久久久久久av| 男人的天堂亚洲| 欧美激情国产日韩| 天天免费亚洲黑人免费| 亚洲欧美在线免费观看| 中文字幕精品无码一区二区| 91麻豆精东视频| 97视频在线免费播放| 国产欧美日韩视频在线| 国产成人精品一区| av资源网站在线观看| 欧美日韩在线电影| 日本黄色录像视频| 国产精品1区二区.| 日韩精品 欧美| 亚洲亚洲免费| 国产精品久久久久久久av电影| 成人高清免费在线播放| 欧美日韩国产精选| www.色小姐com| 成人av免费观看| 女人和拘做爰正片视频| 区一区二视频| 91在线免费网站| av老司机在线观看| 亚洲欧美三级伦理| 亚洲天堂手机版| 亚洲一区二区偷拍精品| 97香蕉碰碰人妻国产欧美| 天堂一区二区在线免费观看| 一区二区三区偷拍| 91成人午夜| 日韩av三级在线观看| 久久bbxx| 亚洲电影av在线| 波多野结衣绝顶大高潮| 一区二区三区在线观看欧美| 黄色网址在线视频| 看电视剧不卡顿的网站| 日韩xxxx视频| 成人国产精品一级毛片视频| 91超碰rencao97精品| 中文在线中文资源| 不卡av电影在线观看| 婷婷亚洲一区二区三区| 欧美在线视频全部完| 国产免费无码一区二区视频| 91蝌蚪porny九色| 三级一区二区三区| 亚洲一区国产一区| 一道精品一区二区三区| 乱亲女h秽乱长久久久| 国产欧美精品一区二区| av丝袜在线| 久久夜色撩人精品| 国产在线视频网站| 精品噜噜噜噜久久久久久久久试看| 色一情一乱一伦| 亚洲精品美国一| 欧美精品日韩在线| av福利精品导航| 91视频福利网| 蜜桃视频一区二区| 欧美在线观看www| 欧美日本免费| 在线国产精品网| 亚欧洲精品视频在线观看| 91亚洲精品一区二区| 超碰一区二区| 久久男人资源视频| 婷婷在线播放| 日韩在线观看免费高清完整版| 手机福利小视频在线播放| 欧美本精品男人aⅴ天堂| 国产一区二区三区成人| 欧美网站在线观看| 日韩美女视频网站| 亚洲已满18点击进入久久| 中文乱码字幕高清一区二区| 国产亚洲成av人在线观看导航| 亚洲国产精品无码久久久久高潮| 国产福利视频一区二区三区| 想看黄色一级片| 久久国产三级精品| 精品日韩久久久| 日本不卡视频一二三区| 999香蕉视频| 老鸭窝亚洲一区二区三区| 久草热视频在线观看| 亚洲国产免费看| av网站手机在线观看| 欧美视频二区| 久久久国内精品| 欧美日韩精品| 欧美国产综合在线| 亚洲欧美亚洲| av日韩在线看| 亚洲视频日本| 波多野结衣乳巨码无在线| 亚洲精品裸体| 日本国产在线播放| 国产亚洲精品bv在线观看| 成人午夜精品久久久久久久蜜臀| 国产精品av一区二区| 欧美少妇在线观看| 欧美日一区二区三区在线观看国产免| 欧美日韩午夜爽爽| 伊人久久大香线蕉综合热线| 精品国产一区二区三区无码| 黄色av日韩| 国产亚洲欧美在线视频| 亚洲一区成人| 国产又粗又长又大的视频| 欧美bbbbb| 亚洲小视频网站| 国产精品88888| 台湾佬美性中文| 97se亚洲国产综合自在线观| 中文字幕5566| 中文久久乱码一区二区| 蜜桃av.com| 依依成人精品视频| 国偷自拍第113页| 在线视频你懂得一区| 一女二男一黄一片| 精品久久人人做人人爽| 亚洲欧洲成人在线| 中文日韩在线观看| 超碰在线免费公开| 97精品国产91久久久久久| 久久夜夜操妹子| 91免费精品国偷自产在线| 中文字幕区一区二区三| 久久久久一区二区| 99久久99视频只有精品| 东北少妇不带套对白| 日韩不卡在线观看日韩不卡视频| 免费在线观看污网站| www.亚洲色图.com| 99精品全国免费观看| 亚洲最新在线观看| 中文字幕一区二区三区四区欧美| 69堂成人精品免费视频| 少妇人妻偷人精品一区二区| 一道本无吗dⅴd在线播放一区 | 97在线精品视频| 久久亚洲资源中文字| 国模精品娜娜一二三区| 色综合久久一区二区三区| 日韩网站在线免费观看| 美腿丝袜在线亚洲一区| 亚洲一级av无码毛片精品| 国产精品白丝在线| 亚洲 欧美 日韩 综合| 欧美巨大另类极品videosbest | 国产日韩精品在线看| 久久91超碰青草是什么| 日韩三区在线| 国产综合精品一区二区三区| 999久久久91| 毛片av免费在线观看| 成人激情综合网站| 最新日韩免费视频| 色婷婷综合中文久久一本| 午夜精品在线播放| 久久九九亚洲综合| 欧美亚洲大片| 欧美精品123| 亚洲人体大胆视频| 性一交一黄一片| 国产精品色噜噜| 好吊色在线视频| 亚洲精品国产成人| 激情av在线播放| 成人黄色中文字幕| 色综合咪咪久久网| 国产性生交xxxxx免费| 91啪亚洲精品| 羞羞影院体验区| 亚洲国产成人久久综合一区| 性欧美video高清bbw| 成人在线中文字幕| 91视频综合| 色天使在线观看| 国产精品美日韩| 在线观看国产一区二区三区| 国产亚洲精品91在线| 欧美电影h版| 日韩亚洲视频| 免费在线观看视频一区| 最近中文字幕在线mv视频在线 | 可以免费在线看黄的网站| 91在线视频观看| 九九热在线免费观看| 日韩不卡中文字幕| 色在线免费观看| 欧美一区二区高清在线观看| 美女尤物久久精品| 久久亚洲AV无码专区成人国产| 日本精品一区二区三区高清| 你懂的视频在线播放| 国产成人精品久久久| 国产一区三区在线播放| 亚洲最大综合网| 国产精品情趣视频| 国产精品久久久久久免费播放| 久久久精品欧美| 91精品国产自产在线丝袜啪| 99久久免费观看| av在线一区二区三区| 日韩特级黄色片| 伊人久久久久久久久久久| 九九热这里有精品| 国产精品啪啪啪视频| 成人av影院在线| 波多野结衣午夜| 久久视频在线直播| 99久久人爽人人添人人澡| 欧美丰满熟妇bbbbbb百度| 国产亚洲一区二区在线观看| 亚洲天堂国产精品| 欧美劲爆第一页| 蜜臀av免费一区二区三区| 免费一区二区三区在线观看| 亚洲免费在线电影| 五月婷婷深深爱| 国产精品视频yy9099| 欧美成人亚洲| 精品人妻一区二区三区视频| 欧美最新大片在线看| 香蕉久久aⅴ一区二区三区| 国语精品免费视频| 蜜臀精品久久久久久蜜臀| 久久久国产精品人人片| 亚洲精品综合精品自拍| 香蕉久久一区| 青青青青草视频| 国产精品嫩草影院com| 免费激情视频网站| 国产精品一区二区三区免费视频| 黄色亚洲精品| 国产三级短视频| 亚洲国产精品免费| 亚洲精品777| 大肉大捧一进一出好爽视频| 一区在线观看免费| 天天干免费视频| 91免费版网站入口| 午夜一区不卡| 美女的奶胸大爽爽大片| 一区二区成人精品| 丝袜av一区| 中文字幕亚洲日本| 欧美日韩卡一卡二| 秋霞伦理一区|