JavaFX - ListView,无法添加项目

问题描述 投票:0回答:1

我试图简单地向 listView 添加一行文本。我遵循了教程,询问了人工智能,并据我所知完全遵循了它。我知道我做错事了。

在我的班级中,我的列表视图已正确连接到场景构建器中的fxml id

@FXML
ListView<String> list = new ListView<>();

方法中:

public void addToList(){
        list.getItems().add("hi");
        list.getItems().add("hello");
}

它编译并加载,我看到列表视图窗格。但当我调用 addToList 时,没有显示任何项目...

列表视图位于水平盒 (Hbox) 内的滚动窗格内,主窗口 (Vbox) 内。

我知道我错过了一些简单的东西,这让我很沮丧。

我正在尝试在列表视图中显示任何内容。任何事情。 我实际上试图在一个更大的程序中传递一个数组,我已经证明该程序是通过打印整个数组来填充的,但我简化了代码,仅添加 2 个简单的字符串,试图显示任何内容。

java listview javafx scenebuilder
1个回答
0
投票

您已经了解了将项目添加到支持

ListView
的列表中的基本想法。所以你一定还有其他的问题。正如评论所说,您的内容听起来很可疑,因为
ListView
有自己的滚动,无需嵌入滚动窗格。

这是一个基本的示例应用程序。该应用程序以

ListView
开头,并在控制器的
initialize
方法中设置了单个值。然后,一个按钮将您的两个项目“hi”和“hello”添加到列表中,每次点击一个。

此代码在 macOS Ventura 上使用 JavaFX/OpenJFX 版本 20 和 Java 20.0.2,根据 IntelliJ IDE 提供的 JavaFX 新项目模板进行修改。

FXML 文件:

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ListView?>
<VBox alignment="CENTER"
      spacing="20.0"
      xmlns:fx="http://javafx.com/fxml"
      fx:controller="work.basil.example.fxlistview.HelloController">
    <padding>
        <Insets bottom="20.0"
                left="20.0"
                right="20.0"
                top="20.0"/>
    </padding>

    <Label fx:id="welcomeText"/>
    <Button text="Add two more items to list"
            onAction="#onClickOfAddButton"/>
    <ListView fx:id="exampleListView"/>
</VBox>

控制器:

package work.basil.example.fxlistview;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;

public class HelloController
{
    @FXML
    private Label welcomeText;

    @FXML
    private ListView < String > exampleListView;

    @FXML
    protected void onClickOfAddButton ( )
    {
        this.addToList ( );
    }

    private final ObservableList < String > observableList = FXCollections.observableArrayList ( "bonjour" );

    public void addToList ( )
    {
        exampleListView.getItems ( ).add ( "hi" );
        exampleListView.getItems ( ).add ( "hello" );
    }

    public void initialize ( )
    {
        this.exampleListView.setItems ( this.observableList );
    }
}

Application
子类:

package work.basil.example.fxlistview;

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

import java.io.IOException;

public class HelloApplication extends Application
{
    @Override
    public void start ( Stage stage ) throws IOException
    {
        FXMLLoader fxmlLoader = new FXMLLoader ( HelloApplication.class.getResource ( "hello-view.fxml" ) );
        Scene scene = new Scene ( fxmlLoader.load ( ) , 320 , 600 );
        stage.setTitle ( "Hello!" );
        stage.setScene ( scene );
        stage.show ( );
    }

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

这个问题在这里帮助了我:如何从 FXML 文件初始化 ListView?.

© www.soinside.com 2019 - 2024. All rights reserved.