为什么绑定不能与转换一起使用

2024-02-04

我有一个Circle和它的centerX财产绑定到text标签的属性。这是为了查看屏幕上对象的位置。每当我在圆圈上应用过渡时,绑定似乎就会停止工作。这是代码片段。

//ERRONEOUS PART OF CODE
        Circle circle = new Circle(50, 20, 20);
        Label posLabel = new Label();
        //binding
        StringBinding binding = new StringBinding(){
            {bind(circle.centerXProperty());}
            @Override public String computeValue(){
                return Double.toString(circle.getCenterX());
            }
        };
        posLabel.textProperty().bind(binding);
        //translation
        TranslateTransition transition = new TranslateTransition(Duration.seconds(3), circle);
        transition.setByX(250);
        transition.play();

我想知道为什么绑定不适用于转换,如果可能的话,提供解决问题的方法。

P.S.一个完整的最小可重现示例:(我是说绑定不起作用,因为标签值停留在 50.0)

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.control.Label;
import javafx.scene.shape.Circle;
import javafx.animation.TranslateTransition;
import javafx.util.Duration;
import javafx.beans.binding.StringBinding;
public class TransitionError extends Application
{
    public void start(Stage stage) throws Exception
    {
        //instantiating all objects
        Circle circle = new Circle(50, 20, 20);
        Label posLabel = new Label();
        Group group = new Group(circle, posLabel);
        Scene scene = new Scene(group, 300,100);
        stage.setTitle("JavaFX Example");
        stage.setFullScreen(true);
        stage.setScene(scene);
        stage.show();
        
        //ERRONEOUS PART OF CODE
        //binding
        StringBinding binding = new StringBinding(){
            {bind(circle.centerXProperty());}
            @Override public String computeValue(){
                return Double.toString(circle.getCenterX());
            }
        };
        posLabel.textProperty().bind(binding);
        //translation
        TranslateTransition transition = new TranslateTransition(Duration.seconds(3), circle);
        transition.setByX(250);
        transition.play();
    }
}

The TranslateTransition不会改变 的值centerX;它改变了的值translateX.

所以你可以这样做:

    StringBinding binding = new StringBinding(){
        {bind(circle.centerXProperty(), circle.translateXProperty());}
        @Override public String computeValue(){
            return Double.toString(circle.getCenterX()+circle.getTranslateX());
        }
    };

或者您可以使用原始绑定并为其设置动画centerX属性(这可能更好,因为您似乎依赖于centerX改变):

// TranslateTransition transition = new TranslateTransition(Duration.seconds(3), circle);
// transition.setByX(250);
// transition.play();

