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