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

使用 Java 構(gòu)建你自己的文本編輯器

開發(fā) 后端
有時候,除你自己外,沒有人能制作你所夢想的工具。以下是如何開始構(gòu)建你自己的文本編輯器。

[[377526]]

有時候,除你自己外,沒有人能制作你所夢想的工具。以下是如何開始構(gòu)建你自己的文本編輯器。

有很多文本編輯器。有運行在終端中、運行在 GUI 中、運行在瀏覽器和瀏覽器引擎中的。有很多是還不錯,有一些則是極好的。但是有時候,毫無疑問,最令人滿意的就是你自己構(gòu)建的編輯器。

毫無疑問:構(gòu)建一個真正優(yōu)秀的文本編輯器比表面上看上去要困難得多。但話說回來,建立一個基本的文本編輯器也不像你擔(dān)心的那樣難。事實上,大多數(shù)編程工具包已經(jīng)為你準(zhǔn)備好了文本編輯器的大部分組件。圍繞文本編輯的組件,例如菜單條,文件選擇對話框等等,是很容易落到實處。因此,雖然是中級的編程課程,但構(gòu)建一個基本的文本編輯器是出乎意料的有趣和簡明。你可能會發(fā)現(xiàn)自己渴望使用一個自己構(gòu)造的工具,而且你使用得越多,你可能會有更多的靈感來增加它的功能,從而更多地學(xué)習(xí)你正在使用的編程語言。

為了使這個練習(xí)切合實際,最好選擇一種具有令人滿意的 GUI 工具箱的語言。有很多種選擇,包括 Qt 、FLTK 或 GTK ,但是一定要先評審一下它的文檔,以確保它有你所期待的功能。對于這篇文章來說,我使用 Java 以及其內(nèi)置的 Swing 小部件集。如果你想使用一種不同的語言或者一種不同的工具集,這篇文章在如何幫你處理這種問題的方面也仍然是有用的。

不管你選擇哪一種,在任何主要的工具箱中編寫一個文本編輯器都是驚人的相似。如果你是 Java 新手,需要更多關(guān)于開始的信息,請先閱讀我的 猜謎游戲文章 。

工程設(shè)置

通常,我使用并推薦像 Netbeans 或 Eclipse 這樣的 IDE,但我發(fā)現(xiàn),當(dāng)學(xué)習(xí)一種新的語言時,手工做一些工作是很有幫助的,這樣你就能更好地理解使用 IDE 時被隱藏起來的東西。在這篇文章中,我假設(shè)你正在使用文本編輯器和終端進行編程。

在開始前,為你自己的工程創(chuàng)建一個工程目錄。在工程文件夾中,創(chuàng)建一個名稱為 src 的目錄來容納你的源文件。

  1. $ mkdir -p myTextEditor/src
  2. $ cd myTextEditor

在你的 src 目錄中創(chuàng)建一個名稱為 TextEdit.java 的空白的文件:

  1. $ touch src/TextEditor.java

在你最喜歡的文本編輯器中打開這個空白的文件(我的意思是除你自己編寫之外的最喜歡的一款文本編輯器),然后準(zhǔn)備好編碼吧!

包和導(dǎo)入

為確保你的 Java 應(yīng)用程序有一個唯一的標(biāo)識符,你必須聲明一個 package 名稱。典型的格式是使用一個反向的域名,如果你真的有一個域名的話,這就特別容易了。如果你沒有域名的話,你可以使用 local 作為最頂層。像 Java 和很多語言一樣,行以分號結(jié)尾。

