我试图简单地向 listView 添加一行文本。我遵循了教程,询问了人工智能,并据我所知完全遵循了它。我知道我做错事了。
在我的班级中,我的列表视图已正确连接到场景构建器中的fxml id
@FXML
ListView<String> list = new ListView<>();
方法中:
public void addToList(){
list.getItems().add("hi");
list.getItems().add("hello");
}
它编译并加载,我看到列表视图窗格。但当我调用 addToList 时,没有显示任何项目...
列表视图位于水平盒 (Hbox) 内的滚动窗格内,主窗口 (Vbox) 内。
我知道我错过了一些简单的东西,这让我很沮丧。
我正在尝试在列表视图中显示任何内容。任何事情。 我实际上试图在一个更大的程序中传递一个数组,我已经证明该程序是通过打印整个数组来填充的,但我简化了代码,仅添加 2 个简单的字符串,试图显示任何内容。
您已经了解了将项目添加到支持
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?.