在Java中,ObservableValue 是一个接口,它是 JavaFX 库中的一部分。ObservableValue 是一个用于表示可观察的值的接口,它允许开发者在 JavaFX 应用程序中实现数据绑定和监听。在 JavaFX 中,ObservableValue 是一个非常常用的接口,它用于跟踪一个值的变化,并在值发生变化时通知监听者。
ObservableValue 接口定义了以下几个主要的方法:
addListener(ChangeListener< super T> listener):向 ObservableValue 添加一个值变化的监听器。
removeListener(ChangeListener< super T> listener):从 ObservableValue 移除一个值变化的监听器。
getValue():获取当前的值。
addInvalidationListener(InvalidationListener listener):向 ObservableValue 添加一个无效化监听器。
removeInvalidationListener(InvalidationListener listener):从 ObservableValue 移除一个无效化监听器。
invalidated():通知所有的无效化监听器,值已经无效。
通过使用 ObservableValue,您可以创建一个可以观察的属性,并在属性值发生变化时自动通知相关的监听器。这在实现数据绑定、MVC(Model-View-Controller)模式以及其他需要监听属性值变化的场景中非常有用。
1 内部匿名类和Lambda表达式
在之前的例子上对
buttonsetOnAction(this);
进行更改
buttonsetOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
Systemoutprintln("I am an annonymous inner class");
}
});
此时点击按钮调用的时间就是我们后来修改的,不用去检验每个按钮的名字,直接在生成对象之后对象的方法上调用内部类,使得事件发生。"Click me"。
但是后来会出现一个问题。按照上一次的想法我们有很多个按钮的时候会写出if条件结构,然后还要去对应代码中的对象,但是都使用内部匿名类也不方便。
甲骨文公司在Java 8中开始加入了Lambda表达式,此时将这个语句改成如下:
buttonsetOnAction(e-> Systemoutprintln("heyyyyy, I am Lambda"));
此时控制台对我们点击了按钮进行回应:heyyyyy, I am Lambda,Java自动帮我们处理这个事件。同时也可以改成
buttonsetOnAction(e->{
Systemoutprintln("heyyyyy, I am Lambda1");
效果如图
鼠标拖动效果
参考代码如下
import javafxapplicationApplication;
import javafxsceneScene;
import javafxscenelayoutPane;
import javafxscenelayoutRegion;
import javafxstageStage;
public class TestDraggedApp extends Application {
//保存鼠标点击在组件上的位置
private double offsetX,offsetY;
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
Region region = new Region();
regionsetStyle("-fx-background-color: #75c0ff;-fx-pref-width: 100;-fx-pref-height: 50");
rootgetChildren()add(region);
primaryStagesetScene(new Scene(root, 500, 320));
primaryStagesetTitle("TestDraggedApp");
primaryStageshow();
//设置鼠标按下事件
regionsetOnMousePressed(event -> {
//记录鼠标点击在组件上的位置
offsetX = eventgetX();
offsetY = eventgetY();
});
//设置鼠标拖动事件
regionsetOnMouseDragged(event -> {
//设置新的位置
double layoutX = eventgetSceneX() - offsetX;
regionsetLayoutX(layoutX);
double layoutY = eventgetSceneY() - offsetY;
regionsetLayoutY(layoutY);
});
}
public static void main(String[] args) {
launch(args);
}
}
以上就是关于Java中observablevalue是什么全部的内容,包括:Java中observablevalue是什么、JAVAFX怎么获取窗口句柄、请问javafx该如何获取一个组件的全局绝对坐标目前我想让组件随着鼠标的拖动而改变位置,(接下面)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)