簡體   English   中英

JavaFX Canvas和BorderPane

[英]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並且是您添加到BorderPaneCanvas

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM