我可以在javaFX节点中存储对象的实例吗?

时间:2017-09-12 19:22:43

标签: java javafx tabs fxml

我有一个JavaFX应用程序,从主窗口开始作为TabPane对象。 在TabPane中,我有一个特定的Tab,其中包含Button个对象,可以向主TabPane添加新标签。但是我需要将主Tab中的每个TabPane与一个对象实例纠缠在一起(每个选项卡应该与一个类Merchant的一个实例一起工作)

班级Merchant有一些方法createSortiment(),可根据ArrayList对象的参数生成Merchant个随机挑选的项目。

主控制器GUIController控制主窗口,另一个控制器GUIMerchantTabController控制选项卡。

我需要能够添加一个新选项卡(我可以这样做)并以某种方式将其绑定到Merchant JohnSmith = new Merchant();然后我需要控制器GUIMerchantTabController才能响应一个动作事件fx:id="createSortiment"的按钮调用JohnSmith.createSortiment()(我不知道如何操作),并将每个生成的项目添加到Accordion中的某个Tab作为{ {1}}(我也可以这样做)。

我的主要问题:

如何将JohnSmith的实例保存到GUIMerchantTabController将能够使用John的方法并访问其数据的特定TitledPane? 可能是某种对象实例引用?我可以以某种方式将对象添加到该窗格作为节点吗?有些"数据"属性存在于Java中(如在HTML Tab中)?

我认为查看我的文件不是必要的,但只是为了更好的想法,这些是我的文件......

商家标签的FXML:

<element data-storeSomething="Some text here, or json object">

主窗口的FXML:

<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.Accordion?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.text.Font?>


<Tab fx:controller="damn.fuck.shit.GUIMerchantTabController" closable="false" text="Merchant name" xmlns:fx="http://javafx.com/fxml/1">
    <content>
        <AnchorPane prefHeight="200.0" prefWidth="200.0">
            <children>
                <SplitPane dividerPositions="0.7508361204013378" prefHeight="371.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                    <items>
                        <ScrollPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                            <Accordion fx:id="sortimentViewSpace" prefHeight="369.0" prefWidth="438.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                                <panes>
                                    <TitledPane animated="false" text="Item00">
                                        <content>
                                            <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
                                                <Label text="This is testing item label lol" />
                                            </AnchorPane>
                                        </content>
                                    </TitledPane>
                                </panes>
                            </Accordion>
                        </ScrollPane>
                        <ScrollPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                            <Button fx:id="createSortimentButton" layoutX="51.0" layoutY="-338.0" mnemonicParsing="false" onAction="#generateSortiment" prefHeight="31.0" prefWidth="142.0" text="Vytvoř sortiment" textAlignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
                                <font>
                                    <Font name="System Bold" size="14.0" />
                                </font>
                            </Button>
                        </ScrollPane>
                    </items>
                </SplitPane>
            </children>
        </AnchorPane>
    </content>
</Tab>

1 个答案:

答案 0 :(得分:4)

节点有一个userData API:

public void setUserData(Object value) 
     

设置的便捷方法   单个Object属性,可以在以后检索。这是   在功能上等同于调用getProperties().put(Object key, Object value)方法。稍后可以通过调用来检索   getUserData()

它还有一个属性API,用于关联key-&gt;值对的映射:

public final ObservableMap<Object,Object> getProperties()
     

返回此节点上的可观察属性映射,主要供应用程序开发人员使用。

这两个API都允许您将用户对象实例与JavaFX节点相关联。

或者,您可以扩展您正在使用的任何节点类型(只要它不是最终的,很多东西都是最终的,而不是JavaFX中的用户可扩展),并在您的扩展中存储引用。例如:

class MyTab extends Tab {
    private MyClass myObject;

    public MyTab(MyClass myObject) {
        super();
        this.myObject = myObject;
    }
}

使用类扩展具有保留类型信息的优势,以防您的应用程序从中受益。