当前位置: 首页 > 知识库问答 >
问题:

如何创建一个fxml文件的多个实例化

陆烨烁
2023-03-14

一个简单的问题,但我找不到答案。我有一个FXML文件,我想多次实例化。每个副本都需要自己的句柄,以便我可以更改其中的数据。假设,这与在刚创建的类上使用“new”关键字完全一样。

到目前为止,在我的尝试中,我已经能够创建fxml文件的多个副本,但只有一个控制器,因此调用方法意味着更改发生在所有副本上。

我是否必须为同一fxml文件的每个副本创建一个新控制器?

提前感谢

编辑

我正在研究这个想法的代码如下:

JavaFX:实例化控制器类时传递参数

以防万一一些背景可能会有所帮助:

我有一个场景,我想保存我制作的FXML文件的多个实例。在场景中设置一个FXML文件很容易,但创建多个(10-20)意味着我将有10到20个控制器和10到20个FXML文件实例。有没有更干净的方法?

我的希望是这样做:

public class SampleController implements Initializable {

    @FXML
    Label firstName;

    @FXML
    Label lastName;

    html" target="_blank">public SampleController(Label firstname, Label lastname) {

        this.firstName = firstname;
        this.lastName = lastname;
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

然后打电话如下:

SampleController Row1 = new SampleController("my", "name");

并让这个命令将附加的FXML文件与我传递的数据一起加载到场景中。但这不起作用,它崩溃了,只有一个例外。

共有1个答案

湛财
2023-03-14

下面演示了构建fxml文件的两个实例,并获取对其控制器的引用:

主要的fxml

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.Pane?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller">
   <children>
      <Label fx:id="label" />
   </children>
   <opaqueInsets>
      <Insets top="10.0" />
   </opaqueInsets>
 </Pane>

Controller.java其控制器

import javafx.fxml.FXML;
import javafx.scene.control.Label;

public class Controller{

    @FXML
    public Label label;

    public void setText(String text) {
        label.setText(text);
    }
}

使用主的两个实例。fxml:

@Override
public void start(final Stage primaryStage) throws Exception{

    FXMLLoader loader = new FXMLLoader();
    Pane topPane  =  loader.load(getClass().getResource("xml/Main.fxml").openStream());
    Controller controllerOfTop = loader.getController();
    controllerOfTop.setText("Top");

    loader = new FXMLLoader();
    Pane bottomPane  =  loader.load(getClass().getResource("xml/Main.fxml").openStream());
    Controller controllerOfBottom = loader.getController();
    controllerOfBottom.setText("Bottom");

    Scene scene = new Scene(new VBox(topPane, bottomPane));
    primaryStage.setScene(scene);
    primaryStage.show();
}
 类似资料:
  • 问题内容: 我有一个自动相互连接的Spring bean图。大大简化了图示: 所有这些bean都没有指定范围,这暗示它们是单例(使它们成为显式单例不会改变任何东西,我已经尝试过)。 问题在于,在实例化 单个应用程序上下文之后 ,的实例和包含的 不同 实例。怎么会这样 我试图为它创建public no args构造函数,并且调试已确认创建了多次。所有这些创建的堆栈跟踪都在这里。 我还尝试过为Spri

  • 我有一张相互自动连线的Spring豆图。高度简化的插图: 所有这些bean都没有指定作用域,这意味着它们是单例(我已经尝试过了,让它们显式单例不会改变任何东西)。 问题是,在实例化单个应用程序上下文之后,Bar和Baz的实例包含不同的Foo实例。这怎么会发生? 我尝试为创建公共no args构造函数,并且调试已确认已多次创建。所有这些创建的堆栈跟踪都在这里。 我还尝试为Spring启用调试日志记录

  • 问题内容: 我有一个由一个控制器控制的fxml文件。我想将控制器分成多个部分,就像放置在一个控制器中会产生很长的代码一样。不幸的是,fx:controller只能放在根目录中。我对如何分离控制器有什么建议吗? 问题答案: 我建议创建自定义控件-使用几个较小的FXML文件,而不是一个大FXML文件。 这是本教程: http://docs.oracle.com/javafx/2/fxml_get_st

  • 我试图构建我的项目的JRE捆绑exe文件,这是一个游戏,在本教程的帮助下使用,它创建了文件,但每当我运行这个文件时,它会给出两条错误消息: 出现JNI错误,请检查您的安装。 Java异常发生(JVM启动器)。 附言:我的项目在文件夹中包含额外的JAR文件()。

  • 问题内容: 我正在尝试创建多个图像文件的zip文件。我已经成功创建了所有图像的zip文件,但是不知何故,所有图像都被挂起了950字节。我不知道这里出了什么问题,现在我无法打开将图像压缩到该zip文件中。 这是我的代码。谁能告诉我这是怎么回事? 问题答案: 更改此: 对此: 并将缓冲区大小设置为1024字节:

  • 我有一个jobIntentService创建一个文件以便在其中添加一些文本,但我得到错误。我不知道我做错了什么...下面是我的代码: 谢谢你的帮助!