javafx - 以两行显示 ComboBox 项目,而不是在一行中显示
问题描述
我目前正在使用 JavaFx ComboBox
,并从 XML 文件加载选项。我遇到的问题是有些物品太长而且不合身:
我尝试过使用 CSS 宽度:
.combo-box {
-fx-pref-width: 300;
}
.combo-box-popup > .list-view {
-fx-pref-width: 300;
}
是否可以ComboBox
在两行中显示项目而不是在一行中显示?
解决方案
您需要CellFactory
为您的ComboBox
. 在ListCell
我们构建的新版本中,我们可以使用一个简单Label
的为我们包装文本。
这是一个完整的示例来演示:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ComboBoxTextWrap extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Simple Interface
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(10));
// The ComboBox
ComboBox<String> comboBox = new ComboBox<>();
// Sample data
comboBox.getItems().addAll(
"Shorty",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
"Shorty Jr.",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
);
// Create our custom cells for the ComboBox
comboBox.setCellFactory(param -> new ListCell<String>() {
// Create a Label to store our text. We'll set it to wrap text and it's preferred width
final Label label = new Label() {{
setWrapText(true);
setPrefWidth(200);
}};
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setGraphic(null);
} else {
// Add our text to the Label
label.setText(item);
setGraphic(label);
}
}
});
// Add the combobox to the layout
root.getChildren().add(comboBox);
// Show the stage
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Sample");
primaryStage.show();
}
}
结果:
推荐阅读
- python - 如何将文件从网站下载到 S3 存储桶而无需下载到本地机器
- java - 如何设置 okhttp 3 线程池大小
- c# - Oracle.ManagedDataAccess.Core 和 ORA-01017:用户名/密码无效;登录被拒绝
- forms - Symfony:处理请求时出现错误?
- javascript - 反应原生
onDismiss 未调用 - php - 在 laravel 中编辑类别时如何显示特定类别的先前值?
- postgresql - PostgreSQL:错误:“NOT”处或附近的语法错误
- javascript - 开玩笑地测试猫鼬查询 - 只有第一个测试块执行查询
- python - 熊猫 - 组合列并一个接一个地放置?
- node.js - 是否可以写入 nodejs 标准输出以使接收的 nodejs 标准输入“on-data”返回单个段?