Combobox 可编辑组合框不保留其值

Combobox 可编辑组合框不保留其值,combobox,javafx,javafx-8,Combobox,Javafx,Javafx 8,使用可编辑的组合框时出现问题。 当我从下拉菜单中选择一个值时,它必须显示在组合框中,并且必须写入一个额外的文本字段,只要组合框处于焦点状态,它就可以工作 这里的问题是,当我通过按enter或tab键设置另一个元素的焦点时,以及当我单击另一个元素时,textfield和combobox中的值就消失了 非常感谢您的帮助。我发布了一个答案来详细说明我的评论(由Zydar询问) 使用JavaFX,您可以将一些属性相互绑定以同步它们的值。这里有一个完美的例子来使用这个。它应该是这样的: package t

使用可编辑的组合框时出现问题。
当我从下拉菜单中选择一个值时,它必须显示在组合框中,并且必须写入一个额外的文本字段,只要组合框处于焦点状态,它就可以工作

这里的问题是,当我通过按enter或tab键设置另一个元素的焦点时,以及当我单击另一个元素时,textfield和combobox中的值就消失了


非常感谢您的帮助。

我发布了一个答案来详细说明我的评论(由Zydar询问)

使用JavaFX,您可以将一些属性相互绑定以同步它们的值。这里有一个完美的例子来使用这个。它应该是这样的:

package test;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;


public class JavaFxTest extends Application {


    public void start(Stage primaryStage) throws Exception {

        ComboBox<String> cb = new ComboBox<>(FXCollections.observableArrayList("value1", "value2", "value3"));
        cb.setEditable(true);

        TextField tf = new TextField();
        tf.textProperty().bind(cb.getEditor().textProperty());
        // Use the following if you want the bind to be bidirectional
        // tf.textProperty().bindBidirectional(cb.getEditor().textProperty());

        FlowPane flowPane = new FlowPane(cb, tf);
        Scene scene = new Scene(flowPane);
        primaryStage.setScene(scene);
        primaryStage.show();

    }


    public static void main(String[] args) {

        JavaFxTest.launch(args);

    }
}
封装测试;
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.scene.scene;
导入javafx.scene.control.ComboBox;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.FlowPane;
导入javafx.stage.stage;
公共类JavaFxTest扩展了应用程序{
public void start(Stage primaryStage)引发异常{
ComboBox cb=新的ComboBox(FXCollections.observableArrayList(“value1”、“value2”、“value3”);
cb.setEditable(true);
TextField tf=新的TextField();
tf.textProperty().bind(cb.getEditor().textProperty());
//如果希望绑定是双向的,请使用以下命令
//tf.textProperty().bindbiodical(cb.getEditor().textProperty());
FlowPane FlowPane=新的FlowPane(cb,tf);
场景=新场景(流程窗格);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
JavaFxTest.launch(args);
}
}

我发布了一个答案来详细说明我的评论(由Zydar提出)

使用JavaFX,您可以将一些属性相互绑定以同步它们的值。这里有一个完美的例子来使用这个。它应该是这样的:

package test;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;


public class JavaFxTest extends Application {


    public void start(Stage primaryStage) throws Exception {

        ComboBox<String> cb = new ComboBox<>(FXCollections.observableArrayList("value1", "value2", "value3"));
        cb.setEditable(true);

        TextField tf = new TextField();
        tf.textProperty().bind(cb.getEditor().textProperty());
        // Use the following if you want the bind to be bidirectional
        // tf.textProperty().bindBidirectional(cb.getEditor().textProperty());

        FlowPane flowPane = new FlowPane(cb, tf);
        Scene scene = new Scene(flowPane);
        primaryStage.setScene(scene);
        primaryStage.show();

    }


    public static void main(String[] args) {

        JavaFxTest.launch(args);

    }
}
封装测试;
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.scene.scene;
导入javafx.scene.control.ComboBox;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.FlowPane;
导入javafx.stage.stage;
公共类JavaFxTest扩展了应用程序{
public void start(Stage primaryStage)引发异常{
ComboBox cb=新的ComboBox(FXCollections.observableArrayList(“value1”、“value2”、“value3”);
cb.setEditable(true);
TextField tf=新的TextField();
tf.textProperty().bind(cb.getEditor().textProperty());
//如果希望绑定是双向的,请使用以下命令
//tf.textProperty().bindbiodical(cb.getEditor().textProperty());
FlowPane FlowPane=新的FlowPane(cb,tf);
场景=新场景(流程窗格);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
JavaFxTest.launch(args);
}
}

如果在组合框和文本字段属性之间使用JavaFX提供的双向绑定功能,我想这不应该发生,这解决了我的问题problem@Kwoinkwoin你能更详细地解释一下吗?我想如果你在combobox和你的textfield属性之间使用JavaFX提供的双向绑定功能,就不会发生这种情况了。谢谢@Kwoinkwoin的提示,这解决了我的问题problem@Kwoinkwoin你能更详细地解释一下吗?我想如果你在combobox和你的textfield属性之间使用JavaFX提供的双向绑定功能,就不会发生这种情况了。谢谢@Kwoinkwoin的提示,这解决了我的问题problem@Kwoinkwoin您能更详细地解释一下吗?绑定文本字段和组合框并不能防止可编辑组合框中的文本在失去焦点时消失!绑定文本字段和组合框不会使可编辑组合框中的文本在失去焦点时消失!绑定文本字段和组合框不会使可编辑组合框中的文本在失去焦点时消失!