Feedback 反饋 詳述一

2021-09-01 07:09:13 字數 1458 閱讀 5637

feedback用於對gef編輯器操作的反饋,最常見的是一些鬼影效果。

1.feedback的呼叫:

每個gef編輯器都有乙個editdomain物件,editdomain主要是用於觸發事件用的,這樣說真的很不負責任。但是,事件的**確實是它的主要責任之一。首先它會獲取到事件源,然後獲取到當前活動的activetool,然後**給當前活動的activetool。至於事件是如何響應的,如何處理的,都是由tool來處理的。(關於editdomain和tool這塊在另一篇文章裡面有描述)

由於事件的響應都是由activetool處理的,editdomain只做**,所以,最源頭呼叫feedback的地方是各個activetool,這個獲取一下引用就能夠找到了,包括最終銷毀feedback效果也是在activetool裡面處理的。

2.feedback的建立:

儘管呼叫是在activetool裡面,但是建立卻是在editpart裡面,在editpart介面裡面定義了四個方法:

void erasesourcefeedback(request request);

void erasetargetfeedback(request request);

void showsourcefeedback(request request);

void showtargetfeedback(request request);

這還沒完,我們可以看看abstracteditpart裡面對這些方法的實現,這裡只貼出乙個:

public void showsourcefeedback(request request)
從**可以看出,其實gef的預設實現是呼叫editpolicy裡面的實現。現在就要弄清楚了,其實editpart和editpolicy裡面都能夠實現feedback效果。具體在那裡實現,完全看這個效果的粒度,如果它針對所有的請求都有效,可以直接在editpart裡面實現,如果只針對部分請求有效,就實現在editpolicy裡面。

3.feedback的實現:

其最基本的實現原理是:在編輯器的根上有乙個feedback layer,所有的與feedback效果相關的ifigure,都是畫在這個層上面的,所以一般列印是不會列印出feedback的效果的。乙個gef編輯器的最底層的容器是乙個由多個層組成的ifigure,這個網上查一下就很清楚了。

一般我們需要獲取的畫,主要是獲取列印layer,然後通過對列印層的部分在記憶體中重畫成乙個image物件,然後儲存到檔案中,這個是列印層主要的用法。還有連線層,專門是放線的。feedback專門用於顯示反饋效果的。 

在graphicaleditpolicy裡面有乙個addfeedback(ifigure figure)方法,把自己想顯示的效果實現在這個地方,就能顯示了。

protected void addfeedback(ifigure figure)
具體的實現細節自己把握。

詳述HashSet類add方法(一)

我們知道,add方法可以用來向集合中新增元素,對於hashset集合來說,不允許儲存重複的元素,當我們儲存元素的時候,集合會對新增進來的元素進行判斷是否重複,首先我們對新加元素進行分析 add方法原始碼 jdk 11.0.4 public boolean add e e 此時我們發現,返回值是乙個布...

詳述HashSet類add方法(一)

詳述hashset類add方法 一 分析第一次新增資料的步驟 public class test2 1.呼叫hashset add 方法,原始碼如下 public boolean add e e 2.返回map.put 值,key為e,value值為present常量,方法原始碼如下 public ...

一階負反饋庫存控制

import numpy as np import matplotlib.pyplot as plt from prettytable import prettytable 將 實驗中出現的引數列舉如下 i0 1000 初始庫存水平為1000 tmax 45 截止時間 z0 5 訂貨調整時間為5 y...