中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

文本編輯器源代碼java 編寫文本編輯器程序的代碼

JAVA編寫好的文本編輯器代碼怎么運行啊

import?java.awt.BorderLayout;

創新互聯主營臺州網站建設的網絡公司,主營網站建設方案,手機APP定制開發,臺州h5重慶小程序開發搭建,臺州網站營銷推廣歡迎臺州等地區企業咨詢

import?java.awt.event.ActionEvent;

import?java.awt.event.ActionListener;

import?java.io.FileReader;

import?java.io.FileWriter;

import?java.io.IOException;

import?javax.swing.JFrame;

import?javax.swing.JMenu;

import?javax.swing.JMenuBar;

import?javax.swing.JMenuItem;

import?javax.swing.JScrollPane;

import?javax.swing.JTextArea;

import?javax.swing.SwingUtilities;

public?class?MenuTester?extends?JFrame?implements?ActionListener

{

private?static?final?long?serialVersionUID?=?1L;

private?static?final?String?FILE?=?"d:/1.txt";

JTextArea?textArea;

JScrollPane?scrollPane;

public?MenuTester?()

{

setTitle?("MenuTester");

setLayout?(new?BorderLayout?());

JMenuBar?menuBar?=?new?JMenuBar?();

JMenu[]?menu?=?new?JMenu[]?{?new?JMenu?("文件"),?new?JMenu?("編輯")?};

JMenuItem[]?menuItem1?=?new?JMenuItem[]?{?new?JMenuItem?("新建"),?new?JMenuItem?("打開"),?new?JMenuItem?("保存"),?new?JMenuItem?("關閉")?};

JMenuItem[]?menuItem2?=?new?JMenuItem[]?{?new?JMenuItem?("復制"),?new?JMenuItem?("粘貼"),?new?JMenuItem?("剪切")?};

for?(?int?i?=?0;?i??menu.length;?i++?)

{

menuBar.add?(menu[i]);

}

for?(?int?i?=?0;?i??menuItem1.length;?i++?)

{

menu[0].add?(menuItem1[i]);

}

for?(?int?i?=?0;?i??menuItem2.length;?i++?)

{

menu[1].add?(menuItem2[i]);

}

menuItem1[0].addActionListener?(this);

menuItem1[1].addActionListener?(this);

menuItem1[2].addActionListener?(this);

menuItem1[3].addActionListener?(this);

setJMenuBar?(menuBar);

textArea?=?new?JTextArea?();

scrollPane?=?new?JScrollPane?(textArea);

scrollPane.setVisible?(false);

add?(scrollPane,?BorderLayout.CENTER);

setResizable?(false);

setSize?(800,?600);

setLocationRelativeTo?(null);

setDefaultCloseOperation?(JFrame.EXIT_ON_CLOSE);

setVisible?(true);

}

public?static?void?main?(?String[]?args?)

{

SwingUtilities.invokeLater?(new?Runnable?()

{

@Override

public?void?run?()

{

new?MenuTester?();

}

});

}

@Override

public?void?actionPerformed?(?ActionEvent?e?)

{

String?command?=?e.getActionCommand?();

if?("新建".equals?(command))

{

scrollPane.setVisible?(true);

validate?();

}

else?if?("關閉".equals?(command))

{

scrollPane.setVisible?(false);

textArea.setText?("");

validate?();

}

else?if?("打開".equals?(command))

{

scrollPane.setVisible?(true);

validate?();

try

{

FileReader?fr?=?new?FileReader?(FILE);

char[]?cs?=?new?char[1];

while?(-1?!=?(?fr.read?(cs)?))

{

textArea.append?(new?String?(cs));

}

fr.close?();

}

catch?(Exception?e1)

{

e1.printStackTrace?();

}

}

else?if?("保存".equals?(command))

{

try

{

FileWriter?fw?=?new?FileWriter?(FILE);

fw.write?(textArea.getText?());

fw.flush?();

fw.close?();

}

catch?(IOException?e1)

{

e1.printStackTrace();

}

}

}

}