在命名你的 Java 的 package 后,你必須告訴 Java 編譯器(javac)使用哪些庫來構(gòu)建你的代碼。事實上,這通常是你邊編寫代碼邊添加的內(nèi)容,因為你很少事先知道你自己所需要的庫。然而,這里有一些庫是顯而易見的。例如,你知道這個文本編輯器是基于 Swing GUI 工具箱的,因此,導(dǎo)入 javax.swing.JFrame 和javax.swing.UIManager 和其它相關(guān)的特定庫。

  1. package com.example.textedit;
  2.  
  3. import javax.swing.JFileChooser;
  4. import javax.swing.JFrame;
  5. import javax.swing.JMenu;
  6. import javax.swing.JMenuBar;
  7. import javax.swing.JMenuItem;
  8. import javax.swing.JOptionPane;
  9. import javax.swing.JTextArea;
  10. import javax.swing.UIManager;
  11. import javax.swing.UnsupportedLookAndFeelException;
  12. import javax.swing.filechooser.FileSystemView;
  13. import java.awt.Component;
  14. import java.awt.event.ActionEvent;
  15. import java.awt.event.ActionListener;
  16. import java.io.File;
  17. import java.io.FileNotFoundException;
  18. import java.io.FileReader;
  19. import java.io.FileWriter;
  20. import java.io.IOException;
  21. import java.util.Scanner;
  22. import java.util.logging.Level;
  23. import java.util.logging.Logger;

對于這個練習(xí)的目標(biāo),你可以提前預(yù)知你所需要的所有的庫。在真實的生活中,不管你喜歡哪一種語言,你都將在研究如何解決一些問題的時候發(fā)現(xiàn)庫,然后,你將它導(dǎo)入到你的代碼中,并使用它。不需要擔(dān)心 —— 如果你忘記包含一個庫,你的編譯器或解釋器將警告你!

主窗口

這是一個單窗口應(yīng)用程序,因此這個應(yīng)用程序的主類是一個 JFrame ,其附帶有一個捕捉菜單事件的 ActionListener 。在 Java 中,當(dāng)你使用一個現(xiàn)有的小部件元素時,你可以使用你的代碼“擴展”它。這個主窗口需要三個字段:窗口本身(一個 JFrame 的實例)、一個用于文件選擇器返回值的標(biāo)識符和文本編輯器本身(JTextArea)。

  1. public final class TextEdit extends JFrame implements ActionListener {
  2. private static JTextArea area;
  3. private static JFrame frame;
  4. private static int returnValue = 0;

令人驚奇的是,這數(shù)行代碼完成了實現(xiàn)一個基本文本編輯器的 80% 的工作,因為 JtextArea 是 Java 的文本輸入字段。剩下的 80 行代碼大部分用于處理輔助功能,比如保存和打開文件。

構(gòu)建一個菜單

JMenuBar 小部件被設(shè)計到 JFrame 的頂部,它為你提供你想要的很多菜單項。Java 不是一種 拖放式的編程語言,因此,對于你所添加的每一個菜單,你都還必須編寫一個函數(shù)。為保持這個工程的可控性,我提供了四個函數(shù):創(chuàng)建一個新的文件,打開一個現(xiàn)有的文件,保存文本到一個文件,和關(guān)閉應(yīng)用程序。

在大多數(shù)流行的工具箱中,創(chuàng)建一個菜單的過程基本相同。首先,你創(chuàng)建菜單條本身,然后創(chuàng)建一個頂級菜單(例如 “File” ),再然后創(chuàng)建子菜單項(例如,“New”、“Save” 等)。

  1. public TextEdit() { run(); }
  2.  
  3. public void run() {
  4. frame = new JFrame("Text Edit");
  5.  
  6. // Set the look-and-feel (LNF) of the application
  7. // Try to default to whatever the host system prefers
  8. try {
  9. UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  10. } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
  11. Logger.getLogger(TextEdit.class.getName()).log(Level.SEVERE, null, ex);
  12. }
  13.  
  14. // Set attributes of the app window
  15. area = new JTextArea();
  16. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  17. frame.add(area);
  18. frame.setSize(640, 480);
  19. frame.setVisible(true);
  20.  
  21. // Build the menu
  22. JMenuBar menu_main = new JMenuBar();
  23.  
  24. JMenu menu_file = new JMenu("File");
  25.  
  26. JMenuItem menuitem_new = new JMenuItem("New");
  27. JMenuItem menuitem_open = new JMenuItem("Open");
  28. JMenuItem menuitem_save = new JMenuItem("Save");
  29. JMenuItem menuitem_quit = new JMenuItem("Quit");
  30.  
  31. menuitem_new.addActionListener(this);
  32. menuitem_open.addActionListener(this);
  33. menuitem_save.addActionListener(this);
  34. menuitem_quit.addActionListener(this);
  35.  
  36. menu_main.add(menu_file);
  37.  
  38. menu_file.add(menuitem_new);
  39. menu_file.add(menuitem_open);
  40. menu_file.add(menuitem_save);
  41. menu_file.add(menuitem_quit);
  42.  
  43. frame.setJMenuBar(menu_main);
  44. }

