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

Swing模型過濾技術詳解

開發 后端
本文向您介紹Swing模型過濾技術,包括對Swing模型過濾技術的特性介紹,使用和過濾基類的編寫等。

簡介

模型過濾是這樣一種技術,它在 Swing 組件體系結構中提供附加的功能與靈活性。

Swing 體系結構的重要創新之一在于采用了模型/視圖/控制器 (MVC) 原理,這樣就可將組件的不同角色分離開。當一種體系結構具備 MVC 分離特性時,即可對組件的數據與狀態作不同的解釋。這允許程序員在組件及其模型之間插入過濾器對象。模型過濾可以在模型內修改數據的表示,還也可以改變模型所封裝數據的外在數目和順序。

Swing模型過濾的另外兩種重要特性是

Swing模型過濾操作不會改變底層的模型數據。這使得多個組件可以共享一組數據,而且每個組件都可能以不同的方式解釋這組數據。

過濾器可以疊用,這樣就可以依次用幾個不同的過濾器對象來解釋模型數據。

已定義的代理

為了最大限度地利用 Java 平臺對面向對象的支持,可以簡單地認為組件由若干對象構成。這些對象可以由一個通用術語 ― 代理 ― 來描述。代理是實現一個公共 Java 接口并與某個特定組件相關聯的對象。代理實現的接口定義代理在 MVC 體系結構中充當的角色。

對于剛剛接觸 Swing 的程序員而言,代理的概念似乎有些難以理解,但是,它們也是 AWT 組件的一種共同特征。例如,如果想更改 java.awt.Label 組件上的字體,只需創建或獲取 java.awt.Font 類的一個實例,并且調用 getFont() 使該實例與組件相關聯。Font 對象的內部運作細節可能很有趣,但是組件只要有 Font 類型對象的一個引用即可適當地顯示自己。甚至像標簽前景顏色這種簡單概念也是通過代理實現的;java.awt.Color 類提供一種適合作組件前景顏色的對象。作為一般規則,值為非基本數據類型的各種組件屬性都可看作是代理。

Swing 中的 MVC 實現就是這些概念的體現。對象不僅用于表示組件的屬性值,也用于表示組件行為的諸多方面。這種方案相當靈活,足以支持 Swing 的可插接外觀 (PLAF) 功能的實現,該功能使應用程序既可模擬本地平臺的外觀,也可用一種與平臺無關的方案顯示組件。PLAF 既可使應用程序看起來就像 Microsoft Windows、 Mac OS 和 X/Motif 等平臺的本地應用程序一樣,也可使應用程序具有一種中立的外觀,稱為 "Java" LAF 或 "Metal" LAF。

PLAF 功能與組件的外觀密切相關。本文主要討論這一體系結構的模型部分,它與組件的外觀的無關。

作為一種模型(或類似一種模型)

每種支持數據與狀態的 Swing 組件都有一種與之相關的模型接口。無論接口感興趣的是封裝于該模型的數據還是狀態,它都會包含允許組件以編程方式查詢模型內容的若干方法。

每個模型接口都提供兩類方法:一類方法提供對數據與狀態的訪問,而另一類方法允許組件或者其他對象注冊或取消注冊事件監聽程序。監聽程序的類型及其提供的事件對象都由這些方法定義。

Swing 模型接口可以有不同類型的類實現。在許多情況下,為模型提供的是一種抽象實現;除了為了觸發模型所表示的各種事件方法而提供的 protected 方法之外,這通常是一種不完全的正則實現。所有模型都有一個缺省實現,并且是一個具體類。

既好又簡單 ― ListModel 接口

在開始討論過濾之前,對典型的模型接口作一回顧不失為明智之舉。

ListModel 接口代表 JList 組件中的數據。這是三種集合模型中最簡單的一種。(另外兩種分別是 JTree 和 JTable。) ListModel 有兩個方法用于檢索列表中的元素個數以及各個元素,另外還有兩個方法用于維護感興趣的監聽程序列表,以便監聽列表模型的變化。

