Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当用户从下拉菜单更改数据库时,如何阻止文本字段?_Java_User Interface_Javafx - Fatal编程技术网

Java 当用户从下拉菜单更改数据库时,如何阻止文本字段?

Java 当用户从下拉菜单更改数据库时,如何阻止文本字段?,java,user-interface,javafx,Java,User Interface,Javafx,我有GUI应用程序与几个数据库连接,从每个数据库中,我使用不同的字段进行连接。主要问题是如何根据用户选择的数据库禁用字段,例如,如下图所示,当用户选择MySQL时,dbName和path to db等字段将被禁用 但当用户选择其他字段(例如SQLite)时,应该禁用localhost、port、username和password等字段。现在我禁用了MySQL的字段,但是当我切换到其他数据库时,相同的字段仍然被禁用 下面是我的代码: private void choseFieldsWhichNe

我有GUI应用程序与几个数据库连接,从每个数据库中,我使用不同的字段进行连接。主要问题是如何根据用户选择的数据库禁用字段,例如,如下图所示,当用户选择MySQL时,dbName和path to db等字段将被禁用

但当用户选择其他字段(例如SQLite)时,应该禁用localhost、port、username和password等字段。现在我禁用了MySQL的字段,但是当我切换到其他数据库时,相同的字段仍然被禁用

下面是我的代码:

private void choseFieldsWhichNeedToDb() {
    String value = databaseChoiceBox.getValue();
    if (value.equals("MySql")){
        databaseNameTextField.setDisable(true);
        databasePathTextField.setDisable(true);
    }
}

private void fillChoiceBox() {
    DatabaseType[] types = DatabaseType.values();
    for (DatabaseType type : types) {
        databaseChoiceBox.getItems().add(type.getType());
    }
    databaseChoiceBox.setValue("MySql");
}

不是一个完整的答案,但希望足够让你完成你的应用程序

您需要创建一个
ChangeListener
,它监听
ChoiceBox
所选值中的更改,并根据
ChoiceBox
中所选的值启用或禁用相关的
文本字段

下面的代码创建了一个类似于屏幕截图中的GUI,但仅根据所选数据库启用(或禁用)dbName和path文本字段

导入javafx.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.collections.FXCollections;
导入javafx.geometry.Insets;
导入javafx.scene.scene;
导入javafx.scene.control.ChoiceBox;
导入javafx.scene.control.Label;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.GridPane;
导入javafx.stage.stage;
公共类ChooseDb扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
GridPane root=新的GridPane();
根.setHgap(10.0);
根.setVgap(10.0);
根.坐垫(新的插图(20,20,20,20));
Label hostLabel=新标签(“主机”);
添加(hostLabel,0,0);
TextField hostTextField=新建TextField();
添加(hostTextField,1,0);
标签端口标签=新标签(“端口”);
root.add(portLabel,2,0);
TextField portTextField=新建TextField();
添加(portTextField,3,0);
标签usernamelab=新标签(“用户名”);
添加(usernamelab,0,1);
TextField usernameTextField=新建TextField();
添加(usernameTextField,1,1);
标签passwordLabel=新标签(“密码”);
root.add(passwordLabel,2,1);
TextField passwordTextField=新的TextField();
添加(passwordTextField,3,1);
Label dbnamelab=新标签(“数据库名称”);
add(dbnamelab,0,2);
TextField dbNameTextField=新建TextField();
dbNameTextField.setDisable(true);
add(dbNameTextField,1,2);
Label dbPathLabel=新标签(“数据库文件的路径”);
add(dbPathLabel,2,2);
TextField dbPathTextField=new TextField();
dbPathTextField.setDisable(true);
添加(dbPathTextField,3,2);
ChoiceBox dbNames=新的ChoiceBox(FXCollections.observableArrayList(“MySQL”、“SQLite”);
setValue(“MySQL”);
dbNames.valueProperty().addListener(新的ChangeListener(){
@凌驾

公共无效已更改(ObservableValueSo启用字段(例如
字段。setDisable(false)
)当用户选择不同的数据库时?好的,我添加了侦听器,但当我启动应用程序时,默认值等于MySQL,所有字段都可以fill@mroma您需要首先设置禁用字段以匹配初始的
选择框
选择。请注意,在我的代码中,我最初将
dbNameTextField
设置为禁用D