gpt4 book ai didi

java - 查看fxml里面的逻辑(特别是迭代)

转载 作者:行者123 更新时间:2023-11-30 08:47:38 25 4
gpt4 key购买 nike

因此,这是来自 yfiles 开发人员指南的示例 fxml(实际上并不重要):

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

<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import com.yworks.yfiles.drawing.NodeTemplate?>

<NodeTemplate fx:id="templateNode" style="-fx-background-color: darkblue"
xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<VBox alignment="CENTER">
<Label fx:id="firstName" text="${templateNode.item.tag.firstName}"
textFill="${templateNode.styleTag.firstNameColor}" />

<Label fx:id="lastName" text="${templateNode.item.tag.lastName}"
textFill="${templateNode.styleTag.lastNameColor}" />
</VBox>
</NodeTemplate>

templateNode.item.tag 是 Person 类的一个对象:

public class Person {

private final String firstName;
private final String lastName;
public Person(String firstName, String lastName){
this.firstName = firstName; this.lastName = lastName;
}
public String getFirstName() {return firstName;}
public String getLastName() {return lastName;}
}

在 fxml 中是否有可能:

a) 在 fxml 中执行一些 View 逻辑(我就是这样调用它的)?例如,要将第一个标签的文本设置为 templateNode.item.tag.firstName 当且仅当它的长度大于 10,否则为“随便”?

b) 至少明确地迭代模型中的集合?
假设 templateNode.item.tag 是 Person 对象的列表。例如在 pydjanvaFX(它是 javaFX 中的 django-enhanced-templating,我在写这个问题时发明的语言)语言我可以写这样的东西:

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

<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import com.yworks.yfiles.drawing.NodeTemplate?>

<NodeTemplate fx:id="templateNode" style="-fx-background-color: darkblue"
xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<VBox alignment="CENTER">
{% for i, model in enumerate(templateNode.item.tag) %}
<Label fx:id="firstName#${i}" text="${model.firstName}"
textFill="${templateNode.styleTag.firstNameColor}" />

<Label fx:id="lastName#${i}" text="${model.lastName}"
textFill="${templateNode.styleTag.lastNameColor}" />
{% endfor %}
</VBox>
</NodeTemplate>

最佳答案

您可能想阅读 Introduction to FXML关于Scripting in FXML .

The <fx:script> tag allows a caller to import scripting code into or embed script within a FXML file. Any JVM scripting language can be used, including JavaScript, Groovy, and Clojure, among others. Script code is often used to define event handlers directly in markup or in an associated source file, since event handlers can often be written more concisely in more loosely-typed scripting languages than they can in a statically-typed language such as Java.

但是,我强烈反对它。您想要查找编译时错误,而不是运行时错误。

一个关于脚本看起来如何的简短示例,标签是​​动态添加的:

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

<?language javascript?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>


<VBox fx:id="root" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<children>
<Button text="Button" />
<Label text="Label" />
</children>
<fx:define>
<Label fx:id="addedLabel" text="Label" />
</fx:define>
<fx:script>
addedLabel.setText('Added Label');
root.getChildren().add( addedLabel);
java.lang.System.out.println( "Children: " + root.getChildren().size());
</fx:script>
</VBox>

我不会深入讨论这个或列表或任何你想做的脚本,因为严重的是:不要这样做!迟早你会遇到问题。

关于java - 查看fxml里面的逻辑(特别是迭代),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32348739/

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