ListModel 的簡化源代碼

  1. 1 package javax.swing;
  2. 2 import javax.swing.event.ListDataListener;
  3. 3 public interface ListModel
  4. 4 {
  5. 5 int getSize();
  6. 6 Object getElementAt(int index);
  7. 7 void addListDataListener(ListDataListener listener);
  8. 8 void removeListDataListener(ListDataListener listener);
  9. 9 }

在 ListModel 接口中, getSize() 與 getElementAt() 方法用于遍歷模型中的元素,而其他兩個方法用于建立與感興趣的監聽程序之間的關聯,以便監聽模型的變化。

ListDataListener 接口支持三個方法,當模型監聽到其底層數據發生變化時就會調用這三個方法。這三個方法是 intervalAdded() 、 intervalRemoved() 和 contentsChanged() ,每個方法都接受單個 ListDataEvent 作為參數。根據模型所發生變化的復雜程度之不同,模型實現可以使用其中的任一個方法來描述這些變化。通常, intervalAdded() 和 intervalRemoved() 用于描述變化的時間間隔;當變化過于復雜,無法作為一個閉合間隔進行描述時,就會用到 contentsChanged() 。

為了理解模型過濾如何運作,請記住這一點:JList 組件只對 ListModel API 的實現感興趣。該組件并不關心數據駐留何處以及數據是如何組織的。無論該模型是一個缺省類、抽象類的擴展,還是 ListModel 接口的一種直接實現,都不影響 JList 組件的行為。

#p#

Swing模型過濾的基本概念利用了 Swing 組件對模型類的底層實現缺乏了解這一事實。下圖說明了這種典型的關系:

Swing 模型過濾

模型過濾器是實現了模型接口、但并不真正包含數據的類。模型過濾器在組件與其模型之間進行協調。模型過濾器可以重新解釋模型所提供的信息,并且可以更改所提供的數據元素個數、數據的順序以及數據本身。

Swing 模型過濾

在本例中,Swing模型過濾類是將一個現有模型類作為其數據源來實例化的。在模型過濾器的一般實現中,對 API 方法的調用將委托給源模型。

由于此 API 是統一實現的,因此完全可以在組件與其模型之間“疊放”多個過濾器。注意,每個過濾層都要求每個 API 調用穿過一個附加的間接層;如果過濾層過于復雜,則很可能造成性能瓶頸。

基本過濾器

下面顯示的抽象類是作用于 JList 組件之上的模型過濾器的基類。其唯一的構造函數要求,模型過濾器的每個實例都要引用某個底層的模型數據。該數據既可以是另一個模型過濾器,也可以不是;在這兩種情況下,過濾器的行為是相同的。

Swing模型過濾器基類

  1. 1 package com.ketherware.models;
  2. 2 import javax.swing.*;
  3. 3 public abstract class AbstractListModelFilter extends AbstractListModel
  4. 4 {
  5. 5 // 用來保存被過濾模型的引用
  6. 6 protected ListModel delegate;
  7. 7 // 構造函數 ― 接受單個參數,其中包含被過濾模型的引用
  8. 8 public AbstractListModelFilter(ListModel delegate)
  9. 9 {
  10. 10 this.delegate = delegate;
  11. 11 }
  12. 12 public ListModel getDelegate()
  13. 13 {
  14. 14 return this.delegate;
  15. 15 }
  16. 16 public int getSize()
  17. 17 {
  18. 18 // 委托給過濾器目標
  19. 19 return delegate.getSize();
  20. 20 }
  21. 21 public Object getElementAt(int index)
  22. 22 {
  23. 23 // 委托給過濾器目標
  24. 24 return delegate.getElementAt(index);
  25. 25 }
  26. 26 public void addListDataListener(ListDataListener listener)
  27. 27 {
  28. 28 // 委托給過濾器目標
  29. 29 delegate.addListDataListener(listener);
  30. 30 }
  31. 31 public void removeListDataListener(ListDataListener listener)
  32. 32 {
  33. 33 // 委托給過濾器目標
  34. 34
  35. 35 delegate.removeListDataListener(listener);
  36. 36 }
  37. 37 }

