当前位置: 首页 > 知识库问答 >
问题:

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

万俟玉书
2023-03-14

因此,我使用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个答案

长孙波鸿
2023-03-14

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

<Button onAction="#login" fx:id="btnEntrar" maxHeight="-Infinity" maxWidth="-Infinity" 
        minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" text="Button">
 类似资料:
  • 在Java中,什么与Python的pass等效?我意识到我可以使用continue语句或不完成语句体来实现这种效果,但我喜欢使用pass语句。

  • 我的配置文件是类路径的路径。至少我认为是这样。我放置了log4j。资源文件夹中的属性文件,而log4j对此不做任何处理。即使我删除了它,也不会发生错误。 任何人都可以看到,我在使用maven LoggerTest的内容: 程序输出: log4j的内容。属性: 在波姆。xml并不是什么不同寻常的东西,只是一个依赖组织。阿帕奇。登录中。log4j log4j内核2.17.2,编译器源目标是16,没有插

  • 这是我的第一个JMH基准测试。我可能做错了一切,但是... 我的基准看起来是这样的 是我开始的...等了又等,然后杀了它。我怀疑在< code>@Setup中有问题,所以我简化了它,但是什么都没有改变。这场赛跑开始时相当乐观... 然后什么都没发生。过了很长时间,它继续写下20行像 和5行像 然后它输出一些结果 并更正其估计的eta: 我的是否比我想象的更频繁地被调用,或者还有什么其他原因导致了缓

  • 问题内容: 我有以下定制JPanel,并且已使用Netbeans GUI构建器将其添加到我的框架中,但是背景不会改变!我可以看到用g.fillOval()绘制的圆圈。怎么了? 问题答案: 如果面板“不透明”(透明),您将看不到背景色。

  • 在Windows10中输入以下命令并启动无头chrome版本时,没有发生任何事情(有/没有扩展): 它只是悄悄地返回到命令行,我找不到任何pdf文件。 有人遇到过同样的问题并设法解决了吗? 我正在使用:Google Chrome 63.0.3239.84(官方版本)(64位)(队列:63_Win_84)

  • 问题内容: 为什么我们需要特定于数据库的功能,例如mysql_real_escape_string()?addlashes()不能做什么? 暂时忽略了参数化查询的高级替代方案,是一个仅使用addlashes()的web应用仍然容易受到SQL注入的攻击,如果是,怎么办? 问题答案: 当处理多字节编码的字符串时,加号通常不够好。