首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX画布和BorderPane

JavaFX画布和BorderPane
EN

Stack Overflow用户
提问于 2014-07-01 02:12:09
回答 1查看 1.3K关注 0票数 0

我目前正在用JavaFX做一个项目,我正在用BorderPane做图形用户界面。我已经成功地创建了菜单和手风琴,并将它们添加到我想要的位置(顶部和右边)。

现在,我已经创建了一个扩展画布的类,希望将它添加到左侧,但它似乎不起作用。

我需要的是应用程序有一个菜单,可扩展的选项在右边(手风琴)和空间,以绘制图像的剩余空间(左)。

有人能给点线索吗?

添加一些代码!

代码语言:javascript
复制
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中。

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

发布于 2014-07-01 11:08:43

您的画布没有宽度或高度设置,也没有内容。

注意,你知道

代码语言:javascript
复制
public class PainelCanvas extends Canvas ...

代码语言:javascript
复制
PainelCanvas canvas = new PainelCanvas();
// ...
root.setLeft(canvas);

因此,PainelCanvas 是一个 Canvas,是添加到BorderPane中的Canvas

PainelCanvas内部创建另一个Canvas

代码语言:javascript
复制
canvas = new Canvas(400, 400);

并在其中添加一些内容:

代码语言:javascript
复制
GraphicsContext gc = canvas.getGraphicsContext2D();
// ...
gc.fillText(...);

但是这个画布从来没有添加到BorderPane中。

如果您真的想要扩展Canvas (并不是真正推荐的),您应该这样做

代码语言:javascript
复制
public class PainelCanvas extends Canvas implements DesenhoCanvas {
    public PainelCanvas() {
        super(400, 400);
        GraphicsContext gc = this.getGraphicsContext2D();
        desenhar(gc);
    }
    // desenhar(...) method as before
}

但是,我不喜欢对Node类进行子类分类,除非是真正必要的(“支持聚合而不是继承”)。

推荐的解决方案:

代码语言:javascript
复制
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 ;
    }
}

然后:

代码语言:javascript
复制
root.setLeft(canvas.getView());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24501544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档