Stage.Min/MaxWidth/Height don't scale

Kevin Rushforth kevin.rushforth at oracle.com
Wed Nov 18 13:18:12 UTC 2015


Hi Chris,

Application developers can file bugs here:

http://bugs.java.com/

Thanks.

-- Kevin


Chris Nahr wrote:
> On Windows the minimum & maximum size properties of Stage don't scale 
> to the current DPI settings, unlike all other drawing coordinates. The 
> explicit size properties (setWidth/setHeight) do scale but 
> setMinWidth, setMaxWidth, setMinHeight & setMaxHeight were apparently 
> overlooked. Any values passed to them are interpreted as unscaled pixels.
>
> Below I've added a short sample program to demonstrate the issue. 
> Minimum size should just cover the drawn rectangle plus margins, and 
> maximum size should be twice as big. But running at 200% DPI the 
> *maximum* size will just cover the rectangle whereas the minimum size 
> will show only a fraction of the rectangle.
>
> (I'd file a bug report but my JIRA account didn't transition to the 
> new bug tracking system, probably because I'm not an OpenJDK 
> contributor.)
>
> -- Chris
>
> import javafx.application.Application;
> import javafx.scene.Scene;
> import javafx.scene.layout.StackPane;
> import javafx.scene.shape.Rectangle;
> import javafx.stage.Stage;
>
> public class StageSizeTest extends Application {
>
>     @Override
>     public void start(Stage primaryStage) {
>
>         // draw scene-filling rectangle with margin
>         final int margin = 10, size = 200;
>         Rectangle rect = new Rectangle(margin, margin, size, size);
>         StackPane root = new StackPane(rect);
>         final int sceneSize = size + 2 * margin;
>         Scene scene = new Scene(root, sceneSize, sceneSize);
>
>         // add extra margin for non-client area
>         final int stageSize = sceneSize + 3 * margin;
>         primaryStage.setMinWidth(stageSize);
>         primaryStage.setMinHeight(stageSize);
>         primaryStage.setMaxWidth(2 * stageSize);
>         primaryStage.setMaxHeight(2 * stageSize);
>
>         primaryStage.setTitle("Stage Size Test");
>         primaryStage.setScene(scene);
>         primaryStage.show();
>     }
>
>     public static void main(String[] args) {
>         launch(args);
>     }
> }


More information about the openjfx-dev mailing list