java語言寫一個文本編輯器的源代碼

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import javax.swing.event.*;

import java.util.*; //Date needed

import java.io.PrintWriter;

public class NotePad extends JFrame

{

JTextArea jta;

class newl implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

jta.setText("");

}

}

class openl implements ActionListener

{ public void actionPerformed(ActionEvent e)

{

JFileChooser jf=new JFileChooser();

jf.showOpenDialog(NotePad.this);

}

}

//保存文件的監聽

class savel implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

JFileChooser jf = new JFileChooser();

jf.showSaveDialog(NotePad.this);

}

}

//打印的監聽 ?

class printl implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

// PrintWriter p = new PrintWriter(NotePad.this);

}

}

//退出記事本的監聽

class exitl implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

System.exit(0);//退出

}

}

//拷貝的監聽

class copyl implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

jta.copy();

}

}

//粘貼的監聽

class pastel implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

jta.paste();

}

}

//剪切的監聽

class cutl implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

jta.cut();

}

}

//查找的監聽

//添加日期的監聽

class datel implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

Date d=new Date();

jta.append(d.toString());

}

}

//構造函數

public NotePad()

{

jta=new JTextArea("",24,40);

JScrollPane jsp=new JScrollPane(jta);

JMenuBar jmb=new JMenuBar();

JMenu mFile=new JMenu("File");

JMenu mEdit=new JMenu("Edit");

JMenuItem mNew=new JMenuItem("New",KeyEvent.VK_N);

mNew.addActionListener(new newl());

mFile.add(mNew);

JMenuItem mOpen=new JMenuItem("Open",KeyEvent.VK_O);

mOpen.addActionListener(new openl());

mFile.add(mOpen);

JMenuItem mSave=new JMenuItem("Save");

mSave.addActionListener(new savel());

mFile.add(mSave);

mFile.addSeparator(); //添加分割線

JMenuItem mPrint = new JMenuItem("Print");

mPrint.addActionListener(new printl());

mFile.add(mPrint);

mFile.addSeparator(); //添加分割線

JMenuItem mExit=new JMenuItem("Exit");

mExit.addActionListener(new exitl());

mFile.add(mExit);

mFile.setMnemonic(KeyEvent.VK_F);

//編輯菜單的子菜單的處理

JMenuItem jmi;

jmi=new JMenuItem("Copy");

jmi.addActionListener(new copyl());

mEdit.add(jmi);

jmi=new JMenuItem("Cut");

jmi.addActionListener(new cutl());

mEdit.add(jmi);

jmi=new JMenuItem("Paste");

jmi.addActionListener(new pastel());

mEdit.add(jmi);

mEdit.addSeparator(); //添加分割線

jmi=new JMenuItem("Find");

mEdit.add(jmi);

jmi=new JMenuItem("FindNext");

mEdit.add(jmi);

mEdit.addSeparator();

jmi=new JMenuItem("Select All");

mEdit.add(jmi);

jmi=new JMenuItem("Date/Time");

jmi.addActionListener(new datel());

mEdit.add(jmi);

jmb.add(mFile);

jmb.add(mEdit);

this.setJMenuBar(jmb);

this.getContentPane().add(jsp);

this.setSize(200,200);

this.setVisible(true);

}

//主函數,程序入口點

public static void main(String s[])

{

new NotePad();

}

}

java源代碼編輯器 設計用于編寫Java源代碼的編輯器,基本要求:可以完成源程序的文件打開,編輯和文件保存

一. 高亮的內容:

需要高亮的內容有:

1. 關鍵字, 如 public, int, true 等.

2. 運算符, 如 +, -, *, /等

3. 數字

4. 高亮字符串, 如 "example of string"

5. 高亮單行注釋

6. 高亮多行注釋

二. 實現高亮的核心方法:

StyledDocument.setCharacterAttributes(int offset, int length, AttributeSet s, boolean replace)

三. 文本編輯器選擇.

Java中提供的多行文本編輯器有: JTextComponent, JTextArea, JTextPane, JEditorPane等, 都可以使用. 但是因為語法著色中文本要使用多種風格的樣式, 所以這些文本編輯器的document要使用StyledDocument.

