Wie richten Sie eine Schaltfläche direkt in JavaFX?
Wie kann ich die "richtige" (zweite) Schaltfläche in diesem Fenster werden rechts ausgerichtet?
class HelloApp extends Application {
override def start(primaryStage: Stage): Unit = {
val root = new FlowPane(Orientation.VERTICAL) {
setPadding(new Insets(10, 10, 10, 10))
setVgap(10)
getChildren.add(new Button("Left"))
getChildren.add(new Button("Right") { setAlignment(Pos.CENTER_RIGHT) }) //this doesn't seem to be working
}
primaryStage.setScene(new Scene(root, 400, 400))
primaryStage.show()
}
}
Dank
InformationsquelleAutor devoured elysium | 2016-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beispiellösung
Hier ist ein Beispiel, das bietet eine Linksbündig und Rechtsbündig button:
Diese Lösung wurde in Java-code statt Scala, da ich nicht Programmieren in Scala. Aber es sollte leicht zu vermitteln an entsprechende Scala-code.
Erklärung
Ich entschied mich für eine HBox, weil, für mich, das war das häufigste Beispiel, den Wunsch, etwas zu haben, was Links und rechts ausgerichtet. Aber es gibt kein wirkliches richtig oder falsch und die mit anderen layout-Typen wie AnchorPane, um das gewünschte Ergebnis erzielen, können auch Sie eine gute Lösung.
Erreichen der richtigen Ausrichtung mit einem HBox ich eine variable einfügen, die Abstände Bereich zwischen dem linken Knoten ausgerichtet und den rechten Knoten ausgerichtet, die schiebt alle rechten Knoten ausgerichtet auf der rechten Seite. Ich fügte hinzu, verschiedene zusätzliche Einschränkungen auf min Größen, so dass der gesamte text in der Schaltfläche immer sichtbar ist und so, dass es immer eine kleine Lücke zwischen dem linken und rechten Knoten ausgerichtet, wenn Sie das Fenster kleiner.
Auf setAlignment()
Der Grund, warum die
- Taste.setAlignment()
Methode nicht für Sie arbeiten wird ist, dass es nicht das tun, was Sie denken, es zu tun. setAlignment ist für die Ausrichtung des Textes innerhalb der Schaltfläche, wie die Schaltfläche wächst Vergangenheit Ihre bevorzugte Breite. Finden Sie die setAlignment javadoc:Den Standard-max Breite für eine Taste ist seine bevorzugte Breite, so dass die Taste nicht in der Größe wachsen, es sei denn, Sie explizit festlegen, seine maximale Breite mit
button.setMaxWidth(Double.MAX_VALUE)
. Dies bedeutet, dass standardmäßig die Methode setAlignment wird gar nichts tun, denn es wird kein zusätzlicher Speicherplatz verfügbar, innerhalb der Schaltfläche für die Taste, die internen Inhalte ausgerichtet werden innen.Weiter verstehen, Lesen: Tipps zum ändern der Größe und Ausrichten von Knoten (sehr zu empfehlen).
Bei der Angleichung, für andere Fenstertypen
Gibt es zahlreiche andere layout-Bereiche (wie AnchorPane, GridPane, etc), die verwendet werden könnten, um zu erreichen ähnliches layout. Die verschiedenen layout-Bereiche haben unterschiedliche Funktionen und APIs. Dies bedeutet, dass die Art und Weise Sie befassen sich mit gängigen layout-Fragen wie Ausrichtung unterscheidet sich zwischen Ihnen (dazu müssen Sie Ihre API zu verstehen, wie es zu tun für jeden layout-Bereich geben).
Wenn Sie Steuern möchten Ausrichtung im layout Bereich haben Sie entweder die Verwendung eines Abstandhalters wie ich oben gezeigt, oder legen Sie zusätzliche Bereich level-constraints, die auf den Knoten. Beispiele der Einstellung der Randbedingungen auf den verschiedenen layout-Typen sind die folgenden Methoden (einige von denen sind statisch):
Die oben genannten sind nur Beispiele, es gibt viele weitere Möglichkeiten zum ausrichten von Knoten, beispielsweise indem die oben, Mitte oder rechts Eigenschaften eines BorderPane.
Warum FlowPane ist nicht wirklich gut für das, was Sie versuchen zu erreichen
Können Sie mit der rechten ausrichten von Knoten in einem FlowPane durch die Einstellung der FlowPane Ausrichtung auf die vertikale und die Berufung flowPane.setColumnHalignment(Pos.CENTER_RIGHT). Jedoch, dass "rechts" richtet alles, was in der FlowPane, nicht eine Sache auf der linken Seite, und eine andere Sache auf der rechten Seite, das ist, was Sie zu tun versuchen.
InformationsquelleAutor jewelsea
Ich bin mir nicht sicher, FlowPane wirklich unterstützt. Mit GridPane können Sie erstellen, die zwei Spalten und verbrauchen alle Speicherplatz mit der ersten Spalte. So etwas wie dieses:
InformationsquelleAutor Bob Flannigon