小编Jen*_*ack的帖子

Java视图的可用性属性超出了GUI视图的范围

在使用JavaFX(Java8)工作一段时间之后,我发现Properties的概念非常有用,允许使用bean兼容变量绑定以使用计算树更新更改,例如:

class Person {
    StringProperty name;
    ...
}
Run Code Online (Sandbox Code Playgroud)
Person owner;
Person human;

owner.name().bind(human.name());
Run Code Online (Sandbox Code Playgroud)

这允许将GUI控件绑定到"模型",以自动更新更改.

所以我也开始Property<T>在模型中使用该类(我的数据对象正在进行我的功能操作).但JavaFX是一个单线程GUI实现,只有在JavaFX线程中完成时,才允许设置链接到某些GUI控件的属性.否则将抛出异常:

  Exception in thread "Thread-5" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-5
Run Code Online (Sandbox Code Playgroud)

如果我现在开始编写多线程代码,我终于无法使用这些属性,即使我愿意.我无法承担将Platform.runLater()调用中的每个更改封装到JavaFX线程中的能力.

为什么JavaFX不提供线程安全的Property-Binding?(或者是吗?)

javafx

16
推荐指数
1
解决办法
4846
查看次数

在已缩放的节点中的枢轴点处缩放

我正在尝试使用zoomable/pannable画布创建一个应用程序.

特点:

  • 在枢轴点使用鼠标滚轮放大/缩小
  • 用鼠标左键拖动画布上的节点
  • 用鼠标右键拖动整个画布

只要您开始按比例缩放,缩放点就会起作用.将鼠标放在网格点上并滚动鼠标滚轮.枢轴点将保持开始缩放的位置.

问题:

放大时,然后将鼠标移动到另一个点并再次缩放,然后移动枢轴点并在初始鼠标位置不再进行缩放.

示例:

这是代码:

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.ScrollEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;

/**
 * The canvas which holds all of the nodes of the application.
 */
class PannableCanvas extends Pane {

    Scale scaleTransform;

    public PannableCanvas() {

        setPrefSize(600, 600);
        setStyle("-fx-background-color: lightgrey; -fx-border-color: blue;");

        // add scale transform
        scaleTransform …
Run Code Online (Sandbox Code Playgroud)

scroll javafx zoom panning pinchzoom

11
推荐指数
1
解决办法
4534
查看次数

标签 统计

javafx ×2

panning ×1

pinchzoom ×1

scroll ×1

zoom ×1