JTextArea使用的是PlainDocument, 此document不能進行多種格式的著色.

JTextPane, JEditorPane使用的是StyledDocument, 默認就可以使用.

為了實現語法著色, 可以繼承自DefaultStyledDocument, 設置其為這些文本編輯器的documet, 或者也可以直接使用JTextPane, JEditorPane來做. 為了方便, 這里就直接使用JTextPane了.

四. 何時進行著色.

當文本編輯器中有字符被插入或者刪除時, 文本的內容就發生了變化, 這時檢查, 進行著色.

為了監視到文本的內容發生了變化, 要給document添加一個DocumentListener監聽器, 在他的removeUpdate和insertUpdate中進行著色處理.

而changedUpdate方法在文本的屬性例如前景色, 背景色, 字體等風格改變時才會被調用.

@Override

public void changedUpdate(DocumentEvent e) {

}

@Override

public void insertUpdate(DocumentEvent e) {

try {

colouring((StyledDocument) e.getDocument(), e.getOffset(), e.getLength());

} catch (BadLocationException e1) {

e1.printStackTrace();

}

}

@Override

public void removeUpdate(DocumentEvent e) {

try {

// 因為刪除后光標緊接著影響的單詞兩邊, 所以長度就不需要了

colouring((StyledDocument) e.getDocument(), e.getOffset(), 0);

} catch (BadLocationException e1) {

e1.printStackTrace();

}

}

五. 著色范圍:

pos: 指變化前光標的位置.

len: 指變化的字符數.

例如有關鍵字public, int

單詞"publicint", 在"public"和"int"中插入一個空格后變成"public int", 一個單詞變成了兩個, 這時對"public" 和 "int"進行著色.

著色范圍是public中p的位置和int中t的位置加1, 即是pos前面單詞開始的下標和pos+len開始單詞結束的下標. 所以上例中要著色的范圍是"public int".

提供了方法indexOfWordStart來取得pos前單詞開始的下標, 方法indexOfWordEnd來取得pos后單詞結束的下標.

public int indexOfWordStart(Document doc, int pos) throws BadLocationException {

// 從pos開始向前找到第一個非單詞字符.

for (; pos 0 isWordCharacter(doc, pos - 1); --pos);

return pos;

}

public int indexOfWordEnd(Document doc, int pos) throws BadLocationException {

// 從pos開始向前找到第一個非單詞字符.

for (; isWordCharacter(doc, pos); ++pos);

return pos;

}

一個字符是單詞的有效字符: 是字母, 數字, 下劃線.

public boolean isWordCharacter(Document doc, int pos) throws BadLocationException {

char ch = getCharAt(doc, pos); // 取得在文檔中pos位置處的字符

if (Character.isLetter(ch) || Character.isDigit(ch) || ch == '_') { return true; }

return false;

}

所以著色的范圍是[start, end] :

int start = indexOfWordStart(doc, pos);

int end = indexOfWordEnd(doc, pos + len);

六. 關鍵字著色.

從著色范圍的開始下標起進行判斷, 如果是以字母開或者下劃線開頭, 則說明是單詞, 那么先取得這個單詞, 如果這個單詞是關鍵字, 就進行關鍵字著色, 如果不是, 就進行普通的著色. 著色完這個單詞后, 繼續后面的著色處理. 已經著色過的字符, 就不再進行著色了.

public void colouring(StyledDocument doc, int pos, int len) throws BadLocationException {

// 取得插入或者刪除后影響到的單詞.

// 例如"public"在b后插入一個空格, 就變成了:"pub lic", 這時就有兩個單詞要處理:"pub"和"lic"

// 這時要取得的范圍是pub中p前面的位置和lic中c后面的位置

int start = indexOfWordStart(doc, pos);

int end = indexOfWordEnd(doc, pos + len);

char ch;

while (start end) {

ch = getCharAt(doc, start);

if (Character.isLetter(ch) || ch == '_') {

// 如果是以字母或者下劃線開頭, 說明是單詞

// pos為處理后的最后一個下標

start = colouringWord(doc, start);

} else {

//SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, normalStyle));

++start;

}

}

}

