2016-05-25 10 views
1

Crossposted:Как использовать TextFlow от FXML?

https://community.oracle.com/message/13853226#13853226

http://www.coderanch.com/t/666101/JavaFX/java/TextFlow-FXML#3105251

Я пытаюсь использовать TextFlow исходя из FXML контроллера во время выполнения приложения (не при запуске), но текст не отображается.

Я пробовал:

textflow.getChildren.add(text); 

, а также:

textflow=new TextFlow(text); 

где текст:

Text text=new Text("AAA"); 

I оба случая TextFlow ничего не показывает.

Есть ли другой контейнер для использования с богатым текстом с использованием приложения FXML JavaFX?

Конечно, если я пытаюсь выполнить оба случая в приложении, отличном от FXML JavaFX, он работает с ними обоими.

Update:

TextFlow в FXML выглядит следующим образом

<TextFlow fx:id="txtFlow" layoutX="20.0" layoutY="230.0" prefHeight="70.0" prefWidth="430.0" style="-fx-border-color: ADD9E6;" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="140.0"> 

FXML

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.text.TextFlow?> 

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" fx:controller="testfxmlpackage.FXMLDocumentController"> 
    <children> 
     <TextFlow fx:id="txtF" layoutX="22.0" layoutY="234.0" prefHeight="74.0" prefWidth="433.0" style="-fx-border-color: ADD8E6;" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="22.0" AnchorPane.rightAnchor="142.0" />    
    </children> 
</AnchorPane> 

Контроллер

package testfxmlpackage; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.text.Text; 
import javafx.scene.text.TextFlow; 

public class FXMLDocumentController implements Initializable { 

    @FXML TextFlow txtF; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
    txtF=new TextFlow(new Text("aaa")); 
    txtF.getChildren().add(new Text("aaa")); 
    }  
} 

Класс Main

package testfxmlpackage; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class TestFXMLPackage extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 

    Scene scene = new Scene(root); 

    stage.setScene(scene); 
    stage.show(); 
    } 

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

ответ

1

Убедитесь, что вы обновить свой проект в IDE после редактирования узла Text в файле FXML, также убедитесь, что fx:id соответствует имени объекта в классе контроллера.

Есть ли другой контейнер для использования с богатым текстом, используя FXML JavaFX приложение?

Вам не нужен еще один контейнер, только Text узлы внутри TextFlow должны работать для вас.

(было бы лучше, если мы можем видеть код, так что мы можем попытаться определить точную проблему)

Вот пример, который работает отлично:

TextFlowExample.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.geometry.*?> 
<?import javafx.scene.text.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.layout.AnchorPane?> 

<VBox fx:id="container" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <TextFlow fx:id="myTextFlow" /> 
    </children> 
    <padding> 
     <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> 
    </padding> 
</VBox> 

MainApp.java

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.application.Application; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.fxml.Initializable; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Text; 
import javafx.scene.text.TextFlow; 
import javafx.stage.Stage; 

public class MainApp extends Application implements Initializable { 

    @FXML TextFlow myTextFlow; 
    @FXML VBox container; 

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

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     FXMLLoader loader = new FXMLLoader(); 
     loader.setLocation(getClass().getResource("TextFlowExample.fxml")); 
     loader.setController(this); 
     Parent parent = loader.load(); 
     Scene scene = new Scene(parent); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     Text text = new Text("Now this is a text node"); 
     myTextFlow.getChildren().add(text); 
    } 
} 
+0

Я не объявляю текстовый узел в контроллере, поэтому в FXML объявлен только элемент TextFlow. –

+0

можно ли увидеть ваш файл FXML? –

+0

Я отредактировал свой ответ, чтобы включить пример, просто попытайтесь определить вашу проблему, возможно, ваш файл FXML чего-то не хватает. попытайтесь установить идентификационный цвет фона для вашего текстового потока, чтобы увидеть, отображается ли он, и если его максимальный размер не равен 0 –