Javascript или jquery:
var scroll = document.getElementById('messages');
scroll.scrollTop = scroll.scrollHeight;
scroll.animate({scrollTop: scroll.scrollHeight});
Css:
.messages
{
height: 100%;
overflow: auto;
}
Скорее всего, у вас в 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()
работает от первого щелчка, потому что он фактически выполняет логику вместо того, чтобы сначала настроить обработчик.