public int colouringWord(StyledDocument doc, int pos) throws BadLocationException {

int wordEnd = indexOfWordEnd(doc, pos);

String word = doc.getText(pos, wordEnd - pos); // 要進行著色的單詞

if (keywords.contains(word)) {

// 如果是關鍵字, 就進行關鍵字的著色, 否則使用普通的著色.

// 這里有一點要注意, 在insertUpdate和removeUpdate的方法調用的過程中, 不能修改doc的屬性.

// 但我們又要達到能夠修改doc的屬性, 所以把此任務放到這個方法的外面去執行.

// 實現這一目的, 可以使用新線程, 但放到swing的事件隊列里去處理更輕便一點.

SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, keywordStyle));

} else {

SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, normalStyle));

}

return wordEnd;

}

因為在insertUpdate和removeUpdate方法中不能修改document的屬性, 所以著色的任務放到這兩個方法外面, 所以使用了SwingUtilities.invokeLater來實現.

private class ColouringTask implements Runnable {

private StyledDocument doc;

private Style style;

private int pos;

private int len;

public ColouringTask(StyledDocument doc, int pos, int len, Style style) {

this.doc = doc;

this.pos = pos;

this.len = len;

this.style = style;

}

public void run() {

try {

// 這里就是對字符進行著色

doc.setCharacterAttributes(pos, len, style, true);

} catch (Exception e) {}

}

}

七: 源碼

關鍵字著色的完成代碼如下, 可以直接編譯運行. 對于數字, 運算符, 字符串等的著色處理在以后的教程中會繼續進行詳解.

import java.awt.Color;

import java.util.HashSet;

import java.util.Set;

import javax.swing.JFrame;

import javax.swing.JTextPane;

import javax.swing.SwingUtilities;

import javax.swing.event.DocumentEvent;

import javax.swing.event.DocumentListener;

import javax.swing.text.BadLocationException;

import javax.swing.text.Document;

import javax.swing.text.Style;

import javax.swing.text.StyleConstants;

import javax.swing.text.StyledDocument;

public class HighlightKeywordsDemo {

public static void main(String[] args) {

JFrame frame = new JFrame();

JTextPane editor = new JTextPane();

editor.getDocument().addDocumentListener(new SyntaxHighlighter(editor));

frame.getContentPane().add(editor);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(500, 500);

frame.setVisible(true);

}

}

/**

* 當文本輸入區的有字符插入或者刪除時, 進行高亮.

*

* 要進行語法高亮, 文本輸入組件的document要是styled document才行. 所以不要用JTextArea. 可以使用JTextPane.

*

* @author Biao

*

*/

