【发布时间】:2017-03-29 22:50:15
【问题描述】:
在我的 javafx 应用程序中,我想创建一个场景,我可以在其中显示数据库中所有用户的用户名。
确切地说,我想显示一个标签列表,其中每个标签都有一个用户名。 (标签的数量取决于用户的数量)。
注意:我可以用一个列表和一个 foreach 循环在 java 中做到这一点,但这是我第一次使用 javafx,我想知道如何创建图形组件的循环。
谢谢。
【问题讨论】:
在我的 javafx 应用程序中,我想创建一个场景,我可以在其中显示数据库中所有用户的用户名。
确切地说,我想显示一个标签列表,其中每个标签都有一个用户名。 (标签的数量取决于用户的数量)。
注意:我可以用一个列表和一个 foreach 循环在 java 中做到这一点,但这是我第一次使用 javafx,我想知道如何创建图形组件的循环。
谢谢。
【问题讨论】:
这里有几个替代方案,一个示例只是循环并向布局窗格的子级添加新标签,另一个示例是使用内置的 ListView 组件。当然还有其他选择。您选择使用哪一种取决于您需要实现的功能。
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class UserDisplay extends Application {
@Override public void start(Stage stage) {
String[] users = { "Huey", "Dewey", "Louie" };
VBox layout = new VBox(10);
// ALTERNATIVE 1: add labels in a loop.
for (String user: users) {
Label userLabel = new Label(user);
layout.getChildren().add(userLabel);
}
// ALTERNATIVE 2: use the built-in ListView component.
ListView<String> listView = new ListView<>(
FXCollections.observableArrayList(users)
);
layout.getChildren().add(listView);
layout.setPadding(new Insets(10));
layout.setPrefSize(100,200);
stage.setScene(new Scene(layout));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
【讨论】: