2017-10-24 5 views
0

In meiner JavaFX-App werden einige Knoten in der Vorschau angezeigt, sind jedoch nicht auswählbar und werden nicht in der Hierarchie angezeigt. SceneBuilder unmarkierbar Beispiel:SceneBuilder-Knoten nicht auswählbar

SceneBuilder untargetable example

In diesem Beispiel ist der „Vorname“ Spalte nicht anzielbare ist und zeigt nicht in der Hierarchie, obwohl sie den gleichen Code wie der „Last Name“ Spalte. Gleiches gilt für die Schaltfläche "Neu ..." und "Bearbeiten ...".

Meine SceneBuilder-Version ist 8.3.0. Ich verwende Eclipse und ich bearbeite die FXL durch FXGraph, wenn ich das manuell tun muss.

FXML:

<AnchorPane xmlns:fx="http://javafx.com/fxml" fx:controller="de.is2.address.view.PersonOverviewController" prefHeight="300.0" prefWidth="600.0"> 

<children> 
    <SplitPane dividerPositions="0.29797979797979796" layoutX="130.0" layoutY="70.0" prefHeight="300.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <items> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> 
       <children> 
        <TableView fx:id="personTable" layoutX="-25.0" layoutY="-21.0" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
         <columns> 
          <TableColumn fx:id="firstNameColumn" prefWidth="75.0" text="First Name"/> 
         </columns> 
         <columns> 
          <TableColumn fx:id="lastNameColumn" prefWidth="75.0" text="Last Name"/> 
         </columns> 
         <columnResizePolicy><TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /></columnResizePolicy> 
        </TableView> 
       </children> 
      </AnchorPane> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> 
       <children> 
        <Label layoutX="54.0" layoutY="37.0" text="Person Details" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0"/> 
        <GridPane layoutX="67.0" layoutY="78.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="30.0"> 
         <columnConstraints> 
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> 
         </columnConstraints> 
         <columnConstraints> 
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/> 
         </columnConstraints> 
         <rowConstraints> 
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> 
         </rowConstraints> 
         <rowConstraints> 
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> 
         </rowConstraints> 
         <rowConstraints> 
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> 
         </rowConstraints> 
         <rowConstraints> 
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> 
         </rowConstraints> 
         <rowConstraints> 
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> 
         </rowConstraints> 
         <rowConstraints> 
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/> 
         </rowConstraints> 
         <children> 
          <Label text="First Name"/> 
          <Label text="Last Name" GridPane.rowIndex="1"/> 
          <Label text="Street" GridPane.rowIndex="2"/> 
          <Label text="City" GridPane.rowIndex="3"/> 
          <Label text="Postal Code" GridPane.rowIndex="4"/> 
          <Label text="Birthday" GridPane.rowIndex="5"/> 
          <Label fx:id="firstNameLabel" text="Label" GridPane.columnIndex="1"/> 
          <Label fx:id="lastNameLabel" text="Label" GridPane.columnIndex="1" GridPane.rowIndex="1"/> 
          <Label fx:id="streetLabel" text="Label" GridPane.columnIndex="1" GridPane.rowIndex="2"/> 
          <Label fx:id="cityLabel" text="Label" GridPane.columnIndex="1" GridPane.rowIndex="3"/> 
          <Label fx:id="postalCodeLabel" text="Label" GridPane.columnIndex="1" GridPane.rowIndex="4"/> 
          <Label fx:id="birthdayLabel" text="Label" GridPane.columnIndex="1" GridPane.rowIndex="5"/> 
         </children> 
        </GridPane> 
        <ButtonBar layoutX="203.0" layoutY="244.0" prefHeight="39.0" prefWidth="265.0" AnchorPane.bottomAnchor="5.0" AnchorPane.rightAnchor="10.0"> 
         <buttons> 
          <Button mnemonicParsing="false" text="New..."/> 
         </buttons> 
         <buttons> 
          <Button mnemonicParsing="false" text="Edit..."/> 
         </buttons> 
         <buttons> 
          <Button mnemonicParsing="false" onAction="#handleDeletePerson" text="Delete"/> 
         </buttons> 
        </ButtonBar> 
       </children> 
      </AnchorPane> 
     </items> 
    </SplitPane> 
</children> 

+1

Welche SceneBuilder-Version verwenden Sie? Das GridPane zeigt 61 Zeilen und 13 Spalten? Hast du eigentlich alle? Siehst du das GridPane, wenn du es auswählst? –

+0

Sie haben eine Spalte namens 'Nachname', aber keine Spalte 'Vorname'. Ist die Spalte 'Nachname' auswählbar? – Kerry

+0

@ JoséPereda Meine SceneBuilder Version ist 8.3.0. Die 61 Zeilen und 13 Spalten waren seltsamer, ungenutzter Code, ich bin mir nicht sicher, wo sie herkamen, vielleicht, dass ich auch FXGraph benutze, verursachte dort eine seltsame Interaktion. Ansonsten funktioniert die Gridpane gut. – Julius

Antwort

1

An mehreren Stellen in Ihrem FXML, werden Sie wiederholt den Inhalt der gleichen Tags wie dieses (Snippet) definieren:

