Уведомление ControlsFX не работает в контроллере [дубликат]

Попробуйте это

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query('SELECT * FROM Users WHERE UserName LIKE $username');

if($result){
while($row = mysqli_fetch_array($result))
{
    echo $row['FirstName'];
}
}
4
задан hamid mousavi 25 December 2015 в 12:40
поделиться

2 ответа

Я понимаю, что это исключение возникает, когда этап переходит в режим скрытия, а компонент уведомления не может найти этап, когда уведомление должно отображаться на этапе. После поиска в Интернете я нахожу два решения этой проблемы.

Решение 1:

Откройте сцену и покажите уведомление. Таким образом, мы должны проверить, что если сцена была скрыта, откройте ее и покажите уведомление. Чтобы сделать это, мы должны добавить это условие в метод CreateNotification:

Stage stage = (Stage)  button.getScene().getWindow();
     if (!stage.isShowing()){
             stage.show();
     }

Решение 2:

В этом решении мы создаем фиктивный этап и устанавливаем его непрозрачность в ноль, а затем, скрыть основную сцену. Я нахожу это решение по этой ссылке и помещаю код в здесь :

public void createDummyStage() {
    Stage dummyPopup = new Stage();
    dummyPopup.initModality(Modality.NONE);
    // set as utility so no iconification occurs
    dummyPopup.initStyle(StageStyle.UTILITY);
    // set opacity so the window cannot be seen
    dummyPopup.setOpacity(0d);
    // not necessary, but this will move the dummy stage off the screen
    final Screen screen = Screen.getPrimary();
    final Rectangle2D bounds = screen.getVisualBounds();
    dummyPopup.setX(bounds.getMaxX());
    dummyPopup.setY(bounds.getMaxY());
    // create/add a transparent scene
    final Group root = new Group();
    dummyPopup.setScene(new Scene(root, 1d, 1d, Color.TRANSPARENT));
    // show the dummy stage
    dummyPopup.show();
}

Как я уже упоминал ниже, мы должны вызвать этот метод, прежде чем скрыть основную сцену:

 @FXML
public void handleSysTryAction(ActionEvent event) {
    Stage stage = (Stage) button.getScene().getWindow();
    createDummyStage();
    stage.hide();
}

Я реализую это два решения, и все работает хорошо. Если у вас есть лучшее решение для этой проблемы, пожалуйста, поставьте здесь

Вы можете загрузить весь проект Netbeans из моего Dropbox

4
ответ дан hamid mousavi 27 August 2018 в 03:39
поделиться

Я не мог понять, почему первое решение хамида не работало для меня, пока я не отлаживал создание уведомлений. Я узнал, что помимо необходимости, чтобы Window был isShowing, он тоже должен быть isFocused!

Мое решение состоит в том, чтобы вызвать что-то вроде этого метода до Notifications.show():

private void focusStage() {
    final Stage stage = (Stage) button.getScene().getWindow();
    if (!stage.isShowing()) {
        stage.show();
    }
    if (!stage.isFocused()) {
        stage.requestFocus();
    }
}
0
ответ дан Hawk 27 August 2018 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: