Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8158193

JavaFX Draws wrong on Retina displays

XMLWordPrintable

    • x86
    • other

      FULL PRODUCT VERSION :
      java version "1.8.0_92"
      Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
      Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      OS X El Capitan (10.11.5)
      Result of uname command:
      Darwin 15.5.0 Darwin Kernel Version 15.5.0: Tue Apr 19 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64 x86_64

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      MacBook Pro (Retina, 15-inch, Late 2013) and Thunderbolt Display

      A DESCRIPTION OF THE PROBLEM :
      I found 2 bugs in your bug tracker, but I can't comment in your system, so I report about a new bug. I have additional information about "steps to reproduce".
          1. JDK-8081714 JavaFX Draws wrong on Retina displays (this bug is closed, but I can reproduce the problem in the latest release version of Java)
          2. JDK-8087565 Scaling problem on OSX Retina.

      I have the following configuration of Displays (and this is important part to reproduce the bug):
      Resolution Of Build-in Retina Display: Default for display
      Resolution Of Thunderbolt Display: Default for display
      Arrangement: built-in retina display on the left side, Thunderbolt on the right side and Thunderbolt is main screen

      When a JavaFX window loads on a Retina screen (and a non-retina screen is attached), everything is scaled wrong. When you move the window to the non-retina screen, it scales correctly and then stays correct when moved back to the retina screen.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1) Config your displays:
          Arrangement of your Displays should be:
               - built-in retina display on the left side,
               - Thunderbolt on the right side
               - Thunderbolt is the main screen.
      2) In Netbeans 8.0.2 I created JavaFX FXML Application and added small change to open the app on built-in Retina Display.
      3) In class JavaFXApplication2 add 2 lines of code to open the app on the built-in retina Display:
              stage.setX(-700);
              stage.setY(500);
      4) Run the app

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The window should scale correctly on all displays.
      ACTUAL -
      The window is scaled wrong on built-in Retina display.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      public class JavaFXApplication2 extends Application {
          
          @Override
          public void start(Stage stage) throws Exception {

              // Open on the built-in Retina Display
              stage.setX(-700);
              stage.setY(500);
              
              Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
              
              Scene scene = new Scene(root);
              
              stage.setScene(scene);
              stage.show();
          }

          /**
           * @param args the command line arguments
           */
          public static void main(String[] args) {
              launch(args);
          }
          

      public class FXMLDocumentController implements Initializable {
          
          @FXML
          private Label label;
          
          @FXML
          private void handleButtonAction(ActionEvent event) {
              System.out.println("You clicked me!");
              label.setText("Hello World!");
          }
          
          @Override
          public void initialize(URL url, ResourceBundle rb) {
              // TODO
          }
          
      }

      <AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafxapplication2.FXMLDocumentController">
          <children>
              <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
              <Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" />
          </children>
      </AnchorPane>
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Open the window on Primary Screen

            aroy Abhijit Roy (Inactive)
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: