2014-07-01 2 views
0

현재 JavaFX 프로젝트에서 작업 중이며 BorderPane GUI를 사용하고 있습니다. 성공적으로 메뉴와 아코디언을 만들었고, 내가 원하는 위치 (위와 오른쪽)에 추가했습니다.JavaFX Canvas 및 BorderPane

이제 캔버스를 확장하고 왼쪽에 추가하려는 클래스를 만들었지 만 작동하지 않는 것 같습니다.

내가 필요한 것은 앱이 메뉴 (오른쪽) (아코디언)에 확장 가능한 옵션과 나머지 공간 (왼쪽)에 이미지를 그릴 공간이 있어야한다는 것입니다.

누구나 밝힐 수 있습니까?

일부 코드 추가 중!

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); 
+0

캔버스가 작동하지 확장하는 클래스는? GUI에 추가 할 때 다른 것을 표시하지 않습니까? – APerson

+0

추가 할 때 아무 것도 표시되지 않습니다. – WiredDrummer

+0

당신이 말하는 행동을 보여주는 코드의 [작은 부분] (http://stackoverflow.com/help/mcve)을 게시 할 수 있습니까? – APerson

답변

1

캔버스의 너비 또는 높이가 설정되지 않았으며 내용이 없습니다. 당신이

public class PainelCanvas extends Canvas ... 

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

주 그래서 PainelCanvasCanvas을하고는 Canvas 당신이 당신의 BorderPane에 추가됩니다.

을하고 여기에 일부 내용을 추가 :

PainelCanvas 내부에서 다른 Canvas 만들

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()); 
+0

고마워요. 많은 사람! 그게 효과가 : D와 예, 바보. 나는 캔버스를 확장하고 여전히 새로운 캔버스 롤을 만들었습니다. – WiredDrummer

관련 문제