使 JavaFX 中的组合框以非缩进方式显示缩进文本项
Make combo box in JavaFX display indented text items in a non-indented way
所以我正在使用 ComboBox 创建一个项目列表,用户可以从中选择一个。该列表是 hierarchical/indented 的方式如下:
Header 1
Item 1
Item 2
Header 1.1
Item 1
Item 2
Header 2
Item 1
Item 2
这看起来不错,但是问题来了。当用户单击其中一个缩进项目时,该项目将显示缩进。例如,ComboBox 显示以下内容:
Item 1
看起来真的很糟糕。我希望它像这样显示(没有前面的缩进):
项目 1
运行 程序的代码:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// Parent root = FXMLLoader.load(getClass().getResource("interface.fxml"));
ComboBox<String> genre1AddBook = new ComboBox<String>();
ObservableList<String> genresAddBook;
genresAddBook = FXCollections.observableArrayList("SKÖNLITTERATUR", "\tDeckare", "\tFantasy");
genre1AddBook.getItems().addAll(genresAddBook);
StackPane root = new StackPane();
root.getChildren().add(genre1AddBook);
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 400, 300));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
如何让 ComboBox 显示没有缩进的缩进项,并且仍然显示 hierarchical/indented 结构?
鉴于您发布的 class,您可以在组合框中使用 buttonCell
从字符串中去除空格。
genre1AddBook.setButtonCell(new ListCell<>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty) ;
if (empty || item == null) {
setText("");
} else {
setText(item.stripLeading());
}
}
});
但这是一个非常糟糕的设计;我假设在您的实际应用程序中,如果组合框中的值具有与之关联的其他数据(例如父或层次结构中的子节点)。您应该在组合框上设置一个单元格工厂,根据它们在层次结构中的位置缩进下拉列表中的单元格,以及一个不缩进文本的按钮单元格。
所以我正在使用 ComboBox 创建一个项目列表,用户可以从中选择一个。该列表是 hierarchical/indented 的方式如下:
Header 1
Item 1
Item 2
Header 1.1
Item 1
Item 2
Header 2
Item 1
Item 2
这看起来不错,但是问题来了。当用户单击其中一个缩进项目时,该项目将显示缩进。例如,ComboBox 显示以下内容:
Item 1
看起来真的很糟糕。我希望它像这样显示(没有前面的缩进):
项目 1
运行 程序的代码:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// Parent root = FXMLLoader.load(getClass().getResource("interface.fxml"));
ComboBox<String> genre1AddBook = new ComboBox<String>();
ObservableList<String> genresAddBook;
genresAddBook = FXCollections.observableArrayList("SKÖNLITTERATUR", "\tDeckare", "\tFantasy");
genre1AddBook.getItems().addAll(genresAddBook);
StackPane root = new StackPane();
root.getChildren().add(genre1AddBook);
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 400, 300));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
如何让 ComboBox 显示没有缩进的缩进项,并且仍然显示 hierarchical/indented 结构?
鉴于您发布的 class,您可以在组合框中使用 buttonCell
从字符串中去除空格。
genre1AddBook.setButtonCell(new ListCell<>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty) ;
if (empty || item == null) {
setText("");
} else {
setText(item.stripLeading());
}
}
});
但这是一个非常糟糕的设计;我假设在您的实际应用程序中,如果组合框中的值具有与之关联的其他数据(例如父或层次结构中的子节点)。您应该在组合框上设置一个单元格工厂,根据它们在层次结构中的位置缩进下拉列表中的单元格,以及一个不缩进文本的按钮单元格。