使用JavaFX在主窗口/舞台内自定义对话框/弹出式菜单

问题描述:

是否可以在JavaFX中创建不是OS级窗口的自定义对话框? (这是一个弹出窗口,显示在主舞台上的所有其他位置,不能离开应用程序窗口。)例如,Adobe/Apache Flex样式对话框,适用于任何熟悉的人。使用JavaFX在主窗口/舞台内自定义对话框/弹出式菜单

+1

ControlsFX用于具有此功能([请参阅轻量级对话框](http://fxexperience.com/controlsfx/features/dialogs/))。然而,ControlsFX的最近版本[删除了轻量级对话框功能](http://*.com/questions/26341152/controlsfx-dialogs-deprecated-for-what)。相反,ControlsFX现在仅使用在JavaFX核心API中实现的对话框,这些对话框是自包含的阶段。您可能希望查看一些[ControlsFX的旧分支源代码](https://bitbucket.org/controlsfx/controlsfx/branches/),以了解它们是如何实现其原始轻量级对话框实现的。 – jewelsea

+0

ControlsFX [轻量级对话框源代码实现](https://bitbucket.org/controlsfx/controlsfx/src/371bca0e905536ca6742d181fdade07258260659/controlsfx/src/main/java/org/controlsfx/dialog/LightweightDialog.java?at=8.0.6_20&fileviewer=file -view-default)(现在不支持)。 – jewelsea

它实际上很容易的,而无需使用第三方库:

嵌入内stackpane和过顶你的根容器放锚窗格,创建对话框控制(容器/容器+控制)。

为了证明我的意思在这里是一个小FXML文件:

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

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


<StackPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: black;" /> 
     <AnchorPane prefHeight="200.0" prefWidth="363.0"> 
     <children> 
      <BorderPane layoutX="84.0" layoutY="123.0" prefHeight="99.0" prefWidth="227.0" style="-fx-background-color: red;"> 
       <center> 
        <Button mnemonicParsing="false" text="Button" BorderPane.alignment="CENTER" /> 
       </center> 
      </BorderPane> 
     </children> 
     </AnchorPane> 
    </children> 
</StackPane> 

的样子: enter image description here

你可以把它移动与性能,听者。这将需要一些可行的工作。

芽作为jewelsea提到controlsfx已经是你需要实现的,如果我没有记错的话,他们还提供了controlfx样本jar,你可以在其中看到sourcecode和所有包含的东西,首先看看如果有什么东西适合您的需求。从那时开始实现它真的很微不足道,当我更新到新版本的Java时,我在过去遇到过一个控制问题时遇到了麻烦。

+0

不是真的需要它是可移动的,只是一个像这样的静态容器应该做的伎俩! – User