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

Javafx 和 fxml 按钮不可单击。

黄扬
2023-03-14

我有一个混乱的代码,我正在使用带有Splash Screen的场景生成器构建一个程序。我在AnchorPane(根)顶部的TitlePane上构建了一个按钮。我设置了fx:id,运行时无法单击任何内容。甚至没有标题窗格中的选项卡或任何按钮。有趣的是,我可以用tab键和空格键遍历,然后用鼠标点击它。到底发生了什么,我该怎么解决?

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.animation.FadeTransition;
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.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.AnchorPane;
import javafx.stage.FileChooser;
import javafx.util.Duration;

/** * * @作者heecheonpark*/公共类FXMLDocumentController实现可初始化{

@FXML
private Label label;

@FXML
private AnchorPane root;

@FXML
private TitledPane tPane;

@FXML
private AnchorPane aPane1;

@FXML
private ListView listView;

@FXML
private Button addBtn;

@FXML
private void addButtonAction(ActionEvent event) {
            FileChooser fc = new FileChooser();
            File selectedFile = fc.showOpenDialog(null);
            if (selectedFile != null){
                listView.getItems().add(selectedFile.getName());  
            }
            else{
                System.out.println("The file is not valid.");
            }
}

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
    if (!MajorProject.isSplashLoaded){
    loadSplashScreen();

    }
}    
private void loadSplashScreen(){
    try {
        AnchorPane aPane = FXMLLoader.load(getClass().getResource("SplashFXML.fxml"));
        root.getChildren().addAll(aPane);
        FadeTransition fadeIn = new FadeTransition(Duration.seconds(3), aPane);
        fadeIn.setFromValue(0);
        fadeIn.setToValue(1);
        fadeIn.setCycleCount(1);

        FadeTransition fadeOut = new FadeTransition(Duration.seconds(3), aPane);
        fadeOut.setFromValue(1);
        fadeOut.setToValue(0);
        fadeOut.setCycleCount(1);

        fadeIn.play();

        fadeIn.setOnFinished((e) -> {
        fadeOut.play();
        MajorProject.isSplashLoaded = true;
        });

        fadeOut.setOnFinished((e) -> {
            try { 
                Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));


            } catch (IOException ex) {
                Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
            }

        });

    } catch (IOException ex) {
        Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

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

<?import javafx.scene.effect.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane fx:id="root" focusTraversable="true" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="majorproject.FXMLDocumentController">
   <children>
      <ListView fx:id="listView" layoutX="302.0" layoutY="53.0" prefHeight="304.0" prefWidth="248.0">
         <effect>
            <Glow />
         </effect>
      </ListView>
      <TitledPane fx:id="tPane" animated="false" mouseTransparent="true" text="Product">
         <content>
            <AnchorPane fx:id="aPane1">
               <children>
                  <Button layoutY="131.0" mnemonicParsing="true" text="Button" />
                  <Button fx:id="addBtn" layoutY="104.0" mnemonicParsing="false" onAction="#addButtonAction" text="Add" />
               </children>
            </AnchorPane>
         </content>
      </TitledPane>
   </children>
</AnchorPane>

共有1个答案

施昊然
2023-03-14

这是因为您在 TitledPane 上设置了属性 mouseTransparent=“true”。

在JavaFX中,MouseTransparent属性使任何节点及其所有子节点忽略任何鼠标交互,这就是为什么你不能单击按钮的原因。只需删除它,它应该可以工作。

节点-鼠标透明度属性

 类似资料:
  • 我想包括使用FXML的图标和文本按钮。 我知道在FXML中,我可以用以下代码添加图像: 但我想知道如何将其与按钮代码合并:

  • 主要内容:创建单选按钮,单选按钮组,单选按钮事件,单选按钮焦点单选按钮通常组合在一起,以便用户进行单选,即用户只能在单选按钮列表中选择一个项目。 例如,当选择鞋子尺寸时,我们通常从列表中选择一个尺寸。 单选按钮只能执行:选择或取消选择。 以下代码显示,当放置在中时,只能选择一个。 上面的代码生成以下结果。 创建单选按钮 包中的类有两个构造函数。 要为其标签创建一个带有空字符串的单选按钮,然后再设置标签。 要创建具有指定标签的单选按钮。 方法带有参数可以显式选

  • 我是新来的社区,我真的不知道如何在这里寻求帮助。我试图为我的警报弹出窗口创建一个关闭按钮,但我遇到了语法错误。我还想在窗口完全关闭之前执行一些操作。 这是调用窗口出现的驱动程序: 这是警报的控制器 这是警报的FXML文件 我还尝试使用setOnAction,但发生了相同的错误。 非常感谢!!

  • 主要内容:创建按钮,按钮内容,按钮操作,按钮效果,按钮样式,按钮鼠标事件当用户单击按钮时,JavaFX 类可以触发事件。类扩展了类,可以显示文本,图像或两者都可以。 以下代码显示了如何向添加单击操作侦听器。 上面的代码生成以下结果。 创建按钮 我们使用以下构造函数在JavaFX中创建一个。 创建带有空文本标题的按钮。 创建具有指定文本的按钮。 要创建带有文本和图标的按钮。 按钮内容 创建JavaFX 对象后,我们可以使用以下方法设置文本并设置安装图标。 - 设置按钮的

  • 我有一个JavaFX,有两个按钮(通过SceneBuilder创建)。 我希望其中一个按钮左对齐,另一个右对齐。(见截图) 从文档中,我已经知道如何在Java源代码中实现这一点: 我想知道如何实现这一点而不需要在我的Java文件中编写,但是 我如何只使用SceneBuilder或相应的fxml文件来实现这一点。 *我在Windows上 **这个答案不是我想要的,因为他使用的是工具栏,但我想知道如何

  • 我扩展了JavaFX按钮,如下所示: 现在我希望能够在我的FXML中使用它。大概是这样的: 我如何做到这一点。

  • 我使用GridPane作为舞台的主要场景,布局完全是在FXML文件中定义的。我想有一个按钮在窗口的整个边(即在我的GridPane的所有行上),如下所示: 然而,我就是不能让它工作。更确切地说,它似乎只是按钮不会增加整个高度。我已经为按钮设置了、和,但按钮仍然与其中的文本一样长,并且放在侧面的中心。 我如何使按钮延伸到整个网格窗格?正如开头提到的,我当然已经正确设置了。这并不是按钮没有正确地放置在

  • 我正在使用JavaFX构建一个calander/planner应用程序。该应用程序包括一个单一的GridPane与35(7x5)VBox的。在这些VBox中有任务按钮(在下面实现)。当我右键单击任务框时,它将把文本变成灰色,当我左键单击TsskButton时,我希望它删除按钮。我已经知道的事情。 AnchorPaneNode(扩展VBox)没有静态getChildren()方法 我无法为窗格创建单