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

javax:ListView:通过在ListView中选择项加载控制器

尉迟龙光
2023-03-14

我在这里找到了部分解决方案如何使用自定义对象在JavaFX中填充ListView?这里的javafx-listview项带有一个图像按钮,但问题仍然存在,我不知道如何以及在哪里放置 标记,以便在单击一个项时加载它。

共有1个答案

越雨泽
2023-03-14

您只需向列表视图的选择模型注册一个侦听器,并在选择更改时加载相应的视图。

例如,假设你有

public class View {

    private final String name ;
    private final Class<?> controllerType ;

    // You could assume that the resource is name+".fxml" if you want to rely on conventions like that
    // That would eliminate the need for another field here, but would prevent
    // e.g. names with whitespace etc.
    private final String resource ;

    public View(String name, Class<?> controllerType, String resource) {
        this.name = name ;
        this.controllerType = controllerType ;
        this.resource = resource ;
    }

    public String getName() {
        return name ;
    }

    public Class<?> getControllerType() {
        return controllerType ;
    }

    public String getResource() {
        return resource ;
    }

    @Override
    public String toString() {
        return name ;
    }
}

然后在FXML中:

<!-- imports, namespaces omitted -->

<BorderPane fx:id="root" fx:controller="app.MainController" ... >
    <left>
        <ListView fx:id="selector"/>
    </left>
</BorderPane>
package app ;

public class MainController {

    @FXML
    private BorderPane root ;

    @FXML
    private ListView<View> selector ;

    public void initialize() {
        selector.getSelectionModel().selectedItemProperty().addListener((obs, oldView, newView) -> {
            if (newView == null) {
                root.setCenter(null);
            } else {
                // assumes each FXML is in the same package as its controller
                // (which I think is a nice way to organize things)
                FXMLLoader loader = new FXMLLoader(newView.getControllerType().getResource(newView.getResource()));
                try {
                    root.setCenter(loader.load());
                } catch (IOException exc) {
                    // unrecoverable...
                    throw new UncheckedIOException(exc);
                }
            }
        });

        selector.getItems().addAll(
            new View("Fruits", FruitsController.class, "Fruits.fxml"),
            new View("Vegetables", VegetablesController.class, "Vegetables.fxml")
        );
    }
}
 类似资料:
  • 我想创建一个列表视图,只能通过鼠标进行多项选择(不按住ctrl或Shift) 单击某个项目应选择此项目。如果选择了其他项目,请将此新项目添加到所选列表中。以前选中此项目时,请取消选中它。 我不想保留选定的项目。selectionModel上有一个名为“selectIndices()”的方法,它只接受一个或多个整数,而不是整数列表。。。 有男孩有主意吗?

  • 问题内容: 我试图使用jQueryUI选项卡,通过AJAX加载选项卡。 我遇到的问题是放在这些标签上的Google可视化文件-通过AJAX检索时它们不会出现。 我设置了一个简单的演示: 标签页为 http://htmlto.com/ui/index.php。标签1会加载此处显示的页面: http //htmlto.com/ui/tab1.php 但是,事实并非如此。我已经看到了涉及解决此问题的类似

  • 我想知道如何选择listview first item select并通过单击按钮自动单击。 使用下面的代码,我可以选择第一行,但无法选择。 这是我的listview点击事件: 非常感谢您的帮助!如果有人想了解更多信息,请务必告诉我,以便我更新我的问题。

  • 我有一个listview,每个列表项都有一个ProgressBar。我想以这样的方式控制asynktask中的progressbar:在onPreExecute()中将progressbar设置为visible,在onPostExecute()中将progressbar设置为gone。我尝试了下面的代码,但有时它不起作用,而且progressbar总是可见的: listitem.xml 这段代码的

  • 我是Spring boot的新手,我已经了解到可以在Thymeleaf依赖项的帮助下通过控制器类加载HTML页面。最初确实奏效了,但现在不行了。这是我的控制器类 这是我的pom.xml 4.0.0 org.springframework.Boot spring-boot-starter-parent 2.3.5.release com.example demo2 0.0.1-Spring Boot

  • 问题内容: 我正在尝试通过AngularJS将URL动态加载到iframe中。由于某种原因,我无法像这个小提琴那样显示。有人可以告诉我我在做什么错吗?为什么不能绑定到控制器中设置的URL?代码很小: 谢谢! 问题答案: 您的代码无法正常工作的原因是因为源不受信任。为了使来源受到信任,您需要使用本文推荐的服务。如果这样做,您将得到以下结果: HTML 控制者 请参阅更新的小提琴:http : //j