我创建了一个添加条目列表的组合框。我已将此组合框设置为可编辑和自动完成。问题如下
1)我使用鼠标点击从下拉列表中选择了Arial值。
2)之后我输入了黑色,然后从结果列表中我使用输入按钮选择了Arial Black。
3)然后我再次点击Arial值使用鼠标点击,Arial值被选中但是随之而来的是结果列表再次显示,即使我选择了该值。
我想在点击鼠标选择值时隐藏结果列表。结果列表只是ComboBoxPopupControl。我尝试使用dispose方法,但它有效。任何人都可以通过点击comboBox.setOnAction来建议代码。
这是代码
java.util.ArrayList;
import java.util.List;
import org.controlsfx.control.textfield.TextFields;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
public class TestAutoTextSearch_bkp extends Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
launch();
}
@Override
public void start(Stage primaryStage) throws Exception {
List<String> countries = new ArrayList<>();
countries.add("Arial");
countries.add("Arial Black");
countries.add("Arial Narrow");
ComboBox<String> comboBox = new ComboBox();
comboBox.getItems().addAll(countries);
ComboBox<String> comboBox1 = new ComboBox();
comboBox.setEditable(true);
comboBox.setMaxWidth(Double.MAX_VALUE);
comboBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//Tried dispose method here but dint worked[![enter image description here][1]][1]
}
});
comboBox.getEditor().setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
KeyCode kc = ke.getCode();
System.out.println("Inside Key Press");
if ((kc.isLetterKey())||kc.isArrowKey()||kc.equals(KeyCode.BACK_SPACE)) {
TextFields.bindAutoCompletion(comboBox.getEditor(), comboBox.getItems());
}}
});
Group root = new Group();
root.getChildren().add(comboBox);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
comboBox.setMinWidth(comboBox.getWidth());
comboBox.setPrefWidth(comboBox.getWidth());
}
}
答案 0 :(得分:0)
您可以尝试使用小型实用程序库jalvafx
中的解决方案List<String> items = Arrays.asList("Mercury",
"Venus",
"Earth",
"Mars",
"Jupiter",
"Saturn",
"Neptune");
ComboBoxCustomizer.create(comboBox)
.autocompleted(items)
.customize();
默认情况下,双击以清除值。
还有一些其他有用的功能。您可以添加额外的列或字形,选择特定项目,将项目默认更改为字符串表示形式...
ComboBoxCustomizer.create(comboBox)
.autocompleted(items)
.overrideToString(o -> "planet: " + o)
.multyColumn(o -> Arrays.asList("column 2", "column 3"))
.emphasized(o -> o.endsWith("s"))
.customize();