Функции JavaFX не работают, хотя ошибок нет - PullRequest
0 голосов
/ 14 марта 2020

Я слежу за уроком по тогдашнему Уэстостону и наткнулся на что-то вроде контрольно-пропускного пункта. Насколько я понимаю, идентификатор в файле .JFXM эквивалентен переменной в классе контроллера. Команда onAction является ссылкой на функцию в классе контроллера.

Ссылка на учебник: https://www.youtube.com/watch?v=LMdjhuYSrqg

Что я не понимаю:

  1. Почему мне нужно инициализировать переменную public Button loginBtn = new Button();, когда в учебнике он этого не делает.

  2. Почему setText ничего не делает loginBtn.setText("aahh!");

  3. Если бы я хотел получить текст из поля, я бы использовал System.out.println(FXuserLoginName.getText()); Какие результаты в ошибке, если переменная не инициализирована. Если он инициализирован, ничего не происходит.

Любая помощь приветствуется. Ниже приведен код:

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;

public class Jfx extends Application {
    public Button loginBtn = new Button();
    TextField FXuserLoginName;
    PasswordField userLoginPassword;

    @Override
    public void start(Stage primaryStage) throws Exception {
        try {

            Parent root = FXMLLoader.load(getClass().getResource("Login.fxml"));    
            Scene scene = new Scene(root,208,208);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setTitle("Odin");
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void ActionloginButton() {//logs into database, loginButton is connected to Login.fxml there #loginButton is present
        loginBtn.setText("aahh!");
        System.out.println("Login button..");
        //System.out.println(FXuserLoginName.getText());
        System.out.println("Got text");
    }
}

А вот мой контроллер

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="150.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Jfx">
   <children>
      <TextField id="FXuserLoginName" layoutX="29.0" layoutY="37.0" promptText="Username" />
      <PasswordField id="userLoginPassword" layoutX="29.0" layoutY="76.0" maxHeight="-Infinity" maxWidth="-Infinity" promptText="Password" />
      <Button id="loginBtn" layoutX="81.0" layoutY="113.0" mnemonicParsing="false" text="Login" onAction="#ActionloginButton"/>
   </children>
</AnchorPane>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...