Since you have a simple test program that reproduces this bug, can you
please file a bug report?
http://bugreport.java.com/
Thanks.
-- Kevin
Chris Nahr wrote:
After some more experimentation I added some details and a screenshot
(from another test program) to this blog post:
http://news.kynosarges.org/2018/03/11/windows-gui-dpi-scaling-in-2018/
That's about a small test suite for DPI scaling, and it's where I
first saw this bug. Like the repro program below these test programs
are quite simple. The bug does not seem to occur in more complex
real-world programs, but it's reproducible when it does occur and also
affects labeled controls other than checkboxes (saw it in buttons).
As I wrote in the blog post: My present guess is that on DPI scales
that are not multiples of 100%, there is a small discrepancy in the
initial measurement between a label's required width and the width
provided by its container. In complex windows this gets eventually
fixed by subsequent layout passes, but in simple windows the error
persists and manifests as an ellipsis.
-- Christoph Nahr
On 2018-03-09 10:58, Chris Nahr wrote:
I've found a pretty serious issue with CheckBox labels on Windows DPI
levels other than 100% or 200%. Apparently the label mismeasures
itself during layout, so its text is cut off with an ellipsis.
I've attached a simple program to reproduce this. Running with
-Dglass.win.uiScale=100%, 125%, 150%, 175%, 200% cuts off all
CheckBox labels on any DPI scale between 100% and 200%. My
environment is Java SE 9.0.4 on Windows 10 Creators Update.
The only workaround I found was to set an explicit minimum width for
the CheckBox. In that case the incorrect self-measurement of the
label text is ignored and the full text displayed.
Best regards,
Christoph Nahr
----- Test Program -----
import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;
public class CheckBoxLabel extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) {
final HBox box = new HBox();
for (int i = 0; i < 4; i++)
box.getChildren().add(new CheckBox("Check"));
stage.setScene(new Scene(box));
stage.show();
}
}