2016-08-08 54 views
1

Ein Fenster in meiner GUI-Anwendung bestehen aus ähnlicher HBoxen mit gleichen Kontrollen im Innern. Ich wollte alles in einem Top-Layer-Bereich zentrieren (in diesem Fall - Anchor-Bereich).Rahmen JavaFX Anchor Pane Anker in CSS

Hier ist der Code:

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.VBox?> 

<?import javafx.scene.layout.HBox?> 
<?import javafx.scene.control.TextField?> 
<?import javafx.scene.control.Button?> 

<AnchorPane xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1"> 
    <VBox fx:id="modeWindowPane" alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
      <children> 
       <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Current" /> 
       <TextField prefWidth="100.0" /> 
       <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/> 
      </children> 
     </HBox> 
     <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
      <children> 
       <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Frequency" /> 
       <TextField prefWidth="100.0" /> 
       <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/> 
      </children> 
     </HBox> 
     <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
      <children> 
       <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Fade In" /> 
       <TextField prefWidth="100.0" /> 
       <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/> 
      </children> 
     </HBox> 
     <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
      <children> 
       <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Fade Out" /> 
       <TextField prefWidth="100.0" /> 
       <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/> 
      </children> 
     </HBox> 
     <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
      <children> 
       <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Offset" /> 
       <TextField prefWidth="100.0" /> 
       <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/> 
      </children> 
     </HBox> 
     <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
      <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Stimulation Time" /> 
      <TextField prefWidth="100.0" /> 
      <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/> 
     </HBox> 
    </VBox> 
</AnchorPane> 

können Sie sehen, dass in jedem HBox gibt es unten/links/rechts/oben Anker. Ich wollte sie irgendwie parametrisieren, setze Standard-HBox-Eigenschaften in meiner FXML-Datei über CSS zum Beispiel. Aber als ich anfing, nach mehr Informationen zu suchen (Tutorials, Oracles Referenzen, Stack), fand ich nichts Nützliches.

Kann mir jemand sagen, ob es eine Möglichkeit ist, würde ich nicht jede Komponente, zum Beispiel bearbeiten müssen, richten Sie sie in einer Weise, ich will? Außerdem muss es den MVC-Designmustern entsprechen.

+0

Die 'HBox'es haben einen' VBox' als ihre Eltern: es keinen Sinn 'AnchorPane' Eigenschaften für sie zu setzen macht. –

+0

@James_D, in FXML, wenn es Boxen im Anchor-Bereich gibt, ist es möglich, ihnen Eigenschaften hinzuzufügen. Sie sind eher eine Ausrichtung als die Eigenschaften eines direkten Bereichs. – notmyf4ulty

+0

Aber sie sind nicht (direkt) in der 'AnchorPane'. Sie sind in einer 'VBox'. –

Antwort

0

Werfen Sie einen Blick auf JavaFX CSS Reference Guide. Dort finden Sie die komplette Dokumentation aller CSS-Attribute. Soweit ich weiß, können Sie den Anker für ein Objekt nicht über CSS setzen.

Sie können es über den Controller machen. Geben Sie einfach allen Elementen eine fx:id und weisen Sie sie in Ihrem Controller zu. Dann können Sie über sie iterieren und die Anker (z. B. AnchorPane.setTopAnchor(Node, Value)) festlegen. Für weitere Informationen siehe AnchorPane.

+0

Danke, aber ich kenne diese Referenz. Ich habe es gelesen und ich fürchte, was Sie sagen, ist leider wahr. Ich bin mir bewusst, dass es über den Controller möglich ist. Aber ich wollte mein Projekt in einem MVC-Entwurfsmuster entwerfen und bin mir nicht sicher, ob das Bearbeiten des Layouts in Controller erlaubt ist. – notmyf4ulty