Timeline timeline = new Timeline(new KeyFrame(
    Duration.seconds(3), 
    new KeyValue(circle.centerXProperty(), circle.getCenterX()+250)
));
timeline.play();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么绑定不能与转换一起使用 的相关文章

  • TextField 和属性之间的 JavaFX 绑定

    如果您在 JavaFX TextField 和属性之间创建绑定 则每次击键时该绑定都会失效 从而导致文本发生更改 如果您有一系列绑定 则默认行为可能会导致问题 因为中间的编辑值可能无效 好的 我知道我可以创建从属性到文本字段的单向绑定 并注
  • 由于 MultiReleaseException,jdeps 无法打印模块 deps

    我们有一个基于 JavaFX 的应用程序 它是not模块化 有原因 涉及遗留库 但我们使用构建自定义运行时jdeps and jlink 我们最近重写了该应用程序并添加了一些新的依赖项 并删除了其他依赖项 现在 正在构建应用程序的脚本突然停
  • ScrollPane删除节点时跳转到顶部

    我有一个ScrollPane含有一个TilePane显示图像 每当我删除其中一张图像时ScrollPane跳回到顶部 这在尝试删除多个图像时非常烦人 有没有办法控制滚动行为 我在 Windows 7 上运行此代码 import javafx
  • JavaFX 8 - 如何将 TextField 文本属性绑定到 TableView 整数属性

    假设我有这样的情况 我有一个TableView 表作者 有两个TableColumns 身份证号和姓名 这是 AuthorProps POJO 由TableView import javafx beans property SimpleIn
  • 条件绑定

    我是 JavaFx 新手 我正在创建一个应用程序 用户必须填写一些表单 并且我想使用绑定 预先验证 它们 简单的事情 比如所有元素都不能为空 或者其中一些元素只能包含数字 这是我到目前为止所拥有的 saveBtn disableProper
  • 如何仅通过鼠标使用 javafx 在表格视图中选择多个单元格?

    我有一个在 javafx 中带有表格视图的应用程序 我想仅通过鼠标选择多个单元格 类似于 Excel 中存在的选择 我尝试过 但我不能做某事 这个问题的正确答案在这里https community oracle com thread 262
  • JavaFX 8:拦截应用程序“退出”

    为了验证用户所做的所有更改是否已保存 我想拦截 JavaFX 应用程序的退出 退出 是否有一种通用的方法来实现这一目标 例如覆盖事件 或者还有更多方法吗 正如他们已经说过的 这是通过拦截来完成的WindowEvent WINDOW CLOS
  • 为什么图很大时x轴消失了

    我正在尝试使用加载大图JFreeChart 但是 当缓冲图像超过一定大小时 X 轴会出现问题 这些值在 X 轴上消失 这可以在图像的第三张图中看到 I would appreciate any help in fixing the prob
  • 如何在 Javafx 中对齐对话框窗格的“确定”按钮?

    我想对齐 即位置中心 对话框窗格的 确定 按钮 我已经尝试过下面的代码 但它不起作用 Dialog dialog new Dialog DialogPane dialogPane dialog getDialogPane dialogPan
  • JavaFX ProgressBar:如何添加动画?

    我创建了一个进度条并更改了进度条颜色 是否可以像 bootstrap 动画进度条一样向进度条添加动画 这是示例 链接在这里 http getbootstrap com components progress animated 实际上 我找到
  • 尝试使 Tableview 可点击时发生 JavaFX 错误

    我正在尝试使表格视图可单击 它将返回单击的单元格中的文本 尝试在 Netbeans 中编译时收到两个错误 所有代码均取自 示例12 11 单元格编辑的替代解决方案 官方表格视图教程 http docs oracle com javafx 2
  • 学习 Java Native Access 时出现 com.sun.glass.ui 包错误

    我正在尝试在 JavaFX 项目中使用 Undecorated 阶段 stage initStyle StageStyle UNDECORATED 它是一个模块化的 Gradle 项目 它也是一个多项目构建 https guides gra
  • Javafx-场景快照不显示值和系列

    我制作了一个非常短的应用程序 它使用 javafx 生成图表 应用程序显示正确的值 图表 但当我做快照时 图像仅显示轴和标签 但不显示系列和值 stage setTitle Line Chart Sample final DateAxis
  • 尝试让 GUI 使用 arrayList 在牌组中打印随机卡

    所以我目前正在用java开发一个卡牌战争游戏 我试图让 GUI 屏幕使用 arrayList 从一组卡片图像中打印 2 张随机卡片 必须使用它进行分配 卡片图像文件名为 1 png 2 png 52 png 并存储在 image card
  • 在 CSS 中设置 TableView 样式 (JavaFX)

    如何在 TableView 中设置 THIS 点的样式 我的 CSS 代码如下所示 Empty Stylesheet file root fx background color 262626 table view fx background
  • JavaFX中如何获取鼠标位置?

    我是java fx 的初学者 如何在 JavaFX 中获取鼠标在 x 和 y 中的位置 我尝试使用 AWTMouseInfo 也导入了它 但它不起作用 我还在 Ensembles 中看到了它的代码 在 高级阶段 拖动球窗口 这就是我需要做的
  • IntelliJ 不会从 Maven 依赖项加载 javafx 包 (JavaFX 17)

    我正在尝试获取一个 Maven JavaFX 项目 该项目是从javafx 原型 fxml原型且未经编辑 可在最新版本的 IntelliJ 中运行 需要明确的是 该项目是该原型的直接复制 我只是想让一个例子起作用 可以说我是 Maven 的
  • 无法解析符号“javafx.scene.web”

    使用Intellij 2021 3 2 JavaFX版本 11 0 2 1 我正在尝试将 JavaFX WebView 添加到我的应用程序中 我的导入语句无法编译 import javafx scene web 编译错误 java 找不到符
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建
  • JavaFX MediaPlayer - 音乐在 10 秒后停止

    这是代码 就像标题所说的 音乐在10秒后停止 我在vlc或其他程序中正常播放该文件 持续了5分钟多 public void music String bip src data fjordmusic mp3 Media hit new Med

随机推荐