現(xiàn)在,所有剩余的工作是實施菜單項所描述的功能。

編程菜單動作

你的應(yīng)用程序響應(yīng)菜單選擇,是因為你的 JFrame 有一個附屬于它的 ActionListener 。在 Java 中,當(dāng)你實施一個事件處理程序時,你必須“重寫”其內(nèi)建的函數(shù)。這只是聽起來可怕。你不是在重寫 Java;你只是在實現(xiàn)已經(jīng)被定義但尚未實施事件處理程序的函數(shù)。

在這種情況下,你必須重寫 actionPerformed方法。因為在 “File” 菜單中的所有條目都與處理文件有關(guān),所以在我的代碼中很早就定義了一個 JFileChooser 。代碼其它部分被劃分到一個 if 語句的子語句中,這起來像接收到什么事件就相應(yīng)地執(zhí)行什么動作。每個子語句都與其它的子語句完全不同,因為每個項目都標(biāo)示著一些完全唯一的東西。最相似的是 “Open” 和 “Save”,因為它們都使用 JFileChooser 選擇文件系統(tǒng)中的一個位置來獲取或放置數(shù)據(jù)。

“New” 菜單會在沒有警告的情況下清理 JTextArea ,“Quit” 菜單會在沒有警告的情況下關(guān)閉應(yīng)用程序。這兩個 “功能” 都是不安全的,因此你應(yīng)該想對這段代碼進行一點改善,這是一個很好的開始。在內(nèi)容還沒有被保存前,一個友好的警告是任何一個好的文本編輯器都必不可少的一個功能,但是在這里為了簡單,這是未來的一個功能。

  1. @Override
  2. public void actionPerformed(ActionEvent e) {
  3. String ingest = null;
  4. JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
  5. jfc.setDialogTitle("Choose destination.");
  6. jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
  7.  
  8. String ae = e.getActionCommand();
  9. if (ae.equals("Open")) {
  10. returnValue = jfc.showOpenDialog(null);
  11. if (returnValue == JFileChooser.APPROVE_OPTION) {
  12. File f = new File(jfc.getSelectedFile().getAbsolutePath());
  13. try{
  14. FileReader read = new FileReader(f);
  15. Scanner scan = new Scanner(read);
  16. while(scan.hasNextLine()){
  17. String line = scan.nextLine() + "\n";
  18. ingest = ingest + line;
  19. }
  20. area.setText(ingest);
  21. }
  22. catch ( FileNotFoundException ex) { ex.printStackTrace(); }
  23. }
  24. // 保存
  25. } else if (ae.equals("Save")) {
  26. returnValue = jfc.showSaveDialog(null);
  27. try {
  28. File f = new File(jfc.getSelectedFile().getAbsolutePath());
  29. FileWriter out = new FileWriter(f);
  30. out.write(area.getText());
  31. out.close();
  32. } catch (FileNotFoundException ex) {
  33. Component f = null;
  34. JOptionPane.showMessageDialog(f,"File not found.");
  35. } catch (IOException ex) {
  36. Component f = null;
  37. JOptionPane.showMessageDialog(f,"Error.");
  38. }
  39. } else if (ae.equals("New")) {
  40. area.setText("");
  41. } else if (ae.equals("Quit")) { System.exit(0); }
  42. }
  43. }