class SyntaxHighlighter implements DocumentListener {

private SetString keywords;

private Style keywordStyle;

private Style normalStyle;

public SyntaxHighlighter(JTextPane editor) {

// 準備著色使用的樣式

keywordStyle = ((StyledDocument) editor.getDocument()).addStyle("Keyword_Style", null);

normalStyle = ((StyledDocument) editor.getDocument()).addStyle("Keyword_Style", null);

StyleConstants.setForeground(keywordStyle, Color.RED);

StyleConstants.setForeground(normalStyle, Color.BLACK);

// 準備關鍵字

keywords = new HashSetString();

keywords.add("public");

keywords.add("protected");

keywords.add("private");

keywords.add("_int9");

keywords.add("float");

keywords.add("double");

}

public void colouring(StyledDocument doc, int pos, int len) throws BadLocationException {

// 取得插入或者刪除后影響到的單詞.

// 例如"public"在b后插入一個空格, 就變成了:"pub lic", 這時就有兩個單詞要處理:"pub"和"lic"

// 這時要取得的范圍是pub中p前面的位置和lic中c后面的位置

int start = indexOfWordStart(doc, pos);

int end = indexOfWordEnd(doc, pos + len);

char ch;

while (start end) {

ch = getCharAt(doc, start);

if (Character.isLetter(ch) || ch == '_') {

// 如果是以字母或者下劃線開頭, 說明是單詞

// pos為處理后的最后一個下標

start = colouringWord(doc, start);

} else {

SwingUtilities.invokeLater(new ColouringTask(doc, start, 1, normalStyle));

++start;

}

}

}

/**

* 對單詞進行著色, 并返回單詞結束的下標.

*

* @param doc

* @param pos

* @return

* @throws BadLocationException

*/

public int colouringWord(StyledDocument doc, int pos) throws BadLocationException {

int wordEnd = indexOfWordEnd(doc, pos);

String word = doc.getText(pos, wordEnd - pos);

if (keywords.contains(word)) {

// 如果是關鍵字, 就進行關鍵字的著色, 否則使用普通的著色.

// 這里有一點要注意, 在insertUpdate和removeUpdate的方法調用的過程中, 不能修改doc的屬性.

// 但我們又要達到能夠修改doc的屬性, 所以把此任務放到這個方法的外面去執行.

// 實現這一目的, 可以使用新線程, 但放到swing的事件隊列里去處理更輕便一點.

SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, keywordStyle));

} else {

SwingUtilities.invokeLater(new ColouringTask(doc, pos, wordEnd - pos, normalStyle));

}

return wordEnd;

}

/**

* 取得在文檔中下標在pos處的字符.

*

* 如果pos為doc.getLength(), 返回的是一個文檔的結束符, 不會拋出異常. 如果pos0, 則會拋出異常.

* 所以pos的有效值是[0, doc.getLength()]

*

* @param doc

* @param pos

* @return

* @throws BadLocationException

*/

public char getCharAt(Document doc, int pos) throws BadLocationException {

return doc.getText(pos, 1).charAt(0);

}

/**

* 取得下標為pos時, 它所在的單詞開始的下標. ?±wor^d?± (^表示pos, ?±表示開始或結束的下標)

*

* @param doc

* @param pos

* @return

* @throws BadLocationException

*/

public int indexOfWordStart(Document doc, int pos) throws BadLocationException {

// 從pos開始向前找到第一個非單詞字符.

for (; pos 0 isWordCharacter(doc, pos - 1); --pos);

return pos;

}

/**

* 取得下標為pos時, 它所在的單詞結束的下標. ?±wor^d?± (^表示pos, ?±表示開始或結束的下標)

*

* @param doc

* @param pos

* @return

* @throws BadLocationException

*/

public int indexOfWordEnd(Document doc, int pos) throws BadLocationException {

// 從pos開始向前找到第一個非單詞字符.

for (; isWordCharacter(doc, pos); ++pos);

return pos;

}

/**

* 如果一個字符是字母, 數字, 下劃線, 則返回true.

*

* @param doc

* @param pos

* @return

* @throws BadLocationException

*/

public boolean isWordCharacter(Document doc, int pos) throws BadLocationException {

char ch = getCharAt(doc, pos);

if (Character.isLetter(ch) || Character.isDigit(ch) || ch == '_') { return true; }

return false;

}

@Override

public void changedUpdate(DocumentEvent e) {

}

@Override

public void insertUpdate(DocumentEvent e) {

try {

colouring((StyledDocument) e.getDocument(), e.getOffset(), e.getLength());

} catch (BadLocationException e1) {

e1.printStackTrace();

}

}

@Override

public void removeUpdate(DocumentEvent e) {

try {

// 因為刪除后光標緊接著影響的單詞兩邊, 所以長度就不需要了

colouring((StyledDocument) e.getDocument(), e.getOffset(), 0);

} catch (BadLocationException e1) {

e1.printStackTrace();

}

}

/**

* 完成著色任務

*

* @author Biao

*

*/

private class ColouringTask implements Runnable {

private StyledDocument doc;

private Style style;

private int pos;

private int len;

public ColouringTask(StyledDocument doc, int pos, int len, Style style) {

this.doc = doc;

this.pos = pos;

this.len = len;

this.style = style;

}

public void run() {

try {

// 這里就是對字符進行著色

doc.setCharacterAttributes(pos, len, style, true);

} catch (Exception e) {}

}

}

}

