0

現在、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);
4

1 に答える 1

1

キャンバスには幅も高さも設定されておらず、コンテンツもありません。

あなたがすることに注意してください

public class PainelCanvas extends Canvas ...

PainelCanvas canvas = new PainelCanvas();
// ...
root.setLeft(canvas);

もそうPainelCanvas であり CanvasCanvasあなたがあなたに追加することですBorderPane

内部で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());
于 2014-07-01T11:08:43.460 に答える