JavaFx Filechooser - диалог открытия файла не открывается одним щелчком [дубликат]

Javascript или jquery:

var scroll = document.getElementById('messages');
   scroll.scrollTop = scroll.scrollHeight;
   scroll.animate({scrollTop: scroll.scrollHeight});

Css:

 .messages
 {
      height: 100%;
      overflow: auto;
  }
0
задан Kattia 26 March 2016 в 22:15
поделиться

1 ответ

Скорее всего, у вас в FXML есть следующее:

<Button fx:id="forgot" onAction="#forgetPasswordClicked" />

Это заставляет вашу кнопку forgot вызывать ваш метод forgetPasswordClicked(). Но вместо того, чтобы определять вашу логику, которая будет выполняться при нажатии на кнопку, первый раз, когда вы говорите: «Когда эта кнопка нажата, поместите action event на мою кнопку, которая вызовет setUpWindow()»

forgot.setOnAction(e -> ForgotPassword.setUpWindow());

Таким образом, ваш первый щелчок «устанавливает» логику вашей кнопки. Второй щелчок фактически выполняет его. Чтобы решить эту проблему, либо сразу используйте свою логику как таковую:

public void forgetPasswordClicked() {
    ForgotPassword.setUpWindow();
}

или не определяйте метод, который будет вызываться в вашем fxml, и переместите инициализацию вашей кнопки (установка прослушивателя действий) на ваша инициализация выглядит следующим образом:

public class ControllerSignIn implements Initializable {
    @FXML
    private Button forgot;
    @FXML
    private Button back;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        forgot.setOnAction(e -> ForgotPassword.setUpWindow());
        back.setOnAction(e -> ForgotPassword.closeWindow());
    }
}

. Именно поэтому ваш метод signInClicked() работает от первого щелчка, потому что он фактически выполняет логику вместо того, чтобы сначала настроить обработчик.

3
ответ дан Jaims 19 August 2018 в 07:37
поделиться
  • 1
    Спасибо @Jaims за вашу помощь, первый вариант работал просто отлично! Я также хотел попробовать второй, но без успеха, возможно, я сделал некоторую ошибку, поэтому я хотел спросить, какой вариант лучше, когда я пытаюсь следовать MVC. – Kattia 27 March 2016 в 13:19
  • 2
    @Kattia В обоих вариантах вы следуете за MVC. Лично я предпочитаю помещать вызовы методов в FXML (так что первый вариант). Это не мешает моему коду. Но, скорее всего, это то, что вы предпочитаете лично. Кроме того, когда вы делаете что-то более сложное, чем прослушиватель действий на кнопке, вам придется инициализировать его заранее. Пока вам это не нужно, просто введите его в FXML. – Jaims 27 March 2016 в 14:19
  • 3
    Большое спасибо :) – Kattia 27 March 2016 в 14:44
Другие вопросы по тегам:

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