user-interface - JavaFX 中的自定义节点绘制

标签 user-interface javafx paint paintevent

在 PySide 中,您可以重写 QWidgetpaintEvent() 方法来控制小部件在屏幕上绘制的方式。 JavaFX 中是否有相当于 Node 的东西?


上下文:我需要一种在屏幕上显示自定义图像格式的方法。不断转换我的格式和 JavaFX 的 Image 以便我可以在 ImageView 中显示它,这对我来说太慢了,而且更困惑。

我查看了 ImageView.javaCanvas.java,但没有运气。 ImageView 使用 css,而 Canvas 似乎正在使用已弃用的 impl_ 方法执行某些操作,我没有找到相关文档。

谢谢!

最佳答案

一般来说,JavaFX 中的绘制机制转向了更加基于事件的方法。要遵循 JavaFX 方式,您可能应该查看 TimelineAnimationTimer并且仅在实际图像数据发生变化时更新显示。

但是,如果您愿意,您可以在 JavaFX 中使用旧的 Swing 方式:

public class MyPane extends Pane {
    private final Canvas canvas;

    public MyPane() {
        canvas = new Canvas(getWidth(), getHeight());
        getChildren().add(canvas);
        widthProperty().addListener(e -> canvas.setWidth(getWidth()));
        heightProperty().addListener(e -> canvas.setHeight(getHeight()));
    }

    @Override
    protected void layoutChildren() {
        super.layoutChildren();

        GraphicsContext gc = canvas.getGraphicsContext2D();

        gc.clearRect(0, 0, getWidth(), getHeight());

        gc.setFill(Color.RED);
        gc.fillRect(10, 10, getWidth() - 20, getHeight() - 20);

        // Paint your custom image here:
        gc.drawImage(someImage, 0, 0);
    }
}

上面的代码与此 Swing 代码等效:

public class MyPanel extends JPanel {
    private static final long serialVersionUID = -969772195113348076L;

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.clearRect(0, 0, getWidth(), getHeight());

        g.setColor(java.awt.Color.RED);
        g.fillRect(10, 10, getWidth() - 20, getHeight() - 20);

        // Paint your custom image here:
        g.drawImage(someImage, 0, 0, null);
    }
}

关于user-interface - JavaFX 中的自定义节点绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184574/

相关文章:

独立桌面应用程序中表示层的 JavaFX

java - 如何将 JavaFx 应用程序连接到指纹扫描仪

ios - 仅为绘制的特定区域边界获取 UIImage - PaintView

java - 可以禁用 GUI 吗?

objective-c - 使 UITabBar 项目看起来都未选中

php - Magento 的 UI 对象层次结构中的阴影选项卡是什么?

java - Mac 上不显示 GUI?

JavaFx:根据另一个组合框使用不同的枚举填充组合框

java - 对象类未绘制到屏幕上

java - 如何增加 JPanel 重绘的频率?