因此,我目前正在开发一个简短的培训项目(计算器),它有一个使用JavaFX的图形用户界面(我知道它不好,我知道它过时了).我使用的ComboBox的行为方式很奇怪,我想你们中的一些人可能知道原因.虽然只有一个元素(单元格),但组合框会在填充的单元格下面显示另一个单元格的开始.它看起来是这样的:
奇怪的是,如果将更多的元素(单元格)添加到ComboBox中,这就不适用了.在这种情况下,它看起来像这样:
为什么组合框的行为是这样的呢?
我试着在JavaFX ComboBox的文档中搜索解决方案,也试着搜索有相同问题的人.
我将条目添加到ComboBox("Backlog")中,代码为:backlog.getItems().add(outputArea.getText());
我使用该代码向ComboBox("Backlog")添加了一个侦听器:
backlog.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
outputArea.setText(backlog.getSelectionModel().getSelectedItem());
}
});
最后,我使用了一些css样式来使它看起来更好:
.combo-box {
-fx-background-color: #cddfe0;
-fx-border-radius: 10px;
-fx-background-radius: 10px;
-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.8), 5, 0.0 , 1, 1);
}
.combo-box .list-cell{
-fx-background-color: #cddfe0;
-fx-border-color: #f4f3f9;
-fx-border-radius: 10px;
-fx-background-radius: 10px;
-fx-font: 18px "Digital-7 Mono";
}
.combo-box-popup .list-view{
-fx-background-color: transparent;
-fx-border-color: transparent;
-fx-effect: null;
}
这里有一个简短的MCVE(由@BasilBourque要求)供您自己测试.在添加第二个项目后,在一个已删除的ComboBox中,最后一个项目下的空间会大大减少:
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.AnchorPane;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
AnchorPane root = new AnchorPane();
Scene scene = new Scene(root,400,200);
ComboBox<String> dropDown = new ComboBox<String>(); //creation of the ComboBox
AnchorPane.setLeftAnchor(dropDown, 50.0);
AnchorPane.setTopAnchor(dropDown, 50.0);
dropDown.setPrefWidth(300);
dropDown.getItems().add("Chocolate");
//dropDown.getItems().add("Caramel"); //remove comment-out to add second item to ComboBox
root.getChildren().add(dropDown); //adding the ComboBox to the root-AnchorPane
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
主机系统是Windows 10.我使用的是JDK 17和JavaFX 21.