gpt4 book ai didi

javafx - 在 JavaFX 中使用 FXML 创建标签数组

转载 作者:行者123 更新时间:2023-12-02 08:29:24 25 4
gpt4 key购买 nike

实际上,我想在 Javafx 中使用 Labels 创建一个导航列表。我可以将 fx:id 分配给每个标签并在 Controller 类中创建标签。

但我想要做的是,我想要在场景生成器中创建的 Controller 类中的一个标签数组,而不是 Controller 类中的十个标签对象。

谁能帮我想个办法...

最佳答案

有些事情用 Java 比 FXML 做得更好。在这种情况下,我根本不会在 FXML 中创建标签;只需创建要容纳它们的 Pane ,然后在 Controller 中创建标签并将它们添加到 Pane 中。

也就是说,可以按照您要求的方式使用 <fx:reference> 来完成.

做这样的事情:

<!-- create all the labels as usual -->
<Label fx:id="label1" text="Message 1"/>
<Label fx:id="label2" text="Message 2"/>
<!-- ... -->

<!-- use a define block to define an array list containing the labels: -->
<fx:define>
<ArrayList fx:id="labelList">
<fx:reference source="label1" />
<fx:reference source="label2" />
<!-- ... -->
</ArrayList>
</fx:define>

然后在 Controller 中注入(inject)列表:

@FXML
private List<Label> labelList ;

完整示例:

LabelListTest.fxml:

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

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import java.util.ArrayList?>

<VBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="LabelListController">
<Label fx:id="label1"/>
<Label fx:id="label2"/>
<Label fx:id="label3"/>
<Label fx:id="label4"/>
<Label fx:id="label5"/>
<Label fx:id="label6"/>
<Label fx:id="label7"/>
<Label fx:id="label8"/>
<Label fx:id="label9"/>
<Label fx:id="label10"/>

<fx:define>
<ArrayList fx:id="labelList" >
<fx:reference source="label1"/>
<fx:reference source="label2"/>
<fx:reference source="label3"/>
<fx:reference source="label4"/>
<fx:reference source="label5"/>
<fx:reference source="label6"/>
<fx:reference source="label7"/>
<fx:reference source="label8"/>
<fx:reference source="label9"/>
<fx:reference source="label10"/>
</ArrayList>
</fx:define>
</VBox>

标签列表 Controller .java:

import java.util.List;

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


public class LabelListController {
@FXML
private List<Label> labelList ;

public void initialize() {
int count = 1 ;
for (Label label : labelList) {
label.setText("Message " + (count++) );
}
}
}

标签列表测试.java:

import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class LabelListTest extends Application {

@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("LabelListTest.fxml"));
Scene scene = new Scene(root, 250, 450);
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

关于javafx - 在 JavaFX 中使用 FXML 创建标签数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com