從技術(shù)上來說,這就是這個文本編輯器的全部。當(dāng)然,并沒有真正做什么,除此之外,在這里仍然有測試和打包步驟,因此仍然有很多時間來發(fā)現(xiàn)缺少的必需品。假設(shè)你沒有注意到提示:在這段代碼中 肯定 缺少一些東西。你現(xiàn)在知道缺少的是什么嗎?(在 猜謎游戲文章 中被大量的提到。)

測試

你現(xiàn)在可以測試你的應(yīng)用程序。從終端中啟動你所編寫的文本編輯器:

  1. $ java ./src/TextEdit.java
  2. error: cant find main(String[]) method in class: com.example.textedit.TextEdit

它看起來像在代碼中沒有獲得 main 方法。這里有一些方法來修復(fù)這個問題:你可以在 TextEdit.java 中創(chuàng)建一個 main 方法,并讓它運行一個 TextEdit 類實例,或者你可以創(chuàng)建一個單獨的包含 main 方法的文件。兩種方法都可以工作,但從大型工程的預(yù)期來看,使用后者更為明智,因此,使用單獨的文件與其一起工作使之成為一個完整的應(yīng)用程序的方法是值得使用的。

在 src 中創(chuàng)建一個 Main.java 文件,并在最喜歡的編輯器中打開:

  1. package com.example.textedit;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. TextEdit runner = new TextEdit();
  6. }
  7. }

