Spec-Zone .ru
спецификации, руководства, описания, API
|
001/* 002 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. 003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 004 * 005 * This code is free software; you can redistribute it and/or modify it 006 * under the terms of the GNU General Public License version 2 only, as 007 * published by the Free Software Foundation. Oracle designates this 008 * particular file as subject to the "Classpath" exception as provided 009 * by Oracle in the LICENSE file that accompanied this code. 010 * 011 * This code is distributed in the hope that it will be useful, but WITHOUT 012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 014 * version 2 for more details (a copy is included in the LICENSE file that 015 * accompanied this code). 016 * 017 * You should have received a copy of the GNU General Public License version 018 * 2 along with this work; if not, write to the Free Software Foundation, 019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 020 * 021 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 022 * or visit www.oracle.com if you need additional information or have any 023 * questions. 024 */ 025 026package javafx.beans.value; 027 028import java.util.ArrayList; 029import java.util.List; 030 031import com.sun.javafx.binding.ExpressionHelper; 032import javafx.beans.InvalidationListener; 033import javafx.beans.Observable; 034 035/** 036 * A convenience class for creating implementations of {@link ObservableValue}. 037 * It contains all of the infrastructure support for value invalidation- and 038 * change event notification. 039 * 040 * This implementation can handle adding and removing listeners while the 041 * observers are being notified, but it is not thread-safe. 042 * 043 * 044 */ 045public abstract class ObservableValueBase<T> implements ObservableValue<T> { 046 047 private ExpressionHelper<T> helper; 048 049 /** 050 * {@inheritDoc} 051 */ 052 @Override 053 public void addListener(InvalidationListener listener) { 054 helper = ExpressionHelper.addListener(helper, this, listener); 055 } 056 057 /** 058 * {@inheritDoc} 059 */ 060 @Override 061 public void addListener(ChangeListener<? super T> listener) { 062 helper = ExpressionHelper.addListener(helper, this, listener); 063 } 064 065 /** 066 * {@inheritDoc} 067 */ 068 @Override 069 public void removeListener(InvalidationListener listener) { 070 helper = ExpressionHelper.removeListener(helper, listener); 071 } 072 073 /** 074 * {@inheritDoc} 075 */ 076 @Override 077 public void removeListener(ChangeListener<? super T> listener) { 078 helper = ExpressionHelper.removeListener(helper, listener); 079 } 080 081 /** 082 * Notify the currently registered observers of a value change. 083 * 084 * This implementation will ignore all adds and removes of observers that 085 * are done while a notification is processed. The changes take effect in 086 * the following call to fireValueChangedEvent. 087 */ 088 protected void fireValueChangedEvent() { 089 ExpressionHelper.fireValueChangedEvent(helper); 090 } 091}