java - 在按钮上添加 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);
}
}
解决方案
同样的问题,我找到了一个不完美的解决方案,尝试fx:controller
从 fxml 文件中删除并以Administrateur
.
推荐阅读
- c - 在 C 中实现具有邻接表的图
- python - 打印行的次数与其值加一的次数在其他行中出现
- c# - 为什么 MVC Core View 模板不为集合生成代码?
- amazon-cognito - Aws Cognito:如何获取 API 命令行测试的令牌?
- node.js - 节点版本与 npm 过时
- javascript - 由于 onBlur,搜索栏结果不可点击
- azure - 如何将 b2c 身份验证获取的访问令牌从 Angular/MVC 应用程序传递到 Azure API 管理服务到微服务
- nexus - GOCD Nexus 插件无法识别软件包
- sql - 从包 DDL 中提取多个字符串
- event-handling - Nagios 事件处理程序忽略检查间隔