<columns> 
    <TableColumn fx:id="firstNameColumn" prefWidth="75.0" text="First Name"/> 
</columns> 
<columns> <!-- repetition!! --> 
    <TableColumn fx:id="lastNameColumn" prefWidth="75.0" text="Last Name"/> 
</columns> 

Dies ist falsch - Sie sollten das Tag einmal öffnen, dann alle Kinder angeben und es dann einmal schließen. Sie tun es richtig für die GridPane Kinder, zum Beispiel:

<GridPane layoutX="67.0" layoutY="78.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="30.0"> 
    <children> 
     <Label text="First Name"/> 
     <Label text="Last Name" GridPane.rowIndex="1"/> 
     <Label text="Street" GridPane.rowIndex="2"/> 
     ... 
    </children> 
</GridPane> 

Aus meiner Erfahrung JavaFx selbst übernimmt (wie in, zeigt wie erwartet) einige sehr interessante FXML Konstrukte, aber SceneBuilder neigt eher konservativ und nur zu sein akzeptiert die typischen Konstrukte. Dies ist wahrscheinlich der Grund, warum die Vorschau gut aussieht, aber die Hierarchie unvollständig ist. Wenn Sie Ihre FXML von Hand bearbeiten, sehen Sie sich zuerst an, wie SceneBuilder die gleichen Strukturen erstellt - so wie sie es erwartet.

Wenn Sie die Verschachtelung überall zu korrigieren, die resultierende FXML ist:

<AnchorPane xmlns:fx="http://javafx.com/fxml" fx:controller="de.is2.address.view.PersonOverviewController" 
    prefHeight="300.0" prefWidth="600.0"> 

    <children> 
     <SplitPane dividerPositions="0.29797979797979796" layoutX="130.0" layoutY="70.0" prefHeight="300.0" 
      prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" 
      AnchorPane.topAnchor="0.0"> 
      <items> 
       <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> 
        <children> 
         <TableView fx:id="personTable" layoutX="-25.0" layoutY="-21.0" prefHeight="200.0" 
          prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" 
          AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
          <columns> 
           <TableColumn fx:id="firstNameColumn" prefWidth="75.0" text="First Name" /> 
           <TableColumn fx:id="lastNameColumn" prefWidth="75.0" text="Last Name" /> 
          </columns> 
          <columnResizePolicy> 
           <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> 
          </columnResizePolicy> 
         </TableView> 
        </children> 
       </AnchorPane> 
       <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> 
        <children> 
         <Label layoutX="54.0" layoutY="37.0" text="Person Details" AnchorPane.leftAnchor="5.0" 
          AnchorPane.topAnchor="5.0" /> 
         <GridPane layoutX="67.0" layoutY="78.0" AnchorPane.leftAnchor="5.0" 
          AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="30.0"> 
          <columnConstraints> 
           <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
           <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
          </columnConstraints> 
          <rowConstraints> 
           <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
           <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
           <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
           <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
           <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
           <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
          </rowConstraints> 
          <children> 
           <Label text="First Name" /> 
           <Label text="Last Name" GridPane.rowIndex="1" /> 
           <Label text="Street" GridPane.rowIndex="2" /> 
           <Label text="City" GridPane.rowIndex="3" /> 
           <Label text="Postal Code" GridPane.rowIndex="4" /> 
           <Label text="Birthday" GridPane.rowIndex="5" /> 
           <Label fx:id="firstNameLabel" text="Label" GridPane.columnIndex="1" /> 
           <Label fx:id="lastNameLabel" text="Label" GridPane.columnIndex="1" 
            GridPane.rowIndex="1" /> 
           <Label fx:id="streetLabel" text="Label" GridPane.columnIndex="1" 
            GridPane.rowIndex="2" /> 
           <Label fx:id="cityLabel" text="Label" GridPane.columnIndex="1" GridPane.rowIndex="3" /> 
           <Label fx:id="postalCodeLabel" text="Label" GridPane.columnIndex="1" 
            GridPane.rowIndex="4" /> 
           <Label fx:id="birthdayLabel" text="Label" GridPane.columnIndex="1" 
            GridPane.rowIndex="5" /> 
          </children> 
         </GridPane> 
         <ButtonBar layoutX="203.0" layoutY="244.0" prefHeight="39.0" prefWidth="265.0" 
          AnchorPane.bottomAnchor="5.0" AnchorPane.rightAnchor="10.0"> 
          <buttons> 
           <Button mnemonicParsing="false" text="New..." /> 
           <Button mnemonicParsing="false" text="Edit..." /> 
           <Button mnemonicParsing="false" onAction="#handleDeletePerson" text="Delete" /> 
          </buttons> 
         </ButtonBar> 
        </children> 
       </AnchorPane> 
      </items> 
     </SplitPane> 
    </children> 
</AnchorPane> 

Das gibt mir das gewünschte Ergebnis in SceneBuilder 8.4.1: Alle Tabellenspalten und alle Tasten in der ButtonBar werden angezeigt und wahlweise in der Hierarchie.

Verwandte Themen