2013-04-02 4 views
0

현재 응용 프로그램에서는 AnchorPane을 내용으로하는 ScrollPane을 만들었습니다. 사용자의 작업에 따라이 AnchorPane은 Canvas를 사용하는 이미지로 채워질 것입니다 (이미지에 대한 추가 정보를 그리는 데 필요함).뷰포트 외부의 객체를 표시하는 JavaFX ScrollPane

그러나 ScrollPane을 통해 스크롤하면 ViewPort 안에 있지 않을 때에도 모든 하위 이미지가 다시 칠되고 있습니다. 다른 누구에게도이 문제 또는 해결책이 있습니까?

스크린 샷 : 스크롤의 https://dl.dropboxusercontent.com/u/51537629/images%20drawn%20outside%20of%20viewport.png

초기화 : 뷰에 모든 아이콘의

private VBox createIconPane(TaskInformation tinfo) { 
    VBox vbox = new VBox(); 
    Canvas canvas = new Canvas(75, 75); 
    GraphicsContext gc = canvas.getGraphicsContext2D(); 
    Image im; 
    if (tinfo.getCurrent() != null) { 
     if (tinfo.isCurrentStop()) { 
      String status = utilities.getCurrentTaskVersion(tinfo.getTask()).getStatus(); 
      if (status.equals("finished")) { 
       im = new Image(this.getClass().getClassLoader().getResourceAsStream("dna-current.png")); 
      } else if (status.equals("failed")) { 
       im = new Image(this.getClass().getClassLoader().getResourceAsStream("dna-failed.png")); 
      } else { 
       im = new Image(this.getClass().getClassLoader().getResourceAsStream("dna-processing.png")); 
      } 
     } else { 
      im = new Image(this.getClass().getClassLoader().getResourceAsStream("dna-current.png")); 
     } 
    } else { 
     im = new Image(this.getClass().getClassLoader().getResourceAsStream("dna-excluded.png")); 
    } 
    gc.drawImage(im, 5, 5); 
    gc.setStroke(Color.GREEN); 
    gc.strokeText(tinfo.getFinished() + "", 59, 15); 
    gc.setStroke(Color.RED); 
    gc.strokeText(tinfo.getFailed() + "", 59, 28); 
    gc.setStroke(Color.BLUE); 
    gc.strokeText(tinfo.getProcessing() + "", 59, 41); 
    Label namelabel = new Label(tinfo.getTask().getName()); 
    namelabel.setLayoutX(0); 
    namelabel.setLayoutY(68); 
    vbox.getChildren().addAll(canvas, 
    return vbox; 
} 

추가 :

private void createChildIcon(TaskInformation tinfo) { 
    VBox taskicon = createIconPane(tinfo); 
    taskicon.setLayoutX((tinfo.getTask().getLevel() - 6)/2 * 120 + 5); 
    if (tinfo.getTask().getLevel() <= levelLastAddedTask && maxYCoor != 5) { 
     maxYCoor += 95; 
    } 
    levelLastAddedTask = tinfo.getTask().getLevel(); 
    taskicon.setLayoutY(maxYCoor); 
    iconPane.getChildren().add(taskicon); 
    for (int count = 0; count < tinfo.getChildren().size(); count++) { 
     createChildIcon(tinfo.getChildren().get(count)); 
    } 
} 
아이콘의

iconPane = new AnchorPane(); 
iconPane.setStyle("-fx-background-color: white; -fx-border-color: gray;"); 
iconPane.setMinHeight(546); 
iconPane.setMinWidth(814); 
scrollpane = new ScrollPane(); 
scrollpane.setContent(iconPane); 
scrollpane.setVisible(false);   
AnchorPane.setTopAnchor(scrollpane, 13.0); 
AnchorPane.setBottomAnchor(scrollpane, 13.0); 
AnchorPane.setLeftAnchor(scrollpane, 13.0); 
AnchorPane.setRightAnchor(scrollpane, 13.0); 

창조 0

JDK : 2.2.21

후 우리가 윈도우 문제가 될 수 있어야한다는 것을 발견 내 동료 중 하나 몇 가지 테스트 : 7는 있지만 이전 버전뿐만 아니라

JFX로 컴파일 할 수 있습니다. Linux에서는 완벽하게 작동하지만 Windows에서는 작동하지 않습니다.

+0

아마도 버그 일 수 있습니다. 그러나 나는 그런 것을 본 적이 없다. JDK 버전, JFX 버전 (아는 한 버전, 빌드)을 제공하고 테스트 케이스를 제공 할 수 있습니까? - 문제를보고 시도 할 수있는 코드 조각. 감사. –

답변

1

VM 옵션 "-Dprism.order = j2d"를 추가하십시오. 이는 하드웨어 가속 그래픽 파이프 라인을 소프트웨어 파이프 라인으로 대체하기 때문에 해결 방법이 아닌 해결 방법입니다. 이것이 작동한다면 VM 옵션 "-Dprism.verbose = true"를 추가하면 어떤 하드웨어에 문제가 있는지 알 수 있습니다.

JavaFX Issue Tracker에 버그를 추가했습니다 : https://javafx-jira.kenai.com/browse/RT-31044.

관련 문제