提问者:小点点

为什么按钮什么都不做?JavaFX


因此,我使用javafx创建了这个应用程序,它有一个登录屏幕,但我在这方面没有任何成功,我已经在这个项目的这个小部分工作了一些天,它根本不能以任何方式工作。我尝试这样做,我看了一些教程,其中大部分都是像下面的代码一样,但它对我来说不起作用,如果有人能帮我解释为什么我的标签文本没有改变(这就是我如何测试登录是否成功),这将是很好的,下面是代码:

package application;


import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("/view/telaLogin.fxml"));
        stage.setTitle("morrer");
        stage.setScene(new Scene(root, 380, 450));
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

控制器:

package controller;

import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.event.ActionEvent;

public class LoginController {

    @FXML
    private TextField username;

    @FXML
    private PasswordField pfSenha;

    @FXML
    private Label labelTeste;

    public void login(ActionEvent event) throws Exception {
        if(username.getText().equals("admin") && pfSenha.getText().equals("admin")) {
            labelTeste.setText("sucess");
        } else {
            labelTeste.setText("fail");
        }
    }
}

FXML格式

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>

<BorderPane fx:id="telaLogin" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="333.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.LoginController">
    <center>
        <VBox alignment="CENTER" prefHeight="408.0" prefWidth="333.0" BorderPane.alignment="TOP_CENTER">
            <children>
                <TextField fx:id="username" alignment="TOP_CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="184.0" promptText="Usuáro">
                    <VBox.margin>
                        <Insets />
                    </VBox.margin>
                </TextField>
            <PasswordField fx:id="pfSenha" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="184.0" promptText="  Senha">
               <VBox.margin>
                  <Insets top="50.0" />
               </VBox.margin>
            </PasswordField>
            <Button fx:id="btnEntrar" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" text="Button">
               <VBox.margin>
                  <Insets right="25.0" top="50.0" />
               </VBox.margin>
            </Button>
            </children>
        </VBox>
    </center>
   <bottom>
      <Label fx:id="labelTeste" prefHeight="23.0" prefWidth="289.0" BorderPane.alignment="CENTER" />
   </bottom>
</BorderPane>

共1个答案

匿名用户

按钮不执行任何操作,因为FX不知道它应该在您的登录控制器中调用登录方法。按照此 FX GUI 教程,您必须在 onAction 属性中指定调用方法。所以你的按钮应该被定义:

<Button onAction="#login" fx:id="btnEntrar" maxHeight="-Infinity" maxWidth="-Infinity" 
        minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" text="Button">