如何用java編寫一個簡單的文本編輯器?

import java.awt.*;\x0d\x0aimport java.awt.event.*;\x0d\x0aimport javax.swing.*;\x0d\x0aimport java.io.*;\x0d\x0a\x0d\x0apublic class f1 extends Frame implements ActionListener\x0d\x0a{\x0d\x0aprivate MenuBar menubar=new MenuBar();\x0d\x0aprivate Menu filemenu=new Menu("文件");\x0d\x0aprivate Menu editmenu=new Menu("編輯");\x0d\x0aprivate Menu formmenu=new Menu("格式");\x0d\x0aprivate MenuItem[] itemf=new MenuItem[4];\x0d\x0aprivate MenuItem[] iteme=new MenuItem[6];\x0d\x0aprivate MenuItem[] items=new MenuItem[2];\x0d\x0aprivate TextArea tf=new TextArea();\x0d\x0a\x0d\x0apublic int a=0,b=0,c=0,style=Font.PLAIN,size=15;\x0d\x0apublic String s1="red:"+a+" "+"green:"+b+" "+"blue"+c,\x0d\x0as2="宋體";\x0d\x0a\x0d\x0apublic String[] sz1={"10","16","24","30","32","36"},\x0d\x0asz2={"宋體","黑體","幼圓","隸書","行楷","Arial","Georgia"},\x0d\x0asz3={"粗體","傾斜","常規","粗斜"};\x0d\x0a\x0d\x0aJDialog dialog=new JDialog(this,"字體",true);\x0d\x0aContainer cp=dialog.getContentPane();\x0d\x0aJLabel[] lb=new JLabel[8]; \x0d\x0aJLabel lb1=new JLabel(s1,JLabel.LEFT);\x0d\x0aJButton b1=new JButton("確定"),\x0d\x0ab2=new JButton("取消");\x0d\x0aJComboBox jc1=new JComboBox(),\x0d\x0ajc2=new JComboBox(),\x0d\x0ajc3=new JComboBox();\x0d\x0aJScrollBar jb1=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);\x0d\x0aJScrollBar jb2=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);\x0d\x0aJScrollBar jb3=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);

文章名稱:文本編輯器源代碼java 編寫文本編輯器程序的代碼
地址分享:http://m.2m8n56k.cn/article20/doggeco.html

成都網站建設公司_創新互聯,為您提供虛擬主機營銷型網站建設App開發服務器托管網頁設計公司搜索引擎優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

小程序開發
主站蜘蛛池模板: 亚洲第一免费网站 | 成人国产在线观看 | 亚洲国产综合久久精品 | 日韩成人在线观看视频 | 中国一级做a爰片久久毛片 中日韩欧美一级毛片 | 久草手机在线视频 | 亚洲欧美不卡中文字幕 | 无圣光福利视频 | 国产激情一区二区三区成人91 | 亚洲欧美日韩色 | 欧美三级免费网站 | 成人欧美在线 | 中国女人真人一级毛片 | 男女性男女刺激大片免费观看 | 国产成人精品综合久久久软件 | 久久久久女人精品毛片 | 天堂一区二区三区在线观看 | 欧美成人高清手机在线视频 | 男女男精品视频在线播放 | 九九在线精品视频播放 | 国产偷怕自拍 | 伊人一级 | 99在线热播精品免费 | 欧美三级欧美一级 | caoporen在线视频入口 | 亚洲精品欧美精品一区二区 | 久久91视频 | 日本三级香港三级人妇99视 | 亚洲一区浅井舞香在线播放 | 国产三级午夜理伦三级 | 国产成人精品午夜免费 | 在线播放免费播放av片 | 欧美一级免费观看 | 中文字幕一区二区在线播放 | 国产成人网 | 综合久久久 | 国产免费一级精品视频 | 中国大陆一级毛片 | 天堂成人av | 中国国语毛片免费观看视频 | 亚洲精品中文字幕在线 |