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 .CanvasCanvasBorderPane

在里面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 回答