[英]JavaFX Canvas and BorderPane
我目前正在使用JavaFX開發一個項目,並且正在使用BorderPane做GUI。 我已經成功創建了一個菜單和手風琴,並將它們添加到我想要的位置(頂部和右側)。
現在,我創建了一個擴展Canvas的類,並希望將其添加到左側,但似乎無法正常工作。
我需要的是該應用程序具有菜單,右側的可擴展選項(手風琴)和在其余空間上繪制圖像的空間(左側)。
誰能闡明一些想法?
添加一些代碼!
public class PainelCanvas extends Canvas implements DesenhoCanvas {
//ATRIBUTOS
Canvas canvas;
//CONSTRUTOR
public PainelCanvas() {
canvas = new Canvas(400, 400);
GraphicsContext gc = canvas.getGraphicsContext2D();
desenhar(gc);
}
@Override
public void desenhar(GraphicsContext gc) {
gc.setFill(Color.GREEN);
gc.fillText("adsads", 20, 30);
}
}
在我的主類中,我將創建一個PainelCanvas對象,並將其添加到我的BorderPane中。
BorderPane root = new BorderPane();
PainelMenu menu = new PainelMenu();
PainelCanvas canvas = new PainelCanvas();
PainelAccordion painel = new PainelAccordion();
//Definir localização dos vários elementos gráficos
root.setTop(menu);
root.setLeft(canvas);
root.setRight(painel);
您的畫布沒有設置寬度或高度,也沒有內容。
請注意,您確實
public class PainelCanvas extends Canvas ...
和
PainelCanvas canvas = new PainelCanvas();
// ...
root.setLeft(canvas);
因此PainelCanvas
是 Canvas
並且是您添加到BorderPane
的Canvas
。
在PainelCanvas
內,您可以創建另一個Canvas
:
canvas = new Canvas(400, 400);
並添加一些內容:
GraphicsContext gc = canvas.getGraphicsContext2D();
// ...
gc.fillText(...);
但是該畫布從未添加到BorderPane
。
如果您真的想擴展Canvas
(不推薦),則應該這樣做
public class PainelCanvas extends Canvas implements DesenhoCanvas {
public PainelCanvas() {
super(400, 400);
GraphicsContext gc = this.getGraphicsContext2D();
desenhar(gc);
}
// desenhar(...) method as before
}
但是,除非確實有必要,否則我不希望對Node
類進行子類化(“有利於聚合而不是繼承”)。
推薦的解決方案:
public class PainelCanvas implements DesenhoCanvas {
private Canvas canvas ;
public PainelCanvas() {
canvas = new Canvas(400, 400);
GraphicsContext gc = canvas.getGraphicsContext2D();
desenhar(gc);
}
// desenhar(...) as before...
public Node getView() {
return canvas ;
}
}
接着:
root.setLeft(canvas.getView());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.