2016-04-07 9 views
0

Ich habe eine Szene mit einer Auswahlbox. Das Ziel ist es, alle verfügbaren Systemfonts in der Auswahlbox anzuzeigen. Ich glaube, ich bin auf dem richtigen Weg, da es mir bis jetzt gelungen ist, 1 in der Auswahlbox anzuzeigen, aber warum nur die 1?Auflistung aller verfügbaren Systemschriftarten in einer Auswahlbox

hier ist der Code -

import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.control.ChoiceBox; 
import javafx.scene.control.SingleSelectionModel; 
import javafx.scene.layout.Pane; 
import javafx.scene.text.Font; 

public class ChoiceBoxFonts extends Application 
{ 
    ObservableList<String> fontType; 
    ChoiceBox<String> fonts; 

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

    public void start(Stage primaryStage) 
    { 
     Pane root = new Pane(); 

     Font.getFamilies().stream().forEach(i ->{ 
      fontType = 
         FXCollections.observableArrayList(i 
          ); 
     }); 

     // New choicebox with observable arraylist fontType 
     fonts = new ChoiceBox<String> (fontType); 

     //SingleSelectionModel<String> selMod = fonts.getSelectionModel(); 

     root.getChildren().add(fonts); 
     Scene scene = new Scene(root,200,200); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 

    } 
} 

Das Ziel des Experiments ist es mit dieser Auswahl der Lage sein, eine Schrift aus dem Auswahlfeld zu wählen und die Schriftart eines Textobjekts ändern.

Gibt es auch eine bessere Benutzeroberfläche, um so etwas zu können? Wenn es eine Menge Schriften gibt, wird diese Auswahlbox sehr lang sein!

+0

"Setzen Sie für jedes Element von' Font.getFamilies() '' fontType' auf eine Liste, die nur dieses Element enthält ". Nachdem Sie all das getan haben, haben Sie eine Liste, die nur das letzte Element enthält. –

+0

HI, @James_D, habe ich das gemacht? - "für jedes Element von Font.getFamilies()" mit diesem Codezeile - 'Font.getFamilies() Strom() forEach (i -> { fonttype = FXCollections.observableArrayList (i );..' – Treeno1

+0

Leider für die Formatierung dieser Kommentare .. – Treeno1

Antwort

2

Sie müssen nur

fontType = FXCollections.observableArrayList(Font.getFamilies()); 

anstelle der Iteration Sie haben.

Wenn es eine Menge Schriften gibt, wird diese Auswahlbox sehr lang sein!

Ich würde wahrscheinlich eine ListView betrachten.

+0

das ist großartig, ich werde es mir anschauen – Treeno1

Verwandte Themen