Install4J: оставить отзыв пользователю после успешной проверки соединения JDBC - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь построить следующую форму в Install4J 6.1.6: enter image description here

После ввода хоста и номера порта пользователь может проверить, являются ли эти настройки MySQLисправить, нажав кнопку Test connection.

Переменная хоста называется mysqlHost, а переменная порта - mysqlPort

У меня изначально была проблема с тем, что введенный пользователем ввод сохраняется только в переменных, когда кнопка Next >нажата, но я мог бы решить эту проблему, добавив formEnvironment.saveFormComponents() к Key listener script для обоих полей ввода.

Я настроил следующее действие «Проверить соединение JDBC» для кнопки Test Connection: enter image description here

И все работает нормально, когда хост и порт установлены неправильно, пользователь увидит всплывающее окно с сообщением об ошибке.

Однако я не могуотображать сообщение об успехе или метку, когда работает соединение JDBC.Я попытался добавить зеленую метку успеха (как показано на первом рисунке) со следующим сценарием видимости:

String errorMessage = (String)context.getVariable("mysqlTestError");
return errorMessage.length() == 0;

Поэтому я пытаюсь проверить, является ли переменная mysqlTestError пустой или нет.

Но это не работает, метка успеха НИКОГДА не отображается.

Как ее можно отобразить только после успешной проверки соединения?

1 Ответ

1 голос
/ 10 июня 2019

Сценарий видимости компонента формы метки оценивается только при отображении экрана, поэтому он не будет обновлять видимость после проверки соединения JDBC.

Вы можете обновить метку программно, добавив «ВыполнитьСценарий "action to" Список действий "компонента формы кнопки:

String errorMessage = (String)context.getVariable("mysqlTestError");
FormComponent formComponent = formEnvironment.getFormComponentById("ID of label");
formComponent.setVisible(!errorMessage.isEmpty());
((JLabel)formComponent.getConfigurationObject()).setText(errorMessage);

return true;

В install4j 6 параметр" formEnvironment "недоступен в списках действий, и вам придется получить его через

FormEnvironment formEnvironment = ((FormPanelContainer)context.getScreenById("ID of screen")).getFormEnvironment();
...