在PySide中,您可以覆盖paintEvent()
的{{1}}方法,以控制窗口小部件在屏幕上的绘制方式。 JavaFX中是否有QWidget
的等价物?
在上下文中:我需要一种在屏幕上显示自定义图像格式的方法。不断转换我的格式和JavaFX的Node
所以我可以在Image
中显示它对我来说太慢了,除了变得更加混乱。
我看过ImageView
和ImageView.java
,但没有运气。 Canvas.java
正在使用css,ImageView
似乎正在使用已弃用的Canvas
方法,我没有找到任何文档。
谢谢!
答案 0 :(得分:1)
通常,JavaFX中的绘制机制改变为更基于事件的方法。要遵循JavaFX方式,您应该查看Timeline或AnimationTimer并仅在实际图像数据发生更改时更新显示。
但是,如果您愿意,可以在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);
}
}