因此,我使用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>
按钮不执行任何操作,因为FX不知道它应该在您的登录控制器中调用
登录方法
。按照此 FX GUI 教程,您必须在 onAction
属性中指定调用方法。所以你的按钮应该被定义:
<Button onAction="#login" fx:id="btnEntrar" maxHeight="-Infinity" maxWidth="-Infinity"
minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" text="Button">