一般來說,JavaFX中的繪畫機制已經轉向更基於事件的方法。要遵循JavaFX方式,您應該查看Timeline或AnimationTimer,並且只在實際圖像數據更改時更新顯示。
但是,你可以使用舊的方式擺在JavaFX中,如果你喜歡:
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);
}
}
我不知道你的意思是「'ImageView'正在使用css」。您可以使用['WritableImage'](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/WritableImage.html)作爲提供給「ImageView」的圖像,或者使用['Canvas'](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/Canvas.html)及其[[GraphicsContext]](http:// docs。 oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html)。 'GraphicsContext'有很多用於繪製圖像的公共API。 –
什麼是圖像格式? – Mansueli
@James_D @Kyllopardiun我沒有讀得太深,但似乎'ImageView'通過'-fx-image' CSS屬性顯示自己的圖像,但實際的繪畫是在其他地方完成的。它可能在'impl_'方法之一中,但沒有文檔我無法理解它們。我有一個代表圖像數據的「int」數組。這是我正在編寫的圖像編輯器;我可以更新圖像視圖以反映圖像數據更改的速度是一個問題,這就是爲什麼我不希望在兩種格式之間轉換的原因。 – sorbet