JavaFX Line Binding

Java20134

Bekanntes Mitglied
Guten Tag,

Ich habe eine kleine Frage hinsichtlich der Verbindung zweier Nodes mithilfe einer Linie. Ich habe das ganze schon mit der Methode bind() ausprobiert und die layoutProperty genutzt, aber die Linie wird nicht so erzeugt wie im Bild gezeigt. Ich nutze dazu das Layout GridPane. Hätte jemand eine Idee wie ich diese Bild in Java umsetzen könnte?

Vielen Dank
 

Anhänge

  • HTree.png
    HTree.png
    3,1 KB · Aufrufe: 20

Java20134

Bekanntes Mitglied
So sieht es zur Zeit aus, aber die Linien sind einfach zu weit oben. Die Schlussfolgerung ist, das man die Linien weiter nach unten zeichnet. Nun habe ich schon mit der Methode add() gearbeitet, aber es hat noch nicht funktioniert. So richtig klar warum, weiß ich aber nicht.

Mein Code sieht so aus:
Java:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.stage.Stage;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;

public class Main extends Application {
  
    @Override
    public void start(Stage primaryStage) {
        try {
            GridPane root = new GridPane();
            root.setPadding(new Insets(20));
//            root.setGridLinesVisible(true);
            Group group = new Group();
          
            Node right = new Node("RIGHT");
            Node left = new Node("LEFT");
            Node node = new Node("ROOT", left, right);
            group.getChildren().addAll(node.createLine(left), node.createLine(right));
            group.getChildren().add(node.createLine(left));
          
            root.add(left, 3, 0);
            root.add(right, 3, 1);
            root.add(node, 0, 3);
            root.getChildren().add(group);
          
            Scene scene = new Scene(root);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
          
            primaryStage.setScene(scene);
            primaryStage.show();
          
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
  
    public static void main(String[] args) {
        launch(args);
    }
}
Java:
import javafx.scene.control.Label;
import javafx.scene.shape.Line;

class Node extends Label {

    private String name;
  
    private Node nodeLeft, nodeRight;
  
    public Node(String name) {
        this(name, null, null);
    }
  
    public Node(String name, Node left, Node right){
        super(name);
        this.nodeLeft = left;
        this.nodeRight = right;
    }
  
    public String getName(){
        return name;
    }
  
    public Node getLeftNode(){
        return nodeLeft;
    }
  
    public Node getRightNode(){
        return nodeRight;
    }
  
    public boolean isLastNode(){
        return nodeLeft == null && nodeRight == null;
    }
  
    public Line createLine(Node node){
        if(node == null){
            return null;
        }
      
        Line line = new Line();
        line.setId("line");
      
        line.startXProperty().bind(node.layoutXProperty());
        line.startYProperty().bind(node.layoutYProperty()); //add(10);
      
        line.endXProperty().bind(this.layoutXProperty());
        line.endYProperty().bind(this.layoutYProperty());
      
        return line;
    }
  
    public String getNames(){
        String names = name+"(";
      
        if(nodeLeft != null && nodeRight != null){
            names += nodeLeft.getNames()+", ";
            names += nodeRight.getNames();
        } else if(nodeLeft != null){
            names += nodeLeft.getNames();
        } else if(nodeRight != null){
            names += nodeRight.getNames();
        }
      
        return names+")";
    }
}
 

Anhänge

  • Programm.png
    Programm.png
    6 KB · Aufrufe: 19

dzim

Top Contributor
Rein theoretisch. kann du nicht einfach LayoutX und Y nehmen, weil das auf die linke obere Ecke zeigt. So sieht auch dein Bild aus.
Stattdessen musst du zusätzlich noch die Breite und höhe (jeweils durch 2 dividiert) mit einbeziehen, damit du quasi in der Mitte des jeweiligen Nodes bist. Dann noch #toBack (falls es das dort gibt), damit die Line "hinter" dem Node ist und eventuell noch eine fixe Hintergrundfarbe pro Node - sonst sieht du die Linie "durchscheinen".
So stell ich mir das vor...
 

dzim

Top Contributor
Eben. LayoutX/Y ist die obere linke Ecke. Du musst das anpassen. Einfach nur auf LayoutX/Y binden ist zu wenig. (es gibt noch die #add/#substract,... Methoden, die du verwenden kannst)
 

Java20134

Bekanntes Mitglied
Ja das ist richtig. Das habe ich auch schon in meine Anfangsfrage gebracht. Aber ich habe dieses schon ausprobiert, doch es hat nicht wirklich funktioniert und ich weiß nicht warum!

Ich habe bspw. die Methode add(10) genutzt und es sah genauso aus, auch wenn ich die Variable erhöht habe. Ab wann sieht es denn bei euch gut aus?
 
Zuletzt bearbeitet:

dzim

Top Contributor
Verstehe. Muss ich erst ausprobieren, um da eine gute Aussage zu machen. Kann etwas dauern, da ich gerade zu viele Baustellen gleichzeitig offen habe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JavaFX Line Chart mit Farbverlauf/Gradient in Linie AWT, Swing, JavaFX & SWT 1
J JavaFX Shapes (Line) erweitern AWT, Swing, JavaFX & SWT 11
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
J JavaFX Länge von Line ermitteln AWT, Swing, JavaFX & SWT 9
N JavaFX Erweitern der Line(Shape)-Klasse AWT, Swing, JavaFX & SWT 1
M JavaFX Line Chart Markers AWT, Swing, JavaFX & SWT 0
A Swing JTextArea - Multi-Line-Editing AWT, Swing, JavaFX & SWT 2
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
F new Line in JTextarea AWT, Swing, JavaFX & SWT 15
B Line aus Listener? AWT, Swing, JavaFX & SWT 11
KrokoDiehl Swing Design-Frage: eigenes Line-Wrapping AWT, Swing, JavaFX & SWT 5
L JFreeChart - Line Shapes AWT, Swing, JavaFX & SWT 15
L JFreeChart StackedBar + Line-Chart kombinieren AWT, Swing, JavaFX & SWT 4
Landei GUI über command line ändern? AWT, Swing, JavaFX & SWT 6
S Line Component in SWING AWT, Swing, JavaFX & SWT 2
spross line break bei drawString() mit LineBreakMeasurer? AWT, Swing, JavaFX & SWT 4
R Horizontale Line AWT, Swing, JavaFX & SWT 7
K JavaFX - Binding & Co AWT, Swing, JavaFX & SWT 42
S UI Model Binding AWT, Swing, JavaFX & SWT 7
S JavaFX MVVM Prinzip und Binding AWT, Swing, JavaFX & SWT 23
B Java FX In control.TreeCell-Implementierung Binding erzeugen AWT, Swing, JavaFX & SWT 0
I ReadOnly-Property-Binding AWT, Swing, JavaFX & SWT 3
N JavaFX TreeItem: Value-Binding AWT, Swing, JavaFX & SWT 1
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
L JavaFX Horizontale Linie zur Scene binding AWT, Swing, JavaFX & SWT 3
N JavaFX Erste Versuche mit Data-Binding AWT, Swing, JavaFX & SWT 11
G JavaFX Binding von Objekten AWT, Swing, JavaFX & SWT 4
M Eclipse-Platform Combo-Binding für User-Einträge AWT, Swing, JavaFX & SWT 9
Eldorado Swing JGoodies Binding: Bindung lösen AWT, Swing, JavaFX & SWT 3
A SWT Eclipse JFace Binding TreeViewer AWT, Swing, JavaFX & SWT 4
M Swing Data Binding und PropertyChangeSupport AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
M Binding einer TextBox an eine Property AWT, Swing, JavaFX & SWT 2
C Binding eines EntityBean als SelectionInList in ComboBox AWT, Swing, JavaFX & SWT 7
M Beans Binding und SWT / Converter AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben