有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JavaFX FXML不响应文本输入或单击(事件)

我有一个简单的JavaFx项目,主类是eclipsejavafx项目的默认类

我已经定义了一个控制器,它看起来像是由SceneBuilder生成的框架,所以几乎所有东西都是默认的

当我运行我的应用程序时,在UI中,我不能向两个文本字段输入数据,也不能查看按钮事件处理程序的控制台输出

欢迎。fxml文件,如下所示(删除所有其他代码以简化)

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

  <?import javafx.geometry.*?>
  <?import javafx.scene.effect.*?>
  <?import javafx.scene.image.*?>
  <?import javafx.scene.paint.*?>
  <?import javafx.scene.*?>
  <?import javafx.scene.canvas.*?>
  <?import javafx.scene.control.*?>
  <?import javafx.scene.text.*?>
  <?import java.lang.*?>
  <?import javafx.scene.layout.*?>

  <Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mouseTransparent="true" prefHeight="720.0" prefWidth="1100.0" style="-fx-background-color: #000000;" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Welcome_Controller">
     <children>
        <Button alignment="CENTER" contentDisplay="CENTER" depthTest="ENABLE" graphicTextGap="10.0" layoutX="496.0" layoutY="360.0" mouseTransparent="true" onAction="#OnSignInClick" opacity="0.82" prefHeight="38.0" prefWidth="109.0" style="-fx-background-radius: 100;" text="Sign In" textAlignment="CENTER" />
        <Button alignment="CENTER" contentDisplay="CENTER" layoutX="496.0" layoutY="409.0" mnemonicParsing="false" opacity="0.82" prefHeight="38.0" prefWidth="109.0" style="-fx-background-radius: 1000;" text="Sign Up" textAlignment="CENTER" />
        <Text fill="WHITE" layoutX="899.0" layoutY="702.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Copyright 2015, Dawood and Irtiza." />
        <TextField fx:id="tf_username" layoutX="427.0" layoutY="277.0" prefHeight="25.0" prefWidth="279.0" promptText="Enter new Username if you dont have an account " />
        <TextField fx:id="tf_password" layoutX="427.0" layoutY="312.0" prefHeight="25.0" prefWidth="279.0" promptText="Enter new password if you dont have an account" />
        <Label layoutX="355.0" layoutY="281.0" text="Username :" textFill="WHITE">
           <font>
              <Font size="14.0" />
           </font>
        </Label>
        <Label layoutX="355.0" layoutY="315.0" text="Password :" textFill="WHITE">
           <font>
              <Font size="14.0" />
           </font>
        </Label>
     </children>
  </Pane>

欢迎您的控制器。java看起来像是场景生成器生成的默认骨架,代码如下

    package application;


    import java.io.IOException;
    import java.net.URL;
    import java.util.ResourceBundle;

    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.fxml.Initializable;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TextField;
    import javafx.stage.Stage;

    public class Welcome_Controller implements Initializable {

        @FXML //  fx:id="btn_xxx"
        private Button btn_signin; // Value injected by FXMLLoader
        @FXML 
        private Button btn_signup;
        @FXML
        private TextField tf_username;
        @FXML
        private TextField tf_password;

        @Override // This method is called by the FXMLLoader when initialization is complete
        public void initialize(URL fxmlFileLocation, ResourceBundle resources)
        {
            //assert btn_signin != null : "fx:id=\"btn_signin\" was not injected: check your FXML file 'welcome.fxml'.";
            //assert btn_signup != null : "fx:id=\"btn_signup\" was not injected: check your FXML file 'welcome.fxml'.";
            // initialize your logic here: all @FXML variables will have been injected
        }

        @FXML private void OnSignInClick(ActionEvent event) throws IOException
        {   
            System.out.println("clicked");
        }

        @FXML
        void OnSignupClick(ActionEvent event) {
            System.out.println("clicked 2");

        }

    }

编辑:这是具有main方法的类

包装申请

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

    public class Main extends Application {
        @Override
        public void start(Stage primaryStage) {
            try {
                Pane root = (Pane) FXMLLoader.load(Main.class.getResource("welcome.fxml"));
                Scene scene_1 = new Scene(root,1100,720);
                //scene_1.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                //we can set the different scenes when it need to
                primaryStage.setScene(scene_1);
                primaryStage.setTitle("Translate Messenger");
                primaryStage.show();

            } catch(Exception e) {
                System.out.println("main may exception");
                e.printStackTrace();
            }
        }

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

当我运行我的应用程序时,在UI中,我不能向两个文本字段输入数据,也不能查看按钮事件处理程序的控制台输出

任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    您已经使用mouseTransparent="true"使根窗格对鼠标透明。这意味着任何鼠标点击根窗格或其任何子节点(即整个UI)都将被忽略。因此,不能使用鼠标单击按钮或将焦点放在文本字段上。(请注意,您可以使用tab键导航UI,并在有焦点时使用空格键生成按钮单击。)

    从窗格和“登录”按钮中删除mouseTransparent="true",它将正常工作