該類相當于一種“空”過濾器,它不更改任何底層數據。因此,它沒有什么特別的意義。ListModel 過濾器類的實際實現將覆蓋該抽象類的方法,以便以不同的方式呈現底層數據。

您可以通過實現過濾器來改變底層數據事件的特性。為了使對模型過濾器的討論更易于理解,本文的示例都只針對不可變的數據模型,即不觸發任何模型事件的類。

缺省模型適合于要求不高的一般應用。但是,您應該了解這些缺省類都是為通用目的而設計的,因此,在對性能有嚴格要求的情況下,它們通常表現不佳。同樣,許多常用的模型都是作為可變模型來實現的,即,模型的數據可隨時間變化。當已知數據為靜態數據時,這些額外的行為可能是多余的。因此,您可能想另外構建模型類,去掉由事件傳播所導致的額外開銷。

不可變模型

在許多情況下,根據模型的底層數據是否可變對模型進行分類很有用。在數據不會變化的情況下,可以實現不可變的數據模型,這種模型不實現用于監聽數據變化的監聽程序。Swing模型過濾接口的缺省實現假定數據是可變的。

不可變模型的創建過程相當簡單。您可以創建一個具體類,該類可提供模型接口,但為與事件相關的活動所提供的所有方法都不執行任何操作。根據模型要作為一般模型使用,還是作為專用模型使用,您既可將此不可變模型實現為一個抽象類,也可將其實現為一個具體類。

下面的示例是一個不可變的列表模型,我設計它時希望它非常通用,并且允許將支持 java.util.List 集合接口的任何對象用作數據源。返回的數據是一個籠統的 Object 類型;如何顯示對象留待 JList 及其相關繪制程序解釋。

不可變模型的示例

  1. 1 package com.ketherware.models;
  2. 2 import java.util.*;
  3. 3 import javax.swing.*;
  4. 4 public abstract class ImmutableListModelFilter extends AbstractListModel
  5. 5 {
  6. 6 // 用來保存被過濾模型的引用
  7. 7 protected List collection;
  8. 8 // 構造函數 ― 接受單個參數,其中包含被過濾模型的引用
  9. 9 public AbstractListModelFilter(List collection)
  10. 10 {
  11. 11 this.collection = collection;
  12. 12 }
  13. 13 public List getCollection()
  14. 14 {
  15. 15 return this.collection;
  16. 16 }
  17. 17 public int getSize()
  18. 18 {
  19. 19 // 委托給集合
  20. 20 return collection.size();
  21. 21 }
  22. 22 public Object getElementAt(int index)
  23. 23 {
  24. 24 // 委托給過濾器目標
  25. 25 return collection.get(index);
  26. 26 }
  27. 27 public void addListDataListener(ListDataListener listener)
  28. 28 {
  29. 29 // 覆蓋為‘空操作’
  30. 30 }
  31. 31 public void removeListDataListener(ListDataListener listener)
  32. 32 {
  33. 33 // 覆蓋為‘空操作’
  34. 34 }
  35. 35 }

下面將討論四種類型的過濾器:替換、排序、排除和包含。

#p#

替換Swing模型過濾的目的在于,重新解釋模型數據,并且通過改變返回的對象元素來表示它。這種類型的過濾器不改變數據元素的順序,它既不刪除數據,也不創建額外的數據。

下面是一個替換過濾器的示例,它為底層模型中的每個數據項添加一個數字索引。唯一的變化是覆蓋了單個方法。

替換過濾器的示例

  1. 1 package com.ketherware.models;
  2. 2 import javax.swing.*;
  3. 3 public abstract class IndexingListModelFilter extends AbstractListModelFilter
  4. 4 {
  5. 5 public Object getElementAt(int index)
  6. 6 {
  7. 7 // 委托給過濾器目標
  8. 8 String element = delegate.getElementAt(index).toString();
  9. 9 return Integer.toString(index) + ? ?+ element;
  10. 10 }
  11. 11 }

