8

Here's how my scene builder looks like:

enter image description here

and here's the GUI:

enter image description here

The standalone scene builder:

enter image description here

I just run the following source code from Java SDK demos:

package sample;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        Button btn = new Button();
        btn.setText("Say 'Hello World'!");
        StackPane root_ctn = new StackPane();
        root_ctn.getChildren().add(btn);
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent actionEvent) {
                System.out.println("Hello World!");
            }
        });
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root_ctn, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

The only place the text looks good is in the console.

View idea.log

Stephane
  • 4,978
  • 9
  • 51
  • 86

3 Answers3

7

I did not yet find out the solution, but I found an interesting pattern: On your Gluon Scene Builder screenshot, there is written Pgy Rtqlgev, where it should be New Project, and Qrgp Rtqlgev where it should be Open Project. Note that every letter is substituted by the after next letter in the alphabet!

The same applies to Say 'Hello World'!, which is "translated" to Lc{ 'Jgrrq Yqtrf'!. Note that the letter y is replaced by a {, which comes two positions after y in the ASCII table. Interestingly, the characters ' and ! stay the same..

The space each letter takes is still the space of the correct letter, as you can see in the following graphic with the correct text on the green background: enter image description here

Update: Is it possible that the font "Segoe UI" is missing or flawed on your system? Can you use that font for example in Word?

Update: I found two other questions of users facing the same problem. In both cases the problem seems to be related to the Segoe UI font:

Scene Builder Editor displaying weird characters

JavaFX Scene builder shows wired characters

user7291698
  • 1,972
  • 2
  • 15
  • 30
  • You're right! What could be an explanation? – Stephane Mar 29 '21 at 13:35
  • I'm still looking for an explanation. But I am pretty sure that it is NOT an encoding problem between cp1252 and utf-8, because these encodings have the affected letters at the same position. I updated my answer with another observation. – user7291698 Mar 29 '21 at 13:54
  • The Segoe UI font is working fine on my computer as I just tested it. – Stephane Mar 29 '21 at 19:27
  • That's strange, in other cases Segoe UI was the problem, see my updated answer. – user7291698 Mar 30 '21 at 09:29
  • 1
    thank you so much! it was related to the Segoe UI font! I removed the font family and installed a new one and it works now – Stephane Mar 30 '21 at 11:43
2

Installing Segoe UI was a huge red herring for me. Instead, I changed the version of javafx defined in build.gradle to 17.0.1 and upgraded JavaFX to 16

akasi311
  • 43
  • 5
  • This does not provide an answer to the question. Once you have sufficient [reputation](https://stackoverflow.com/help/whats-reputation) you will be able to [comment on any post](https://stackoverflow.com/help/privileges/comment); instead, [provide answers that don't require clarification from the asker](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i-do-instead). - [From Review](/review/late-answers/30795362) – Andres Gardiol Jan 14 '22 at 15:15
  • Upgrading from JavaFX 13 to 17 fixed the issue for me as well. I'm using JDK 17. – Ryan Michela Mar 02 '23 at 20:53
0

I have also encountered this problem and after reading many forums I think I have a possible explanation and solution. The problem seems to be related to Mac users and Segoe UI;

I am guessing that because the font is used in Microsoft products, Macs are unable to render the font, even downloaded versions have not worked.

The simplest fix, which has worked for me so far, is to include style="-fx-font-family: serif" in the root node or add it in the controller or add

.root{
  -fx-font-family: serif
}

to your CSS. This works for any font in your system.

M123
  • 1,203
  • 4
  • 14
  • 31
user1
  • 1