在按钮上添加ContextMenu时,JavaFX场景生成器冻结(然后崩溃)。

问题描述 投票:1回答:1

我在使用Scene Builder时遇到了一个问题。我想在一个按钮上添加上下文菜单。当我把ContextMenu拖放到Button上时,它工作得很好(它出现在Hierarchy标签中)。但是当我点击层次结构选项卡中的预定义菜单项(在上下文菜单下)时,场景生成器冻结,我不得不关闭它。

谁能帮我解决这个问题?我知道我可以在Java代码中创建一个ContextMenu,但我想在Scene Builder中做(我想让ContextMenu在你悬停在Button上时弹出,所以我还需要以某种方式编辑它的触发器--有人能告诉我怎么做吗?

有一个崩溃

我使用的是Java 13和Scene Builder 11。如你所见,程序没有响应。

我感谢任何帮助。谢谢你的帮助。

EDIT:这是我从EventViewer得到的。我也看了场景生成器,根据 "关于JavaFX场景生成器",应该有一个日志文件,叫做 场景必达-11.0.0.日志 (C:\Users\ZD\AppData\Local\Temp\scenebuilder-11.0.0.log)。但是没有日志文件(即使在文件资源管理器中搜索也没有找到任何东西)。

源头

OpenJDK平台二进制

概要

程序停止响应并被终止。

说明

该问题导致该程序停止与Windows.Path到失败的应用程序工作。 C:/Program Files/SceneBuilder/SceneBuilder.exe。

问题签名

问题事件的名称。 AppHangB1

应用程序名称。 SceneBuilder.exe

应用程序版本。 11.0.1.0

应用时间戳。 5bf25cd1

签定工艺故障。 c858

工艺故障类型。 134217728

操作系统版本。 10.0.18362.2.0.0.256.121

另一个进程失败签名1C858A8FD12BA3C4E845361B2E92ff131

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

另一个进程失败的签名 39431e8f7e11013654814c09debfafb79

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

另一个进程失败的签名 5C858A8FD12BA3C4E845361B2E92ff131

另一个进程失败的标志 6: 9431

另一个进程失败的标志 79431e8f7e11013654814c09debfafb79

关于这个问题的更多信息

集体识别号:772d0501a48434cd5a8430efceaeecf6 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);
}

}

java javafx javafx-2 contextmenu scenebuilder
1个回答
0
投票

同样的问题,我找到了一个 非完美 溶液,尝试去除 fx:controller 从fxml文件中打开 场景构建器 作为 Administrateur.

© www.soinside.com 2019 - 2024. All rights reserved.