在許多情況下,在繪制程序中引入補充的特性可能更合適,比如填加一個行索引。您可以提供一個過濾器,它通過與繪制程序交互來提供額外的圖形表示。使用過濾器代替繪制程序的優點在于,可用一個組件顯示經過索引的數據,而無須與繪制程序相關聯。

替換過濾器通常不覆蓋 getSize() ,而且不改變所返回元素的順序。

排序過濾器

排序過濾器代表了另一層面的復雜性。它們不改變所表示元素的個數,在這一點上與替換過濾器類似。排序過濾器改變模型中經過索引的元素順序。其基本技術在于,創建模型元素的一種替代索引,用于代替實際的順序。

排序過濾器的一種常見類型是分類過濾器,它基于某個明確的排序順序重新索引數據。下面的示例按字母順序排列任一個 ListModel 實現的內容。

排序過濾器的示例

  1. 1 package com.ketherware.models;
  2. 2 import java.util.*;
  3. 3 import javax.swing.*;
  4. 4 public abstract class AlphaSortingListModelFilter extends
  5. 5 AbstractListModel
  6. 6 {
  7. 7 // 已排序的索引數組
  8. 8 protected ArrayList sortedIndex;
  9. 9 public AlphaSortingListModelFilter(ListModel delegate)
  10. 10 {
  11. 11 this.delegate = delegate;
  12. 12 resort();
  13. 13 }
  14. 14 // 該算法稱為“插入排序”,適合于處理元素個數少于幾百個的數據。
  15. 15 // 它是一種“無堆棧”排序。
  16. 16 protected synchronized void resort()
  17. 17 {
  18. 18 sortedIndex = new ArrayList();
  19. 19 nextElement:
  20. 20 for (int x=0; x < delegate.getSize(); x++)
  21. 21 {
  22. 22 for (int y=0; y < x; y++)
  23. 23 {
  24. 24 String current =
  25. 25 delegate.getElementAt(x).toString();
  26. 26 int compareIndex =
  27. 27 ((Integer) sortedIndex.get(y)).intValue();
  28. 28 String compare =
  29. 29 sortedIndex.get(compareIndex).toString();
  30. 30 if (current.compareTo(compare) < 0)
  31. 31 {
  32. 32 sortedList.add(new Integer(x), y);
  33. 33 continue nextElement;
  34. 34 }
  35. 35 }
  36. 36 sortedList.add(new Integer(x));
  37. 37 }
  38. 38 }
  39. 39 public Object getElementAt(int index)
  40. 40 {
  41. 41 // 委托給過濾器目標,但使用已排序的索引
  42. 42 return delegate.getElementAt(sortedIndex[index]);
  43. 43 }
  44. 44 }

可以將一種排序過濾器用于 JTable 組件,以便對表數據執行面向列的排序;這種過濾器的代碼類似于上面的示例。通過修改 JTable 的表頭和表的模型組件,該過濾器可以得到進一步的增強。

請注意,上面的示例只對不可變列表模型有效。如果數據在動態變化,為了修改在事件被觸發時由 ListDataEvent 對象傳遞的索引,必須提供一些附加支持。這將顯著增加過濾器的復雜性,我將它的實現作為一個練習留給讀者。

排序過濾器的主要特征在于,他們不增加或者減少模型的可見元素個數,因此, getSize() 將委托給被過濾的模型。他們通常將不改變數據元素,而只是按照某種替代順序解釋數據的索引。

排除Swing模型過濾

最后兩種類型的過濾器非常相似,但是,擁有完全不同的目的。排除過濾器與包含過濾器都允許對模型的數據元素進行限制或者補充額外的元素。

排除過濾器使模型中的某些元素看似不存在。在只有單一數據源可用、并且實現方案只要求顯示數據的一個子集的情況下,這些過濾器相當有效。

