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

javafx对象一旦放入数组就会失去引用

安承教
2023-03-14

所以我试图修改我的控制器类中的一些圆,我已经将这些圆链接到我的fxml文件圆,但是当我试图将它们添加到圆数组中以便于管理时,它们似乎失去了它们的引用。例如,我有:

@FXML
private Circle circle1 = new Circle();

public void addNumber(ActionEvent event){
circle1.setLayoutX(355.0);
circle1.setLayoutY(100.0);
circle1.setVisbility(true);
}

上述方法成功地在给定坐标中弹出一个圆。但是,以下方法不起作用:

@FXML
private Circle circle1 = new Circle();

@FXML
private Circle[] c = {circle1};

public void addNumber(ActionEvent event){
c[0].setLayoutX(355.0);
c[0].setLayoutY(100.0);
c[0].setVisbility(true);
}

这不管用!尝试了数组尝试了数组列表尝试了Linkedlist,对Circle1的引用丢失了。我是JAVAFX的新手,所以这可能是一个简单的修复,但我试着研究了一点,尝试了不同的实现来让它工作,我似乎找不到解决方案。任何帮助将不胜感激!

共有2个答案

狄河
2023-03-14

这个SSCCE应该提供足够的信息让你开始。

给定以下FXML文件:

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

<?import javafx.scene.shape.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 
      prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" 
      xmlns:fx="http://javafx.com/fxml/1" 
      fx:controller="yourapplication.FXMLDocumentController">

    <children>
        <Button layoutX="22.0" layoutY="31.0" mnemonicParsing="false" 
         onAction="#addNumber" text="Button" />

        <Circle fx:id="circle1" fill="DODGERBLUE" layoutX="56.0" layoutY="118.0" 
                radius="34.0" stroke="BLACK" strokeType="INSIDE" visible="false" />
    </children>
</Pane>

和以下控制器代码:

public class FXMLDocumentController {

    @FXML
    private Circle circle1;
    private Circle[] c;

    public void initialize() {
        c = new Circle[] { circle1 };
    }

    public void addNumber(ActionEvent event) {
        c[0].setLayoutX(355.0);
        c[0].setLayoutY(100.0);
        c[0].setVisible(true);
    }
}

你应该得到你想要的结果。

注意事项:

  • 使用FXML注释将变量绑定到FXML文件中同名的元素
田嘉慕
2023-03-14

您正在用@FXML标记的字段中创建实例。这是错误的,当FXML加载时,该字段将被覆盖。这也是数组内容不起作用的原因,因为数组中的元素从未附加到场景图

 类似资料:
  • 问题内容: 我收到[] byte类型的压缩ASCII文本字节。我面临的问题是,以下过程占用了很多内存,这些内存在函数到达其末尾后仍未释放,并在程序的整个运行期间保持占用状态。 我注意到正在使用的类型是并且此类型具有和函数,但是它们都不允许释放曾经占用的内存。 该文档的状态如下: 重置会将缓冲区重置为空,但会保留基础存储以供将来的写操作使用。重置与Truncate(0)相同。 如何取消设置缓冲区并再

  • 我在JavaFX TreeView中列出了一个不可序列化的对象(它包含绑定属性)。我希望用户能够将包含该对象的TreeView项目拖到要绘制的线图上,但我无法使用此对象填充DragBoard,因为它是不可序列化的。我真的不想复制该对象,只是一个指向它的链接。我尝试将TransferMode设置为LINK,但这似乎只是预期操作的指示符;该过程仍然需要对要拖动的对象进行序列化。 如何仅拖放对对象的引用

  • 问题内容: 我要实现的混合,并且一旦所有要素都成功完成,返回的未来就成功完成,或者一旦任何要素都异常完成,它就异常地完成(相同的例外)。如果多个元素失败,则返回其中任何一个的异常就足够了。 用例 我有一个任务需要汇总由s 列表返回的子结果,但是一旦其中任何一个失败,该任务就应该停止等待。我知道子任务将继续运行,这没关系。 相关问题 我发现在“ 等待”列表上等待,最初看起来像是一个重复的问题,但被接

  • 我目前正在学习如何使用Swagger文档,因为我的公司正在评估使用它作为即将到来的项目文档的标准方式。 我在网上读到,使用YAML比使用JSON更容易阅读,而且由于YAML是JSON的一个子集,所以我认为这是可以的。 我正在处理200代码的响应,我想表示类似于以下结构的内容: 基本上,我返回一个名为“响应”的对象,它包含两个变量:一个名为“用户”的数组,它包含几个字符串(为了清晰起见,我只包含了两

  • 本文向大家介绍JS实现数组去重及数组内对象去重功能示例,包括了JS实现数组去重及数组内对象去重功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现数组去重及数组内对象去重功能。分享给大家供大家参考,具体如下: 大家在写项目的时候一定遇到过这种逻辑需求,就是给一个数组进行去重处理,还有一种就是给数组内的对象根据某一个属性,比如id,进行去重,下面我写了两个函数,都是可以达到这个效

  • 我在上Java初学者课。我只懂基本的Java。我们刚刚开始多态性和继承。我的问题是将对象放入数组。我有一个由十个对象组成的数组,如下所示。 假设我想将索引处的对象放入索引,索引处的对象是否会转到索引?还是将索引处的对象从数组中删除?如果它被删除了,当我把一个对象放在一个不同的数组索引中时,我该怎么做?这些对象只是在数组中交换位置?