当前位置: 首页 > 面试题库 >

JavaFX FXML Controller初始化方法未调用

司寇祖鹤
2023-03-14
问题内容

我试图从一个简单的ArrayList的内容填充ListView。这是我的

Controller.java文件:

package design;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;

public class Controller {

    @FXML private Button buttontest;
    @FXML private ListView<Song> listViewofSongs;

    protected List<Song> songList = new ArrayList<>();
    protected ListProperty<Song> listProperty = new SimpleListProperty<Song>();
    Song Language = new Song("Peter", "myalbum", "yes", 2010);

    public void addSong(Song song){
        songList.add(song);
    }

    public void initialize(URL url, ResourceBundle rb) {
            addSong(Language);
            listViewofSongs.setItems(FXCollections.observableList(songList));
     }



}

这是我的Style.fxml文件:

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>

<GridPane prefHeight="499.0" prefWidth="700.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="design.Controller">
   <columnConstraints>
      <ColumnConstraints />
      <ColumnConstraints />
      <ColumnConstraints maxWidth="0.0" minWidth="0.0" prefWidth="0.0" />
      <ColumnConstraints maxWidth="0.0" minWidth="0.0" prefWidth="0.0" />
   </columnConstraints>
   <rowConstraints>
      <RowConstraints />
      <RowConstraints />
      <RowConstraints maxHeight="0.0" minHeight="0.0" prefHeight="0.0" />
      <RowConstraints maxHeight="10.0" minHeight="0.0" prefHeight="0.0" />
      <RowConstraints maxHeight="10.0" minHeight="0.0" prefHeight="0.0" />
      <RowConstraints fillHeight="false" maxHeight="500.0" minHeight="10.0" prefHeight="240.0" />
      <RowConstraints fillHeight="false" maxHeight="500.0" minHeight="10.0" prefHeight="149.0" />
      <RowConstraints fillHeight="false" maxHeight="500.0" minHeight="10.0" prefHeight="50.0" />
   </rowConstraints>
   <children>
      <Pane prefHeight="64.0" prefWidth="700.0">
         <children>
            <Label layoutX="259.0" layoutY="14.0" text="Song Library">
               <font>
                  <Font name="Consolas Bold" size="26.0" />
               </font>
               <padding>
                  <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
               </padding>
            </Label>
         </children>
      </Pane>
      <Separator prefWidth="200.0" GridPane.rowIndex="4" />
      <ListView fx:id="listViewofSongs" editable="true" prefHeight="239.0" prefWidth="700.0" GridPane.rowIndex="5" />

      <Label text="Song Info" GridPane.halignment="CENTER" GridPane.rowIndex="6" GridPane.valignment="TOP">
         <GridPane.margin>
            <Insets bottom="10.0" />
         </GridPane.margin>
         <font>
            <Font name="Consolas" size="22.0" />
         </font>
         <padding>
            <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
         </padding>
      </Label>
      <Label GridPane.rowIndex="6" />
      <Label text="NAME" GridPane.rowIndex="6">
         <font>
            <Font name="Calibri" size="19.0" />
         </font>
         <GridPane.margin>
            <Insets bottom="60.0" left="200.0" />
         </GridPane.margin>
      </Label>
      <TextField maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="343.0" GridPane.rowIndex="6">
         <GridPane.margin>
            <Insets bottom="60.0" left="275.0" />
         </GridPane.margin>
      </TextField>
      <Label text="ARTIST" GridPane.rowIndex="6">
         <font>
            <Font name="Calibri" size="19.0" />
         </font>
         <GridPane.margin>
            <Insets left="200.0" />
         </GridPane.margin>
      </Label>
      <TextField maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="343.0" GridPane.rowIndex="6">
         <GridPane.margin>
            <Insets left="275.0" />
         </GridPane.margin>
      </TextField>
      <Label text="ALBUM" GridPane.rowIndex="6">
         <font>
            <Font name="Calibri" size="19.0" />
         </font>
         <GridPane.margin>
            <Insets bottom="-60.0" left="200.0" />
         </GridPane.margin>
      </Label>
      <TextField maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="343.0" GridPane.rowIndex="6">
         <GridPane.margin>
            <Insets bottom="-60.0" left="275.0" />
         </GridPane.margin>
      </TextField>
      <Label text="YEAR" GridPane.rowIndex="6">
         <font>
            <Font name="Calibri" size="19.0" />
         </font>
         <GridPane.margin>
            <Insets bottom="-120.0" left="200.0" />
         </GridPane.margin>
      </Label>
      <TextField maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="343.0" GridPane.rowIndex="6">
         <GridPane.margin>
            <Insets bottom="-120.0" left="275.0" />
         </GridPane.margin>
      </TextField>
      <Button mnemonicParsing="false" prefHeight="28.0" prefWidth="75.0" text="ADD" GridPane.rowIndex="7">
         <GridPane.margin>
            <Insets left="125.0" />
         </GridPane.margin>
         <font>
            <Font name="Corbel" size="15.0" />
         </font>
      </Button>
      <Button mnemonicParsing="false" prefHeight="28.0" prefWidth="75.0" text="EDIT" GridPane.rowIndex="7">
         <font>
            <Font name="Corbel" size="15.0" />
         </font>
         <GridPane.margin>
            <Insets left="325.0" />
         </GridPane.margin>
      </Button>
      <Button mnemonicParsing="false" prefHeight="28.0" prefWidth="75.0" text="DELETE" GridPane.rowIndex="7">
         <font>
            <Font name="Corbel" size="15.0" />
         </font>
         <GridPane.margin>
            <Insets left="525.0" />
         </GridPane.margin>
      </Button>
      <Separator orientation="VERTICAL" prefHeight="200.0" GridPane.rowIndex="7">
         <GridPane.margin>
            <Insets left="250.0" />
         </GridPane.margin>
         <padding>
            <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
         </padding>
      </Separator>
   </children>
