[英]Java Swing: keeping the event handling maintanable
在我當前的項目中,我們為Swing客戶端使用以下模式:
業務對象(POJO)<->(映射)<->表示模型(具有屬性更改支持的POJO)<->(綁定)<->視圖組件
一切都很好,並且以我們期望他們的行為方式運行。
但是,當視圖開始增長時,我們會解決那些問題:
在第一個答案后編輯:
我們的屏幕包含非常復雜的規則,並且需要其他相關面板的通知。 因此,我們有很多有用的偵聽器,單個用戶的更改可以觸發許多基礎事件。
將表示模型與業務模型綁定在一起的想法對我們而言不是那么好:我們在映射過程中執行一些代碼。
我正在尋找有關構建可維護的Swing應用程序的指南,建議,最佳實踐等,尤其是在事件管理方面。
有許多減少發送事件數量的方法。
public void setMyField(Object newValue) {
Object oldValue = myField;
if((oldValue==null && newValue!=null) || (oldValue!=null && !oldValue.equals(newValue))) {
myField = newValue;
propertyChangeSupport.firePropertyChange("myField", oldValue, newValue);
}
}
}
僅在您開始感興趣時才注冊為事件偵聽器,並在您不再感興趣時立即注銷。確實,作為偵聽器,即使不采取任何措施,也會迫使JVm調用用於事件傳播的各種方法。 。 不做監聽者將避免所有這些調用,並使應用程序更加簡單。
考慮通過直接實例化增加的POJO將POJO替換為增加的POJO映射。 或者,更簡單地說:使您的POJO真實Java Bean具有PropertyChangeEvent處理功能。 為了使它們易於持久保存,一種簡單的解決方案是,一旦“重新水化”或從持久層加載后,添加一個持久性更新程序機制作為PropertyChangeListener。 這樣,當更新POJO時,將通知持久層,並透明地更新DB中的對象。
所有這些都是非常簡單的建議,只需要很大的紀律,即可確保僅在正確的時間針對正確的聽眾觸發事件。
我建議每個模型執行一次事件操作。 不要嘗試使用無望的ProtpertyChangeListener
將其分解為多個字段。 使用ChangeListener
或您自己的等效項。 (坦率地說,事件參數沒有幫助。)也許將“屬性”類型更改為可聽對象,而不是偵聽復合對象。
大多數Swing組件使用的EventListenerList
方案相當輕巧。 在決定采用新的體系結構之前,請確保對代碼進行概要分析。 除了通常的選擇之外 ,此EventQueue
子類示例還建議了另一種有趣的監視事件流量的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.