2013-04-02 3 views
0

В моем текущем приложении я создал ScrollPane с AnchorPane как содержимое. В зависимости от действий пользователя эта AnchorPane будет заполнена более или менее изображениями, для которых я использую Canvas (необходимый для получения дополнительной информации об изображении).Панель прокрутки JavaFX, показывающая объекты за пределами области просмотра

Однако, когда я просматриваю ScrollPane, все дочерние изображения по-прежнему перекрашиваются, даже если они не находятся внутри ViewPort. У кого-нибудь еще была эта проблема или решение для этого?

скриншот: https://dl.dropboxusercontent.com/u/51537629/images%20drawn%20outside%20of%20viewport.png

Инициализация ScrollPane:

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

Создание иконы:

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)); 
    } 
} 

JDK: 7, но он может быть собран в более старых версиях, а

JFX: 2.2.21

После некоторого тестирования с одним из моих коллег, мы обнаружили, что это должно быть проблемой для Windows. Он отлично работает на 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.

Смежные вопросы