Javafx 2 fxml文件中的按钮不在fxmlLoader.getNamespace()返回的ObservableMap中

Javafx 2 fxml文件中的按钮不在fxmlLoader.getNamespace()返回的ObservableMap中,javafx-2,Javafx 2,我有以下代码来加载fxml文件。我想更改按钮的宽度。我可以使用fxmloader.getNamespace().get(“id”)访问这两个标签,但由于某些原因,我没有看到getNamespace()返回的observemap中的按钮。为什么会这样/ FXML文件 <?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.net.*?> <?import ja

我有以下代码来加载fxml文件。我想更改按钮的宽度。我可以使用
fxmloader.getNamespace().get(“id”)
访问这两个标签,但由于某些原因,我没有看到
getNamespace()
返回的
observemap
中的按钮。为什么会这样/

FXML文件

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<GridPane fx:controller="org.netbeans.modules.mavenproject1.controller.KeyController" xmlns:fx="http://javafx.com/fxml" >
    <padding>
        <Insets top="5" right="5" bottom="5" left="5"/>
    </padding>
    <children>
        <Button maxHeight="45.0" maxWidth="45.0" minHeight="45.0" minWidth="45.0" mnemonicParsing="false" prefHeight="45.0" prefWidth="45.0" style="" styleClass="alphabet-button" text="~" textAlignment="CENTER" textOverrun="ELLIPSIS">
            <graphic>
                <GridPane alignment="TOP_LEFT">
                    <padding>
                        <Insets top="1" right="1" bottom="1" left="1"/>
                    </padding>
                    <children>
                        <Label text="" fx:id="mainTextLabel" GridPane.columnIndex="0" GridPane.rowIndex="0" />
                        <Label text="" fx:id="shiftTextLabel" GridPane.columnIndex="0" GridPane.rowIndex="1" />
                    </children>
                    <columnConstraints>
                        <ColumnConstraints hgrow="SOMETIMES" minWidth="20.0" prefWidth="20.0" />
                        <ColumnConstraints hgrow="SOMETIMES" minWidth="20.0" prefWidth="20.0" />
                    </columnConstraints>
                    <rowConstraints>
                        <RowConstraints minHeight="20.0" prefHeight="20.0" vgrow="SOMETIMES" />
                        <RowConstraints minHeight="20.0" prefHeight="20.0" vgrow="SOMETIMES" />
                    </rowConstraints>
                </GridPane>
            </graphic>
            <stylesheets>
                <URL value="@../styles/keyboard.css" />
            </stylesheets>
        </Button>
    </children>
</GridPane>

控制器构造函数

 public Key(){
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/key.fxml"));
    fxmlLoader.setControllerFactory(new Callback<Class<?>, Object>(){
        @Override
        public Object call(Class<?> param){
            return keyController = new KeyController();
        }
    });

    try {            
        keyView = (Node) fxmlLoader.load();            
    } catch (IOException exception) {
            throw new RuntimeException(exception);
    }
    mainTextLabel = (Label) fxmlLoader.getNamespace().get("mainTextLabel");
    shiftTextLabel = (Label) fxmlLoader.getNamespace().get("shiftTextLabel");

    getChildren().add(keyView);
 }
公钥(){
FXMLLoader FXMLLoader=新的FXMLLoader(getClass().getResource(“/fxml/key.fxml”);

fxmlLoader.setControllerFactory(新回调我将此作为wiki帖子创建。我通过尝试和错误找到了解决方案(似乎是学习编程的最佳方式),但如果有人能在oracle文档上向我显示以下详细信息的位置,我将向你投赞成票

回答

 public Key(){
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/key.fxml"));
    fxmlLoader.setControllerFactory(new Callback<Class<?>, Object>(){
        @Override
        public Object call(Class<?> param){
            return keyController = new KeyController();
        }
    });

    try {            
        keyView = (Node) fxmlLoader.load();            
    } catch (IOException exception) {
            throw new RuntimeException(exception);
    }
    mainTextLabel = (Label) fxmlLoader.getNamespace().get("mainTextLabel");
    shiftTextLabel = (Label) fxmlLoader.getNamespace().get("shiftTextLabel");

    getChildren().add(keyView);
 }
只需将fx:id添加到按钮

之前

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<GridPane fx:controller="org.netbeans.modules.mavenproject1.controller.KeyController" xmlns:fx="http://javafx.com/fxml" >
    <padding>
        <Insets top="5" right="5" bottom="5" left="5"/>
    </padding>
    <children>
        <Button maxHeight="45.0" maxWidth="45.0" minHeight="45.0" minWidth="45.0" mnemonicParsing="false" prefHeight="45.0" prefWidth="45.0" style="" styleClass="alphabet-button" text="~" textAlignment="CENTER" textOverrun="ELLIPSIS">
            <graphic>
                <GridPane alignment="TOP_LEFT">
                    <padding>
                        <Insets top="1" right="1" bottom="1" left="1"/>
                    </padding>
                    <children>
                        <Label text="" fx:id="mainTextLabel" GridPane.columnIndex="0" GridPane.rowIndex="0" />
                        <Label text="" fx:id="shiftTextLabel" GridPane.columnIndex="0" GridPane.rowIndex="1" />
                    </children>
                    <columnConstraints>
                        <ColumnConstraints hgrow="SOMETIMES" minWidth="20.0" prefWidth="20.0" />
                        <ColumnConstraints hgrow="SOMETIMES" minWidth="20.0" prefWidth="20.0" />
                    </columnConstraints>
                    <rowConstraints>
                        <RowConstraints minHeight="20.0" prefHeight="20.0" vgrow="SOMETIMES" />
                        <RowConstraints minHeight="20.0" prefHeight="20.0" vgrow="SOMETIMES" />
                    </rowConstraints>
                </GridPane>
            </graphic>
            <stylesheets>
                <URL value="@../styles/keyboard.css" />
            </stylesheets>
        </Button>
    </children>
</GridPane>

之后

 public Key(){
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/key.fxml"));
    fxmlLoader.setControllerFactory(new Callback<Class<?>, Object>(){
        @Override
        public Object call(Class<?> param){
            return keyController = new KeyController();
        }
    });

    try {            
        keyView = (Node) fxmlLoader.load();            
    } catch (IOException exception) {
            throw new RuntimeException(exception);
    }
    mainTextLabel = (Label) fxmlLoader.getNamespace().get("mainTextLabel");
    shiftTextLabel = (Label) fxmlLoader.getNamespace().get("shiftTextLabel");

    getChildren().add(keyView);
 }