gpt4 book ai didi

JavaFX 将 Controller 变量绑定(bind)到组件属性

转载 作者:行者123 更新时间:2023-11-29 06:51:52 25 4
gpt4 key购买 nike

假设我有一个 Controller

@FXML private ObservableList<String> myStrings = FXCollections.observableArrayList();

是否可以编写任何 FXML 来连接一个以 myStrings 作为其项目的 ListView?

我的第一次尝试是:

<ListView>
<items fx:id="myStrings"/>
</ListView>

但这会提示 fx:id 在该位置无效。我也试过了

<ListView items="${controller.myStrings}"/>

...但它无法解析该值。

请不要发布此解决方案:

<ListView fx:id="myStringsListView"/>

// In controller
@FXML private ListView<String> myStringsListView;
@FXML public void initialize() {
myStringsListView.setItems(myStrings);
}

这就是我现在正在做的,但是这里的间接和样板数量让我很受伤。

最佳答案

以下作品

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

<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.ListView?>

<BorderPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="ListViewController">
<center>
<ListView items="${controller.myStrings}" />
</center>
</BorderPane>

使用以下 Controller (我认为主要区别在于您没有为列表定义访问器方法,或者命名不正确):

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class ListViewController {

private final ObservableList<String> myStrings = FXCollections.observableArrayList();

public ListViewController() {
myStrings.addAll("One", "Two", "Three");
}

public ObservableList<String> getMyStrings() {
return myStrings ;
}
}

这个快速测试:

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

public class ListViewItemsFromControllerTest extends Application {

@Override
public void start(Stage primaryStage) throws Exception{
primaryStage.setScene(new Scene(FXMLLoader.load(getClass().getResource("ListViewItemsFromController.fxml"))));
primaryStage.show();
}

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

产生

enter image description here

关于JavaFX 将 Controller 变量绑定(bind)到组件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45363801/

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