JavaFX:Observable和ObservableValue的事件处理(invalidated和changed)
2023-12-22 21:21:49
JavaFX提供了Observable接口和ObservableValue接口, 处理invalidated(数据失效)和changed(数据更新)事件。
示例一:
自定义类继承InvalidationListener接口,当数据失效时,触发该接口的invalidated事件。
Book数据类,其中的变量分别是StringProperty类型和DoubleProperty类型。分别注册InvalidationListener接口的实现ObservableEvent类。
package javafx8.ch03.observablelist;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
/**
* @copyright 2003-2023
* @package javafx8.ch03.observablelist
* @file Book.java
* @date 2023-12-22 16:13
* @author qiao wei
* @version 1.0
* @brief
* @history
*/
public class Book {
public Book(String isbn, String bookTitle, double price) {
isbnProperty = new SimpleStringProperty(this, "ISBN", isbn);
bookTitleProperty = new SimpleStringProperty(this, "Book", bookTitle);
priceProperty = new SimpleDoubleProperty(this, "Price", price);
observableEvent = new ObservableEvent();
isbnProperty.addListener(observableEvent::invalidated);
bookTitleProperty.addListener(observableEvent::invalidated);
priceProperty.addListener(observableEvent::invalidated);
}
public String getIsbn() {
return isbnProperty.get();
}
public void setIsbn(String isbn) {
isbnProperty.set(isbn);
}
public String getBookTitle() {
return bookTitleProperty.get();
}
public void setBookTitle(String bookTitle) {
bookTitleProperty.set(bookTitle);
}
public double getPrice() {
return priceProperty.get();
}
public void setPrice(double price) {
priceProperty.set(price);
}
public static final String ISBN = "ISBN";
public static final String BOOK = "Book";
public static final String PRICE = "Price";
private StringProperty isbnProperty;
private StringProperty bookTitleProperty;
private DoubleProperty priceProperty;
private ObservableEvent observableEvent;
}
ObservableEvent类,继承InvalidationListener接口:
package javafx8.ch03.observablelist;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.StringProperty;
/**
* @copyright 2003-2023
* @package javafx8.ch03.observablelist
* @file ObservableEvent.java
* @date 2023-12-22 16:22
* @author qiao wei
* @version 1.0
* @brief
* @history
*/
public class ObservableEvent implements InvalidationListener {
@Override
public void invalidated(Observable observable) {
String name = null;
if (observable instanceof StringProperty) {
name = ((StringProperty) observable).getName();
} else if (observable instanceof DoubleProperty) {
name = ((DoubleProperty) observable).getName();
}
switch (name) {
case Book.ISBN:
System.out.println("ISBN------------: " + ((StringProperty) observable).getName());
break;
case Book.BOOK:
System.out.println("OKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK");
break;
case Book.PRICE:
System.out.println(((DoubleProperty) observable).get());
break;
default:
break;
}
}
}
测试代码:
package javafx8.ch03.observablelist;
/**
* @copyright 2003-2023
* @package javafx8.ch03.observablelist
* @file BookTest.java
* @date 2023-12-22 16:35
* @author qiao wei
* @version 1.0
* @brief
* @history
*/
public class BookTest {
public static void main(String[] args) {
test01();
}
private static void test01() {
Book book01 = new Book("123", "Test01", 22.55D);
book01.setIsbn("222---");
book01.setPrice(22.3d);
}
}
运行结果:
ISBN------------: ISBN
22.3
Process finished with exit code 0
程序更新String类型、double类型数据,触发invalidated事件。
文章来源:https://blog.csdn.net/weiweiqiao/article/details/135159702
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!