關于典型的排除過濾器的示例,請參考 TerritoryListModelFilter.java。該示例給出了一個銷售區域列表,其中每個區域都與一個銷售人員相關聯。當選定一個銷售人員的姓名時,過濾器只顯示與該銷售人員相關聯的那些區域。

Swing 模型過濾

這個示例的優點非常明顯:如果不進行過濾,則每次選定一個不同的銷售人員都需要重新加載數據模型,或者在高速緩存中保存大量的模型實例。過濾器甚至允許兩個不同的組件用兩種不同的解釋方案查看同一個基本模型。

包含過濾器

包含過濾器盡管不像排除過濾器那樣廣泛適用,但它們可用來向模型中添加信息。由于這種類型的過濾器可用于進行總計或者小計,這些過濾器的最佳用途是報表應用程序。

執行總計操作的過濾器創建一個虛擬元素,并將其顯示在列表模型的尾部。為了實現這一功能,過濾器將模型大小的值加 1,并將對除最后一個元素之外的所有元素的請求發送至代理。 SalesTotalListModelFilter.java 中的示例假定列表數據是不可變的;過濾器將列表數據事件忽略。這里再一次用到前一個示例中的 TerritoryListModel。

Swing 模型過濾

小結

這些示例已經顯示了Swing模型過濾的某些應用。過濾是一種應用相當廣泛的概念,遠遠不止本文這些相對比較簡單的應用。當您開始實現過濾器時,請記住下列幾點:

過濾可以向不同組件提供不同的視圖,并且可以減少應用程序必須支持的完整模型實例的個數。

過濾可以應用于 Swing 支持的其他模型,包括選擇模型。

您可以為處理可變模型或者動態模型構造非常復雜的過濾方案。為了實現這一點,可以用一個過濾器來處理由該代理模型傳遞的事件。

您可以無限地嵌套(或疊用)過濾器,但是,當每次修改或者查詢模型時,每個過濾層都會增加一些額外的處理負擔。

【編輯推薦】

  1. 用TableModel框架簡化Swing開發
  2. 動態語言是否將會挽救Swing
  3. 使用多線程技術讓你的Swing及時響應各類事件
  4. 最新NetBeans 設計教程 使用Matisse輕松設計Swing
  5. 線程與Swing
責任編輯:冰荷 來源: it168
相關推薦

2009-07-14 09:09:08

Swing模型過濾器

2009-07-10 12:30:12

Swing組件

2009-07-17 14:57:41

SwingWorkerSwing程序

2009-07-10 14:41:57

Swing技術

2009-07-17 16:19:16

Swing核心組件

2009-07-10 16:14:29

MVC設計模式Swing

2009-07-14 11:30:15

Swing線程

2009-07-15 13:48:26

Swing模型和渲染器

2012-01-17 17:21:24

JavaSwing

2025-05-08 05:00:00

2009-07-14 14:00:47

iData技術

2009-07-15 10:52:13

JTree組件

2009-06-15 15:16:00

netbeans sw平臺開發

2012-05-04 10:20:23

JavaSwingNinePatch

2009-07-01 11:42:03

數據云URL過濾安全網關

2009-07-08 16:07:04

Servlet過濾器配

2011-06-29 16:14:59

Qt 事件 過濾器

2009-07-09 13:44:22

Swing動態界面設計

2025-07-14 08:17:29

2009-06-24 16:50:11

Java內存模型
點贊
收藏

51CTO技術棧公眾號