你可以再次嘗試,但是現(xiàn)在有兩個相互依賴的文件要運行,因此你必須編譯代碼。Java 使用 javac 編譯器,并且你可以使用 -d 選項來設(shè)置目標(biāo)目錄:

  1. $ javac src/*java -d .

這會在你的軟件包名稱 com/example/textedit 后創(chuàng)建一個準(zhǔn)確地模型化的新的目錄結(jié)構(gòu)。這個新的類路徑包含文件 Main.class 和 TextEdit.class ,這兩個文件構(gòu)成了你的應(yīng)用程序。你可以使用 java 并通過引用你的 Main 類的位置和 名稱(非文件名稱)來運行它們:

  1. $ java info/slackermedia/textedit/Main`

你的文本編輯器打開了,你可以在其中輸入文字,打開文件,甚至保存你的工作。

 

帶有單個下拉菜單的白色文本編輯器框,有 File、New、Open、Save 和 Quit 菜單

以 Java 軟件包的形式分享你的工作

雖然一些程序員似乎看起來認(rèn)可以各種各樣的源文件的形式分發(fā)軟件包,并鼓勵其他人來學(xué)習(xí)如何運行它,但是,Java 讓打包應(yīng)用程序變得真地很容易,以至其他人可以很容易的運行它。你已經(jīng)有了必備的大部分結(jié)構(gòu)體,但是你仍然需要一些元數(shù)據(jù)到一個 Manifest.txt 文件中:

  1. $ echo "Manifest-Version: 1.0" > Manifest.txt

用于打包的 jar 命令,與 tar 命令非常相似,因此很多選項對你來說可能會很熟悉。要創(chuàng)建一個 JAR 文件:

  1. $ jar cvfme TextEdit.jar
  2. Manifest.txt
  3. com.example.textedit.Main
  4. com/example/textedit/*.class

根據(jù)命令的語法,你可以推測出它會創(chuàng)建一個新的名稱為 TextEdit.jar 的 JAR 文件,它所需要的清單數(shù)據(jù)位于 Manifest.txt 中。它的主類被定義為軟件包名稱的一個擴展,并且類自身是 com/example/textedit/Main.class 。

你可以查看 JAR 文件的內(nèi)容:

  1. $ jar tvf TextEdit.jar
  2. 0 Wed Nov 25 META-INF/
  3. 105 Wed Nov 25 META-INF/MANIFEST.MF
  4. 338 Wed Nov 25 com/example/textedit/textedit/Main.class
  5. 4373 Wed Nov 25 com/example/textedit/textedit/TextEdit.class

如果你想看看你的元數(shù)據(jù)是如何被集成到 MANIFEST.MF 文件中的,你甚至可以使用 xvf 選項來提取它。

使用 java 命令來運行你的 JAR 文件:

  1. $ java -jar TextEdit.jar

你甚至可以 創(chuàng)建一個桌面文件 ,這樣,在單擊應(yīng)用程序菜單中的圖標(biāo)時,應(yīng)用程序就會啟動。

改進它

在當(dāng)前狀態(tài)下,這是一個非常基本的文本編輯器,最適合做快速筆記或簡短自述文檔。一些改進(比如添加垂直滾動條)只要稍加研究就能快速簡單地完成,而另一些改進(比如實現(xiàn)一個廣泛的偏好系統(tǒng))則需要真正的工作。

但如果你一直在想學(xué)一種新的語言,這可能是一個完美的自我學(xué)習(xí)實用工程。創(chuàng)建一個文本編輯器,如你所見,它在代碼方面并不難對付,它在一定范圍是可控的。如果你經(jīng)常使用文本編輯器,那么編寫你自己的文本編輯器可能會使你滿意和樂趣。因此打開你最喜歡的文本編輯器(你寫的那個),開始添加功能吧! 

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2021-01-07 11:00:59

Sed文本編輯器Linux

2020-12-20 08:49:01

gedit文本編輯器GNOME

2020-03-25 14:16:58

文本編輯器語言開發(fā)

2020-12-23 22:25:11

Vi文本編輯器Unix

2010-03-24 09:20:07

CentOS vi編輯

2020-04-09 14:23:44

PythonMarkdown編輯器

2017-01-18 17:00:35

編輯器

2021-01-13 19:13:57

Atom文本編輯器

2021-01-13 13:29:06

文本編輯器Atom開源

2017-07-27 20:21:06

iOSUITableView富文本編輯器

2020-12-29 06:34:55

KDE Plasma文本編輯器

2023-04-17 11:03:52

富文本編輯器MTE

2022-05-13 15:32:11

GNOME文本編輯器

2020-12-09 12:20:37

Jed文本編輯器Linux

2021-01-08 13:56:50

LinuxJOE文本編輯器

2013-11-18 10:08:56

工具免費編程工具

2016-09-23 20:30:54

Javascriptuiwebview富文本編輯器

2011-05-11 10:27:42

文本編輯器

2022-01-18 09:35:36

GNOME編輯器Linux

2012-09-29 11:38:27

編程工具文本編輯器編程
點贊
收藏

51CTO技術(shù)棧公眾號

国产精品毛片久久久久久| 国产精品视频| 日韩欧美电影在线| 老太脱裤让老头玩ⅹxxxx| 免费av在线电影| 久久电影网电视剧免费观看| 欧美激情久久久久| 新91视频在线观看| 国产激情一区| 欧美日韩亚洲视频| 波多野结衣三级在线| 色欲久久久天天天综合网| 亚洲一区日本| 久久亚洲精品成人| 久久人人爽人人爽人人片| 日韩欧美专区| 欧美性开放视频| 奇米777四色影视在线看| 国产在线黄色| 不卡一区二区中文字幕| 国产主播在线一区| 国产www在线| 影音先锋久久久| 日韩视频免费看| 国产精品扒开腿做爽爽| av日韩精品| 欧美日韩国产另类一区| av免费播放网址| 欧美性受ⅹ╳╳╳黑人a性爽| 国产欧美精品一区二区色综合 | 国产亚洲精品久久久久久| 亚洲国产欧美日韩在线| 日本一区二区三区中文字幕| 精品福利一区二区| 欧美国产日韩激情| 日本三级韩国三级欧美三级| 国产精品成人在线观看| 亚洲不卡1区| 人妻一区二区三区免费| 国产精品亚洲第一区在线暖暖韩国| 国产精品视频在线播放| 国产免费一区二区三区四区五区| 国产一区二区三区久久久久久久久| 欧美精品一区三区| 乱h高h女3p含苞待放| 五月天激情综合网| 日韩在线激情视频| 成人做爰视频网站| 91精品啪在线观看国产81旧版| 最近的2019中文字幕免费一页 | 欧美女优在线视频| 日韩精品999| 亚洲成人日韩在线| 偷窥自拍亚洲色图精选| 亚洲色图美腿丝袜| 日本一级免费视频| 色综合久久一区二区三区| 中文字幕在线看视频国产欧美在线看完整 | 69堂免费精品视频在线播放| 一本色道久久加勒比精品| 日本成年人网址| 天天免费亚洲黑人免费| 在线欧美日韩国产| 少妇一级淫免费播放| 伊人久久一区| 日韩欧美一区在线观看| 国产精品二区视频| 欧美偷窥清纯综合图区| 亚洲毛片在线观看.| 精品无码国产污污污免费网站| 国产一区二区三区91| 中文字幕国产亚洲2019| 极品魔鬼身材女神啪啪精品| 欧美日韩mv| 4388成人网| 波多野结衣视频在线看| 寂寞少妇一区二区三区| 成人久久18免费网站漫画| 免费观看国产视频| 久久久久国产精品麻豆ai换脸| 亚洲不卡1区| 丰满的护士2在线观看高清| 红桃视频成人在线观看| 青青青在线视频免费观看| 国产视频一区二| 精品亚洲国产成av人片传媒| 91视频免费看片| 欧美三级小说| 久久全球大尺度高清视频| 日本免费精品视频| 国产麻豆9l精品三级站| 欧美日韩日本网| 日本在线观看网站| 精品久久久一区| www午夜视频| 国产欧美自拍一区| www.欧美三级电影.com| 国产成人精品片| 精品一区二区久久久| 中文字幕亚洲无线码a| 久久九九亚洲综合| 欧美成人777| 一区二区毛片| 91久热免费在线视频| 视频一区二区在线播放| 国产精品不卡一区二区三区| 成人在线观看你懂的| 色诱色偷偷久久综合| 亚洲精品电影在线观看| 国产精品麻豆免费版现看视频| 在线播放精品| 成人黄色短视频在线观看| 五月婷婷六月色| 一区视频在线播放| 草草草在线视频| av日韩精品| 久久国产视频网站| 免费在线不卡av| 99国产精品久久久久久久久久| 中文字幕日韩精品一区二区| 美女日韩欧美| 亚洲精品mp4| 青青草原免费观看| 国产制服丝袜一区| 一区二区不卡在线视频 午夜欧美不卡' | 91精品国产一区二区在线观看| 国产视频综合在线| 国产午夜福利片| 国产一区999| 椎名由奈jux491在线播放| 日本.亚洲电影| 精品偷拍各种wc美女嘘嘘| 黄色激情视频在线观看| 国产成人免费视频网站高清观看视频| 亚洲日本欧美在线| 日韩网站中文字幕| 亚洲天堂男人的天堂| 久久午夜免费视频| 91日韩在线专区| 奇米精品一区二区三区| 国产精品视屏| 国内外成人免费激情在线视频网站 | 日本激情视频一区二区三区| 日韩国产一区二| 日本精品二区| 在线成人视屏| 一区二区亚洲欧洲国产日韩| 亚洲中文无码av在线| 国产欧美一区二区三区鸳鸯浴| 50路60路老熟妇啪啪| 国产一区2区| 国产精品视频白浆免费视频| 91精品专区| 欧美日韩色一区| 国产精品麻豆免费版现看视频| 麻豆成人综合网| 中文网丁香综合网| 久久伊人精品| 欧美福利视频在线| 六月婷婷中文字幕| 亚洲成a天堂v人片| 亚洲一区二区观看| 日韩av中文在线观看| 亚洲人久久久| 激情视频亚洲| 国语自产精品视频在免费| 天天干天天操av| 色94色欧美sute亚洲线路一ni| 亚洲一区二区自偷自拍 | 欧美日韩国产丝袜美女| 欧美bbbbb性bbbbb视频| 美女国产一区二区| japanese在线播放| 欧美交a欧美精品喷水| 日韩美女写真福利在线观看| 在线免费观看黄色| 日韩欧美国产三级| 天堂网av手机版| 国产精品美女视频| 美国黄色一级视频| 久久午夜激情| 天堂v在线视频| 欧美1区2区3区4区| 国产精品视频网| 黄色污污视频在线观看| 伊人久久免费视频| 亚洲精品久久久久久无码色欲四季 | 在线观看不卡的av| 亚洲自拍偷拍网站| 成人在线一级片| 国产精品99久久久久久似苏梦涵| 亚洲 欧美 日韩 国产综合 在线 | 91色porny| 日韩av一卡二卡三卡| 亚洲福利专区| 亚洲国产午夜伦理片大全在线观看网站 | 99久久精品免费看国产一区二区三区| 忘忧草在线日韩www影院| 精品久久久91| 青青青草网站免费视频在线观看| 欧美日韩免费一区二区三区 | 欧美在线观看视频在线| 久久机热这里只有精品| 欧美国产激情二区三区| 美女伦理水蜜桃4| 久久国产尿小便嘘嘘| 日本毛片在线免费观看| 午夜精品剧场| 亚洲欧洲日韩综合二区| 亚洲女娇小黑人粗硬| 97国产超碰| 国产极品久久久久久久久波多结野| 韩国三级日本三级少妇99| 快射视频在线观看| 亚洲欧美在线看| 国产 欧美 自拍| 91精品久久久久久久99蜜桃| 五月婷婷激情视频| 午夜精品福利在线| 农村黄色一级片| 国产精品三级电影| 日本乱子伦xxxx| 久久影院午夜片一区| 无码成人精品区在线观看| 国产伦精品一区二区三区免费迷| 999在线免费视频| 欧美一级视频| 亚欧无线一线二线三线区别| 国内揄拍国内精品久久| 永久免费网站视频在线观看| 日韩电影二区| 亚洲国产高清国产精品| 教室别恋欧美无删减版| 久久亚裔精品欧美| 亚洲a级精品| 久久大香伊蕉在人线观看热2| 一区二区三区亚洲变态调教大结局 | 给我免费播放日韩视频| 99re在线| 日韩亚洲精品在线观看| av在线不卡观看| 亚州一区二区| 99精品99久久久久久宅男| 日韩精品视频中文字幕| 亚洲最大的网站| 亚洲高清在线一区| 3d动漫精品啪啪一区二区三区免费| 亚洲ww精品| 成人免费高清完整版在线观看| 欧美亚洲人成在线| 91久久久久久| 视频在线观看免费影院欧美meiju| 亚洲jizzjizz日本少妇| 久久中文字幕一区二区| 97人人干人人| 国产精品对白| 蜜桃麻豆www久久国产精品| 九九久久成人| 亚洲国产一区二区三区在线播 | 国产又粗又长又大视频| 这里是久久伊人| 精品人妻一区二区三区换脸明星| 精品国产凹凸成av人导航| 亚洲欧洲成人在线| 国产亚洲xxx| 日韩av中文| 九九精品视频在线| 国产v日韩v欧美v| 日本人成精品视频在线| 国产精品久久久久久妇女| 国产在线视频欧美| 国产精品极品| 欧美一区观看| 国产精品精品| 无码人妻少妇伦在线电影| 久久婷婷亚洲| 亚洲欧美激情一区二区三区| 91女人视频在线观看| 手机看片国产日韩| 一区二区三区精品视频在线| 制服.丝袜.亚洲.中文.综合懂色| 欧洲生活片亚洲生活在线观看| 99热这里只有精品在线观看| 日韩av在线播放资源| 中文字幕在线视频区| 欧美激情视频网站| 影视一区二区三区| 北条麻妃高清一区| 久久av电影| www.国产二区| 青青草91视频| 91精品又粗又猛又爽| 欧美激情中文字幕| 日韩xxx高潮hd| 欧美日韩一区二区三区在线| 欧美 日韩 人妻 高清 中文| 亚洲最新中文字幕| rebdb初裸写真在线观看| 国产精品一区二区性色av| 国偷自产av一区二区三区| 在线不卡视频一区二区| 国产一区二区你懂的| 极品人妻一区二区| 中文无字幕一区二区三区| 日本三级欧美三级| 欧美一级精品大片| av大片在线观看| 琪琪亚洲精品午夜在线| 亚洲啊v在线免费视频| 亚洲在线观看一区| 久久精品123| 日本少妇xxxx| 一区二区三区四区不卡在线| 最新中文字幕免费| 亚洲欧洲偷拍精品| 国产网站在线| 99在线热播| 你懂的国产精品| 伊人色在线视频| 国产精品欧美久久久久无广告 | 日韩亚洲欧美中文字幕| 日韩欧美999| 人人妻人人澡人人爽久久av| 欧美成人精品在线播放| 久久人人视频| 亚洲国产日韩综合一区| 老司机精品导航| 丰满少妇一区二区三区| 亚洲mv大片欧洲mv大片精品| 国产v片在线观看| 久久天堂av综合合色| 亚洲天堂网站| 伊人久久av导航| 精品一区二区国语对白| 九九这里只有精品视频| 欧美视频一区二区三区四区| 国产女主播在线写真| 欧美在线观看网站| 欧美一区二区三区红桃小说| 97视频在线免费| 99精品一区二区| 国产无码精品久久久| 亚洲国产成人一区| 超碰中文在线| 国产一区二区三区四区五区在线| 禁久久精品乱码| 精品熟女一区二区三区| 欧美日韩国产一区二区| 九一国产在线| 国产精品久久久精品| 国产精品密蕾丝视频下载| 97公开免费视频| 国产精品每日更新在线播放网址 | 久久黄色级2电影| 91麻豆免费视频网站| 日韩欧美国产一区二区三区| av电影免费在线看| 久久精品丝袜高跟鞋| 久久精品日产第一区二区| 日本美女bbw| 欧美一三区三区四区免费在线看| 永久免费网站在线| 国产在线一区二区三区播放| 欧美综合国产| 亚洲一二三精品| 欧美一二三区精品| 激情aⅴ欧美一区二区欲海潮 | 中文字幕一区二区av| 日本精品一二三区| 欧美午夜片在线免费观看| 日韩理伦片在线| 成人欧美一区二区三区视频xxx | 免费人成视频在线播放| 亚洲国产cao| 国产综合在线观看| 91亚洲午夜在线| 日韩视频不卡| 1024手机在线观看你懂的| 日韩欧美专区在线| 忘忧草在线日韩www影院| 一区二区视频在线免费| 国产91丝袜在线播放0| 成人午夜视频在线播放| 久久精品一区中文字幕| 欧美人妖视频| 五月天中文字幕在线| 亚洲成a人在线观看| 国产午夜在线观看| 91精品国自产在线观看| 久久黄色网页| 欧美激情一区二区视频| 国产亚洲精品91在线| 亚洲一区二区三区四区电影| 麻豆av免费在线| 夜夜嗨av一区二区三区四季av| 黄色在线小视频| 国产成人精品免费视频大全最热| 免费不卡在线观看| 国产成人精品一区二三区| 久久好看免费视频|