首页 > 解决方案 > 在按钮上添加 ContextMenu 时,JavaFX 场景构建器冻结(然后崩溃)

问题描述

我对 Scene Builder 有疑问。我想在按钮上添加 ContextMenu。当我将 ContextMenu 拖放到按钮上时,它工作正常(它出现在层次结构选项卡中)。但是,当我在 Hierarchy 选项卡中单击预定义的 MenuItem(在 ContextMenu 下)时,Scene Builder 会冻结,我必须将其关闭。

有人可以帮我吗?我知道我可以在 Java 代码中创建一个 ContextMenu,但我想在 Scene Builder 中执行它(我想让 ContextMenu 在您将鼠标悬停在按钮上时弹出,所以我还需要编辑它的触发器 - 有人可以请告诉我怎么做?)。

有崩溃

我正在使用 Java 13 和 Scene Builder 11。如您所见,程序没有响应。

我很感激任何帮助。谢谢。

编辑: 这是我从 EventViewer 得到的。我还查看了 Scene Builder,根据“关于 JavaFX Scene Builder”,应该有一个名为 scenebuilder-11.0.0.log的日志文件(C:\Users\ZD\AppData\Local\Temp\scenebuilder-11.0.0.日志)。但是没有日志文件(即使在文件资源管理器中搜索也没有找到任何东西)。

资源

OpenJDK 平台二进制文件

概括

该程序停止响应并被终止。

描述

该问题导致该程序停止与 Windows 一起工作。失败应用程序的路径:C:\Program Files\SceneBuilder\SceneBuilder.exe

问题签名

问题事件名称: AppHangB1

应用程序名称: SceneBuilder.exe

应用程序版本: 11.0.1.0

应用时间戳: 5bf25cd1

进程失败的签名: c858

进程故障类型: 134217728

操作系统版本: 10.0.18362.2.0.0.256.121

另一个进程失败签名1:c858a8fd12ba3c4e845361b2e92ff131

另一个进程失败签名2:9431

另一个进程失败签名3:9431e8f7e11013654814c09debfafb79

另一个进程失败签名 4:c858

另一个进程失败签名5:c858a8fd12ba3c4e845361b2e92ff131

另一个进程失败签名6:9431

另一个进程失败签名7:9431e8f7e11013654814c09debfafb79

有关此问题的更多信息

集 ID: 772d0501a48434cd5a8430efceaeecf6 (1910705948434820342)

这是Sample.fxml

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

<?import javafx.scene.canvas.Canvas?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.FlowPane?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.paint.LinearGradient?>
<?import javafx.scene.paint.Stop?>
<?import javafx.scene.text.Font?>


<StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="611.0" prefWidth="990.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <children>
      <AnchorPane id="k" fx:id="mainPanel" prefHeight="602.0" prefWidth="893.0" styleClass="root" stylesheets="@application.css">
         <children>
            <Button fx:id="button" layoutX="14.0" layoutY="14.0" mnemonicParsing="false" onAction="#handleButton" prefHeight="407.0" prefWidth="403.0" styleClass="MyButton" stylesheets="@application.css" text="Button" AnchorPane.bottomAnchor="190.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="573.0" AnchorPane.topAnchor="14.0">
               <font>
                  <Font name="System Bold" size="83.0" />
               </font>
               <textFill>
                  <LinearGradient endX="0.5095238095238095" endY="0.8428571428571429" startX="0.5285714285714286" startY="0.26666666666666666">
                     <stops>
                        <Stop color="BLACK" />
                        <Stop color="#97b83e" offset="0.27147766323024053" />
                        <Stop color="#97b83e" offset="0.5154639175257733" />
                        <Stop color="WHITE" offset="1.0" />
                     </stops>
                  </LinearGradient>
               </textFill>
            </Button>
            <ChoiceBox fx:id="choiceBox" accessibleText="lůůůůůůůůůů" layoutX="428.0" layoutY="14.0" prefHeight="25.0" prefWidth="329.0" />
            <ScrollPane layoutX="428.0" layoutY="49.0" prefHeight="555.0" prefWidth="552.0">
               <content>
                  <FlowPane prefHeight="704.0" prefWidth="727.0">
                     <children>
                        <Canvas fx:id="canvas" height="705.0" onDragOver="#mouseDrag" onMouseClicked="#canvasClicked" onMouseDragged="#mouseDrag" width="727.0" />
                     </children>
                  </FlowPane>
               </content>
            </ScrollPane>
         </children>
      </AnchorPane>
      <AnchorPane fx:id="blackPanel" prefHeight="200.0" prefWidth="200.0" styleClass="blackPanel" stylesheets="@application.css">
         <children>
            <Button fx:id="backBtn" layoutX="356.0" layoutY="208.0" mnemonicParsing="false" onMouseClicked="#backBtnClick" prefHeight="195.0" prefWidth="278.0" styleClass="MyButton" text="Go back">
               <font>
                  <Font name="System Bold" size="48.0" />
               </font>
               <textFill>
                  <LinearGradient endX="1.0" endY="1.0">
                     <stops>
                        <Stop color="#1be3a9" />
                        <Stop color="#083797" offset="1.0" />
                     </stops>
                  </LinearGradient>
               </textFill>
            </Button>
         </children>
      </AnchorPane>
   </children>
</StackPane>

这是Controller.java:

public class Controller {

private GraphicsContext gc;
private TranslateTransition tt;

@FXML private Button button;
@FXML private Button backBtn;
@FXML private ChoiceBox<String> choiceBox;
@FXML private Canvas canvas;
@FXML private AnchorPane mainPanel;
@FXML private AnchorPane blackPanel;
@FXML private ContextMenu popup;

public void initialize() {
    choiceBox.setItems(FXCollections.observableArrayList("Výběr1", "Výběr2", "Výběr3", "Výběr4", "Výběr5"));
    gc = canvas.getGraphicsContext2D();

    double x = backBtn.getTranslateX();
    double y = backBtn.getTranslateY();

    tt = new TranslateTransition(Duration.seconds(5), backBtn);
    tt.setToY(-200);
    tt.setToX(-100);

    tt.play();
    tt.setOnFinished((ae) -> {
        backBtn.setTranslateX(x);
        backBtn.setTranslateY(y);
    });

}

@FXML
private void handleButton() {
    mainPanel.setVisible(false);
    blackPanel.setVisible(true);
}

@FXML
private void backBtnClick() {
    tt.stop();
    mainPanel.setVisible(true);
    blackPanel.setVisible(false);
}


@FXML
private void canvasClicked(MouseEvent me) {
    gc.fillOval(me.getX() - 15, me.getY() -15, 30, 30);
}

@FXML
private void mouseDrag(MouseEvent mde) {
    gc.fillOval(mde.getX() - 15, mde.getY() - 15, 30, 30);
}

}

标签: javajavafxjavafx-2contextmenuscenebuilder

解决方案


同样的问题,我找到了一个不完美的解决方案,尝试fx:controller从 fxml 文件中删除Administrateur.


推荐阅读