亚洲欧洲在线观看| 精品久久香蕉国产线看观看亚洲| 国产主播欧美精品| 国产女人被狂躁到高潮小说| 99精品国产高清一区二区麻豆| 亚洲成人免费在线| 日韩理论片在线观看| 国产精品视频久久久久久| 国产伊人精品| 一区二区三区视频免费| 原创真实夫妻啪啪av| 在线观看涩涩| 亚洲精品美腿丝袜| 欧美日韩一区二区视频在线观看| 国产精品久久久久久免费| 亚洲大胆av| 日韩午夜在线视频| 黄色污在线观看| 电影91久久久| 一本一本久久a久久精品综合麻豆| 亚洲一卡二卡三卡四卡无卡网站在线看| 国产福利第一页| 日韩av一二三| 国外成人在线播放| 乱h高h女3p含苞待放| 中文字幕精品影院| 精品国产伦一区二区三区免费 | 日韩三级视频在线看| 岳毛多又紧做起爽| 在线观看午夜av| 国产女人水真多18毛片18精品视频| 成人91视频| 国产美女裸体无遮挡免费视频| 羞羞视频在线观看欧美| 欧美激情影音先锋| 欧美一区免费观看| 日本不卡免费一区| 亚洲人a成www在线影院| 无码国产精品一区二区免费式直播 | 日韩国产一区二区三区| 日韩电影在线观看中文字幕| 337p日本欧洲亚洲大胆张筱雨| 久久xxx视频| 色国产综合视频| 欧美 日本 亚洲| 欧美hdxxx| 亚洲免费观看高清完整| 亚洲欧洲国产日韩精品| 大乳在线免费观看| 久久一日本道色综合| 国产乱码精品一区二区三区不卡| 国产精品视频第一页| 久久精品72免费观看| 国产精品91一区| 成人h动漫精品一区二区下载| 亚洲日本欧美| 97精品视频在线| 日韩av综合在线| 亚洲茄子视频| 欧美一区二区三区图| 日韩免费视频网站| 国产精品日韩欧美一区| 2019亚洲日韩新视频| 久久亚洲精品国产| 老司机亚洲精品| 国产精品激情av在线播放| www.亚洲激情| 免费成人美女在线观看.| 国产精品一区二区三区久久| 制服丝袜在线一区| 卡一卡二国产精品| 91视频九色网站| 精品久久久久久亚洲综合网站| 国产一级精品在线| 成人精品水蜜桃| 污视频网站在线播放| 久久综合九色综合久久久精品综合| 成人自拍偷拍| 亚洲av成人无码网天堂| 国产欧美一区二区精品秋霞影院 | h片在线免费观看| 一区二区三区四区在线播放| 欧美久久在线观看| 天堂av中文在线观看| 欧美午夜免费电影| 91视频福利网| 欧美一区 二区| 亚洲一区二区久久久| 男人晚上看的视频| 激情91久久| 国产精品成人一区| 国产婷婷在线视频| av高清不卡在线| 午夜老司机精品| 日本中文字幕中出在线| 日韩欧美国产激情| 欧美xxxxxbbbbb| 日本成人7777| 久久亚洲国产精品| 中文字幕在线字幕中文| 麻豆国产91在线播放| 99在线看视频| 国产精品麻豆一区二区三区| 亚洲黄色免费网站| 激情婷婷综合网| 欧美特黄不卡| 亚洲欧美日韩国产成人| 精品一区在线观看视频| 天堂在线一区二区| 粉嫩精品一区二区三区在线观看| 美国成人毛片| 亚洲影院理伦片| 奇米影视四色在线| 青青草这里只有精品| 久久天天躁狠狠躁夜夜爽蜜月| 日本一级一片免费视频| 国产精品一区专区| 亚洲欧美久久234| 亚洲人成午夜免电影费观看| 91精品国产综合久久久久久久久久| 97人妻天天摸天天爽天天| 亚洲精品极品少妇16p| 日韩免费不卡av| 国产成人无码www免费视频播放| 国产精品久久久久一区二区三区| 中文字幕无码精品亚洲35| 亚洲人成777| 中文字幕在线观看日韩| 亚洲黄色免费观看| 成人av先锋影音| 免费观看亚洲视频| 天堂综合在线播放| 在线日韩精品视频| 久久人妻免费视频| 99精品久久99久久久久| 久久www视频| 成人久久精品| 久久亚洲精品中文字幕冲田杏梨| 久草热在线观看| 久久色成人在线| 男女高潮又爽又黄又无遮挡| 一区二区三区在线资源| 久久成人av网站| 国产三级小视频| 中文字幕一区二区5566日韩| 日本爱爱免费视频| 精品日韩毛片| 国产精品极品美女粉嫩高清在线| 精华区一区二区三区| 欧美午夜女人视频在线| 欧美无人区码suv| 国产欧美成人| 免费av在线一区二区| av日韩电影| 亚洲香蕉成视频在线观看| 男人天堂视频网| 欧美激情一区在线| 性生活免费在线观看| 国产精品99在线观看| 成人乱色短篇合集| 在线午夜影院| 亚洲成人av在线播放| 日韩成人免费在线视频| 91亚洲国产成人精品一区二三| 国产96在线 | 亚洲| 日韩啪啪网站| 国产精品久久久久一区二区| 自拍视频在线免费观看| 91精品在线观看入口| 青娱乐国产盛宴| zzijzzij亚洲日本少妇熟睡| 毛片在线视频播放| 国产精品密蕾丝视频下载| 国产精品成人一区二区| 九色porny在线| 精品88久久久久88久久久| 在线能看的av| 国产精品美女久久久久久2018| 亚洲精品免费一区亚洲精品免费精品一区 | 日韩激情一二三区| 亚洲日本japanese丝袜| 无码国模国产在线观看| 欧美综合一区第一页| av在线日韩国产精品| 日韩午夜精品视频| 国产成人精品网| 国产精品进线69影院| 国产精品熟妇一区二区三区四区| 亚洲欧美成人| 正在播放91九色| 北条麻妃一区二区三区在线观看 | 久久亚洲AV成人无码国产野外| 欧美一区=区| 欧美日韩国产一二| 日韩av电影资源网| 欧美福利视频在线| 色婷婷中文字幕| 欧美色综合久久| 成人免费毛片xxx| 成人在线视频一区二区| 大陆av在线播放| 日韩精品一区二区三区免费观看| 91网在线免费观看| 国产在线观看www| 深夜福利亚洲导航| 天天干天天插天天操| 欧美羞羞免费网站| 免费观看一级视频| 91麻豆.com| 欧美一级片在线免费观看| 在线综合亚洲| 国产精品99久久久久久大便| 极品尤物一区| 国产精品美女久久| av中文在线资源| 亚洲精品在线观看www| 国产精品一区二区免费视频| 精品国产31久久久久久| 一级黄色片日本| 99久久精品久久久久久清纯| 午夜精品久久久久久久99热影院| 亚洲第一黄色| 中文字幕在线观看一区二区三区| 99re热精品视频| 成人有码视频在线播放| 亚洲欧洲美洲av| 久久久亚洲成人| 中文字幕中文字幕在线十八区| 精品亚洲男同gayvideo网站| 国产区精品在线| 在线观看av一区| 中文字幕日韩免费| 精品人伦一区二区三区蜜桃网站 | 亚洲第一第二区| 欧美日韩视频在线第一区 | 亚洲国产片色| 日本一区二区免费高清视频| 亚洲福利网站| 国产精品视频500部| 91精品一区| 国产精品久久久久久久久久尿| 周于希免费高清在线观看| 欧美激情国产精品| 亚洲综合影视| 久久九九有精品国产23| 日本精品一区二区三区在线播放| 亚洲欧美另类中文字幕| 日本中文字幕一区二区有码在线| 日韩女同互慰一区二区| 午夜免费福利视频| 日韩一区二区在线观看视频| 在线观看黄色网| 精品欧美一区二区三区| 毛片在线免费视频| 欧美日韩国产精品| 久久精品国产亚洲av高清色欲| 亚洲色图在线播放| 中文乱码字幕高清一区二区| 中文字幕电影一区| 成人做爰69片免网站| 国产精品久久久久影院亚瑟| 国产午夜精品福利视频| 国产婷婷色一区二区三区在线| 极品白嫩的小少妇| 久久午夜色播影院免费高清| 亚洲人人夜夜澡人人爽| www久久久久| 蜜桃av免费在线观看| 国产精品久久看| 一区二区三区在线播放视频| 国产精品久久久久毛片软件| 国产va在线播放| 亚洲午夜精品网| 免费毛片一区二区三区| 日本久久一区二区| 国产精品sm调教免费专区| 欧美日韩五月天| av中文在线观看| 亚洲乱码一区av黑人高潮| 国产午夜在线视频| 日韩专区中文字幕| av毛片在线免费| 欧美激情网友自拍| 午夜欧美巨大性欧美巨大| 国产99在线|中文| 欧美综合影院| 91丨九色丨国产在线| 欧美美女啪啪| 先锋影音亚洲资源| 在线观看国产精品入口| 久久网站免费视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 香蕉视频999| 91丝袜美腿高跟国产极品老师| 在线不卡av电影| 亚洲人成在线观看一区二区| 永久免费看黄网站| 一本色道久久综合狠狠躁的推荐 | 日韩精品亚洲专区| av在线免费看片| 久久综合狠狠综合| 日韩亚洲欧美中文字幕| 亚洲一区二区三区四区五区中文 | 91精品一区二区| 成人影院中文字幕| 日本一区二区久久精品| 色喇叭免费久久综合网| 怡红院av亚洲一区二区三区h| 日本美女一区二区三区视频| 成人在线短视频| 亚洲国产高清不卡| 国产精品a成v人在线播放| 日本丶国产丶欧美色综合| 国产一区二区女内射| 亚洲美女动态图120秒| 国产福利视频在线观看| 欧美最猛性xxxxx免费| 国产成人tv| 一区二区视频在线观看| 亚洲影音先锋| 日韩女优在线视频| 日韩一区在线免费观看| 国产农村妇女aaaaa视频| 51精品秘密在线观看| 亚洲精品911| 日韩中文字幕免费| 在线看片国产福利你懂的| 91九色在线观看| 日韩国产一区二区| 青青青在线视频免费观看| 不卡av在线网| 男人的天堂久久久| 7777女厕盗摄久久久| 91porn在线观看| 欧美在线视频一区二区| 亚洲成人一品| av之家在线观看| jvid福利写真一区二区三区| 久久久久久久久久99| 欧美精三区欧美精三区| 九色视频在线观看免费播放| 欧洲亚洲在线视频| 欧美理伦片在线播放| 日韩在线观看a| 成人黄色综合网站| 久草免费在线观看视频| 欧美一区二区在线免费播放| 黄色一级大片在线免费看产| 国产区亚洲区欧美区| 成人午夜国产| 亚洲黄色av网址| 成人欧美一区二区三区在线播放| 天天干天天操天天操| 国产丝袜精品第一页| 欧美动物xxx| 日韩成人av电影在线| 久久久久欧美精品| 亚洲精品国产精品国自| 欧美亚洲一区二区在线观看| 视频一区二区三区国产| 亲爱的老师9免费观看全集电视剧| 老司机精品在线| 欧日韩免费视频| 91浏览器在线视频| 中文字幕手机在线视频| 日韩在线观看网站| 先锋影音网一区二区| 日本三级福利片| 高清不卡一区二区| 久久精品视频9| 日韩精品一二三四区| 亚洲精品一区三区三区在线观看| 深夜福利成人| 国模娜娜一区二区三区| 国产小视频在线观看免费| 欧美精品一区二区三区在线播放| 678在线观看视频| 欧美一区二区三区在线播放| 日本不卡高清视频| xxxx日本黄色| 色8久久人人97超碰香蕉987| 97超碰人人在线| 91黄色精品| 国产精品毛片在线看| 国产免费无遮挡吸奶头视频| 欧美日韩综合视频| 日本蜜桃在线观看| y111111国产精品久久婷婷| 极品裸体白嫩激情啪啪国产精品| 久久人人妻人人人人妻性色av| 一本大道久久a久久精品综合| 免费a级毛片在线播放| 国产精品久久久久久久久久直播| 亚洲综合二区| 九九热最新地址| 亚洲第一精品夜夜躁人人爽| 97天天综合网| 色噜噜狠狠一区二区三区| 国内精品不卡在线| 中文字幕五月天|