observable-properties

Observable properties which are notifying listeners about changes

License

License

Categories

Categories

Java Languages
GroupId

GroupId

de.borisskert
ArtifactId

ArtifactId

java-observable-properties
Last Version

Last Version

0.1.0-17
Release Date

Release Date

Type

Type

jar
Description

Description

observable-properties
Observable properties which are notifying listeners about changes
Project URL

Project URL

https://github.com/borisskert/java-observable-properties
Source Code Management

Source Code Management

https://github.com/borisskert/java-observable-properties

Download java-observable-properties

How to add to project

<!-- https://jarcasting.com/artifacts/de.borisskert/java-observable-properties/ -->
<dependency>
    <groupId>de.borisskert</groupId>
    <artifactId>java-observable-properties</artifactId>
    <version>0.1.0-17</version>
</dependency>
// https://jarcasting.com/artifacts/de.borisskert/java-observable-properties/
implementation 'de.borisskert:java-observable-properties:0.1.0-17'
// https://jarcasting.com/artifacts/de.borisskert/java-observable-properties/
implementation ("de.borisskert:java-observable-properties:0.1.0-17")
'de.borisskert:java-observable-properties:jar:0.1.0-17'
<dependency org="de.borisskert" name="java-observable-properties" rev="0.1.0-17">
  <artifact name="java-observable-properties" type="jar" />
</dependency>
@Grapes(
@Grab(group='de.borisskert', module='java-observable-properties', version='0.1.0-17')
)
libraryDependencies += "de.borisskert" % "java-observable-properties" % "0.1.0-17"
[de.borisskert/java-observable-properties "0.1.0-17"]

Dependencies

test (2)

Group / Artifact Type Version
org.junit.jupiter : junit-jupiter-engine jar 5.6.0
org.hamcrest : hamcrest-library jar 2.2

Project Modules

There are no modules declared in this project.

Java Observable Properties

This project contains properties which are able to notify registered listeners about changes.

Usage

Insert dependency into your maven pom.xml:

<dependency>
  <groupId>de.borisskert</groupId>
  <artifactId>java-observable-properties</artifactId>
  <version>0.1.0-17</version>
</dependency>

Simple object properties

Simple properties are forced to contain a value. For optional values consider to use an OptionalProperty instance.

Generic object property

Instance creation

Property<Object> property = new SimpleObjectProperty<>(new Object());

Retrieve the value

Object object = property.get();

Update the value

property.set(new Object());

Register a listener

"Classical style"
public class MyChangeListener implements ChangeListener<Object> {
    @Override
    public void onChange(ReadonlyProperty<Object> property, Object oldValue, Object newValue) {
        // property: the property instance which is currently notifying this listener
        // oldValue: the value before this change occurred
        // newValue: the new value
    }
}

ChangeListener<Object> listener = new MyChangeListener();
property.addListener(listener);
Anonymous class
property.addListener(new ChangeListener<TestObject>() {
    @Override
    public void onChange(ReadonlyProperty<TestObject> property, TestObject oldValue, TestObject newValue) {
        // property: the property instance which is currently notifying this listener
        // oldValue: the value before this change occurred
        // newValue: the new value
    }
});
Lambda style
property.addListener((property, oldValue, newValue) -> {
    // property: the property instance which is currently notifying this listener
    // oldValue: the value before this change occurred
    // newValue: the new value
});

Unregister a listener

property.removeListener(listener);

Bind a Property

property.bind(anotherProperty);

Unbind a Property

property.unbind(boundProperty);

Typed properties

String

Property<String> property = new StringProperty<>("your property value");

Integer

Property<Integer> property = new IntegerProperty<>(123);

Double

Property<Double> property = new DoubleProperty<>(1.23);

Boolean

Property<Boolean> property = new BooleanProperty<>(true);

Long

Property<Long> property = new LongProperty<>(123L);

Float

Property<Float> property = new FloatProperty<>(1.23f);

Short

short myShort = 123;
Property<Short> property = new ShortProperty<>(myShort);

Optional properties

Optional properties are able to be empty. Technically they contain a null value.

Generic optional property

Instance creation

OptionalProperty<Object> property = new SimpleOptionalProperty<>(new Object()); // this property is filled
OptionalProperty<Object> empty = new SimpleOptionalProperty<>(); // this one is empty

Retrieve the optional value

Optional<Object> maybeObject = property.asOptional();

Typed optional properties

String

OptionalProperty<String> property = new OptionalStringProperty<>("your property value");
OptionalProperty<String> empty = new OptionalStringProperty<>();

Integer

OptionalProperty<Integer> property = new OptionalIntegerProperty<>(123);
OptionalProperty<Integer> empty = new OptionalIntegerProperty<>();

Double

OptionalProperty<Double> property = new OptionalDoubleProperty<>(1.23);
OptionalProperty<Double> empty = new OptionalDoubleProperty<>();

Boolean

OptionalProperty<Boolean> property = new OptionalBooleanProperty<>(true);
OptionalProperty<Boolean> empty = new OptionalBooleanProperty<>();

Long

OptionalProperty<Long> property = new OptionalLongProperty<>(123L);
OptionalProperty<Long> empty = new OptionalLongProperty<>();

Float

OptionalProperty<Float> property = new OptionalFloatProperty<>(1.23f);
OptionalProperty<Float> empty = new OptionalFloatProperty<>();

Short

short myShort = 123;
OptionalProperty<Short> property = new OptionalShortProperty<>(myShort);
OptionalProperty<Short> empty = new OptionalShortProperty<>();

Versions

Version
0.1.0-17