2016-05-25 19 views
1

gecrosspostet:Wie benutzt man TextFlow von FXML?

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

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

Ich versuche, Textflow aus Richtung FXML in der Steuerung während der App Ausführung (nicht bei der Inbetriebnahme), aber kein Text angezeigt wird zu verwenden.

Ich habe versucht:

textflow.getChildren.add(text); 

und auch:

textflow=new TextFlow(text); 

wo Text ist:

Text text=new Text("AAA"); 

ich in beiden Fällen nichts Textflow zeigt.

Gibt es einen anderen Container für die Verwendung von Rich Text mit FXML JavaFX App?

Sicherlich, wenn ich beide Fälle in nicht-FXML JavaFX-Anwendung versuche, funktioniert es beide.

Update:

Textflow in FXML sieht aus wie dieses

<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> 

-Controller

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")); 
    }  
} 

Hauptklasse

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); 
    } 
} 

Antwort

1

Stellen Sie sicher, dass Ihr Projekt in der IDE aktualisieren, nachdem Sie den Text-Knoten in der FXML Datei bearbeiten, auch sicherstellen, dass fx:id entspricht Ihren Objektname in der Controller-Klasse.

Gibt es einen anderen Container für die Verwendung mit Rich Text mit FXML JavaFX App?

Sie brauchen nicht einen anderen Container, nur Text Knoten innerhalb eines TextFlow sollte für Sie arbeiten.

(es wäre besser, wenn wir den Code sehen können, so dass wir versuchen können, das Problem genau zu identifizieren)

Hier ist ein Beispiel, das perfekt funktioniert:

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

Ich bin nicht Textknoten in der Steuerung erklärt so in FXML nur Textflow-Element deklariert ist. –

+0

können wir Ihre FXML-Datei sehen? –

+0

Ich habe meine Antwort bearbeitet, um ein Beispiel hinzuzufügen, versuchen Sie einfach, Ihr Problem zu identifizieren, wahrscheinlich fehlt Ihrer FXML-Datei etwas. versuchen Sie, eine identifizierbare Hintergrundfarbe für Ihren Textfluss zu setzen, um zu sehen, ob es angezeigt wird und ob seine maximale Größe nicht 0 ist –