2017-07-29 2 views

Antwort

0

Sie können sich mit dem background Eigenschaft TextArea- suchen.

 new TextArea().setBackground(new Background(new BackgroundImage(myImage,BackgroundRepeat.NO_REPEAT,BackgroundRepeat.NO_REPEAT,BackgroundPosition.CENTER,BackgroundSize.DEFAULT))); 

Dieser Code setzt voraus, dass Sie diese Zeilen als ein Bild erhalten können.

Sie können weitere Informationen für Hintergründe finden Sie hier: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Background.html

Wenn Sie das Hintergrundbild möchten für Ihren aktuellen Bedarf dynamisch zu ändern und sein, haben Sie zwei Möglichkeiten.

  1. Verwenden Sie einfach ein Canvas für das gesamte Projekt. Male zuerst die Linien auf die Leinwand und dann die Buchstaben darauf. Dies könnte besser sein, da Sie Ihr Projekt so anpassen können, wie Sie es möchten, aber es würde ein bisschen mehr Code und Denken erfordern.

  2. Verwenden Sie den TextArea, und für das Hintergrundbild verwenden Sie einen Snapshot eines anderen Canvas. Mit einem Canvas können Sie die Linien nach Belieben zeichnen und dann unter Verwendung von Snapshot in ein Bild konvertieren.

WritableImage i = canvas.snapshot(new SnapshotParameters(), null);

Dann dieses Bild verwenden, können Sie das als Hintergrund der TextArea- verwenden, indem BackgroundImage verwenden.

+0

Ich denke, das ist eine sehr gute und innovative Idee, werde es definitiv versuchen. Aber ich brauche die Linien dynamisch in dem Sinne, dass sie sich in der Farbe ändern müssen und die Breite zwischen ihnen muss sich dynamisch ändern, wenn der Benutzer auf einige Knöpfe klickt. Kann ich ein Bild über Code erstellen, mit dem das Bild diese Änderungen widerspiegelt? –

+0

@IndronilChaudhuri Ja! Ich habe einige weitere Informationen dazu hinzugefügt, wie man das Hintergrundbild dynamisieren kann. – Jaboyc

0

Betrachten Linien auf einem Pane wie so zeichnen:

public class StageTest extends Application{ 

    private static final double WIDTH = 100, HEIGHT = 60; 

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

     stage.setTitle("Test Stage"); 
     Label label = new Label("Some text "); 
     label.setStyle("-fx-background-color:TRANSPARENT"); 
     label.setAlignment(Pos.CENTER); 
     label.setPrefSize(WIDTH, HEIGHT); 

     Pane linesPane = getPane(label); 
     StackPane root = new StackPane(linesPane, label); 

     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    private Pane getPane(Label label) { 

     Pane pane = new Pane(); 
     pane.setStyle("-fx-background-color:WHITE"); 
     Line blueLine = new Line(); 
     blueLine.setStroke(Color.BLUE); 
     blueLine.startXProperty().bind(label.layoutXProperty()); 
     blueLine.startYProperty().bind(label.layoutYProperty().add(label.heightProperty().multiply(.333))); 
     blueLine.endXProperty().bind(label.layoutXProperty().add(label.widthProperty())); 
     blueLine.endYProperty().bind(label.layoutYProperty().add(label.heightProperty().multiply(.333))); 

     Line redLine = new Line(); 
     redLine.setStroke(Color.RED); 
     redLine.startXProperty().bind(label.layoutXProperty()); 
     redLine.startYProperty().bind(label.layoutYProperty().add(label.heightProperty().multiply(.666))); 
     redLine.endXProperty().bind(label.layoutXProperty().add(label.widthProperty())); 
     redLine.endYProperty().bind(label.layoutYProperty().add(label.heightProperty().multiply(.666))); 

     pane.getChildren().addAll(blueLine, redLine); 

     return pane; 
    } 


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

Ich muss auch Text über die Zeilen eingeben und soweit ich jetzt Text auf Fenster in javafx eingeben ist nicht möglich. Korrigiere mich, wenn ich falsch liege. –

+0

Es ist möglich. Sie können Text in einem Bereich zeichnen, oder besser, wie in diesem Beispiel eine Komponente wie "Label" verwenden. Das 'Label' kann zu' Pane' hinzugefügt werden. – c0der