</GridPane>

该程序运行,但是我输入的歌曲没有出现在ListView中(并且Song类确实具有toString方法)。

我能做什么?


问题答案:

问题是没有将控制器的初始化为预期问题的质询者。

Java 8中FXMLLoader的操作有点奇怪。

  1. 如果您initialize()在Controller中定义了无参数方法且未实现Initializable接口,则FXML加载程序仍将自动调用initialize方法。

  2. 如果相反,您public void initialize(URL url, ResourceBundle rb)在Controller中定义了参数化方法,则FXML加载程序将不会自动调用initialize方法, 除非 您的控制器也实现了该Initializable接口。

由于问题中的代码使用的是参数化的initialize方法,并且也未实现Initializable,因此不会发生初始化。



 类似资料:
  • 初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是kernel_initializer 和 bias_initializer,例如: model.add(Dense(64, kernel_initializer='random_uniform', bias

  • 初始化方法定义了对Keras层设置初始化权重的方法 不同的层可能使用不同的关键字来传递初始化方法,一般来说指定初始化方法的关键字是init,例如: model.add(Dense(64, init='uniform')) 预定义初始化方法 uniform lecun_uniform: 即有输入节点数之平方根放缩后的均匀分布初始化(LeCun 98). normal identity:仅用于权值矩

  • 问题内容: 我正处于“操作方法”阶段,想知道服务器启动时是否有一种方法可以调用。 这将类似于Web应用程序,当我将托管bean与一起使用时:启动容器时,将对带注释的类进行实例化,并且可以从其构造函数中调用所需的任何东西。 有什么帮助吗? 问题答案: 因此,如果您用于服务请求,则可以创建,如果已经部署了应用程序,则在部署或服务器启动时将调用方法。 为此,创建将实现的类: 然后在您的中定义该监听器:

  • 问题内容: 我刚刚将xcode更新为6.3.1。问题是自Swift 1.2起我收到了这个奇怪的错误消息。我收到这种错误消息 在此代码上 问题答案: 在调用任何init方法之前,必须初始化所有属性 因此,在调用super.init()之前先进行更改 例外: 可选属性 具有默认值的属性 懒惰的财产

  • 以下是我的配置 java版本“1.8.0_101”java(TM)SE运行时环境(构建1.8.0_101-b13)java热点(TM)64位服务器虚拟机(构建25.101-b13,混合模式) 使用Apache http客户端v4.4调用Restful服务,服务URL具有有效的证书(SHA2) 我们使用apache http客户端调用服务。下面是代码 服务调用是间歇性失败的,有一个批处理过程在一个循

  • 我正在尝试运行一个Spring项目。pom.xml: 结果是这样的: 2017-08-17 01:11:01.405信息9156---[restartedMain]org.ocp.TestruleemallApplication:在桌面上启动TestruleemallApplication-PL25CTR,PID 9156(C:\Users\Ilias\DesktoP\TestRuleEmall\