2016-08-22 6 views
0

Ist es möglich, einen benutzerdefinierten Dialog in JavaFX zu erstellen, der kein Fenster auf Betriebssystemebene ist? (Es wäre ein Popup-Fenster über allem anderen auf der Hauptbühne, das das Anwendungsfenster nicht verlassen kann.), D. H. Ein Adobe/Apache Flex-Stil-Dialog, für jeden bekannt.Benutzerdefinierter Dialog/Popup im Hauptfenster/Bühne mit JavaFX

+1

ControlsFX hatte diese Funktion (siehe leichtgewichtige Dialoge) (http://fxexperience.com/controlsfx/features/dialogs/)). Neuere Builds von ControlsFX [ließen jedoch die Leichtgewichtdialogfunktion fallen] (http://stackoverflow.com/questions/26341152/controlsfx-dialogs-deprecated-for-what). Stattdessen verwendet ControlsFX jetzt nur die in der JavaFX-Core-API implementierten Dialoge, bei denen es sich um eigenständige Phasen handelt. Vielleicht möchten Sie einige [alte Zweig Quellcode von ControlsFX] (https://bitbucket.org/controlsfx/controlsfx/branches/) überprüfen, um zu sehen, wie sie ihre ursprüngliche leichte Dialogimplementierung erreicht. – jewelsea

+0

ControlsFX [leichte Dialogquellimplementierung] (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) (jetzt nicht unterstützt). – jewelsea

Antwort

1

Es ist eigentlich ganz einfach und ohne die Notwendigkeit, 3rd-Party-Bibliothek zu verwenden:

Ihre Stammcontainer Einbetten in stackpane und über die Spitze setzen Ankerscheibe, Dialogfeld-Steuerelement erstellen (Behälter/Container + Kontrollen).

Um zu demonstrieren, ich hier, was bedeutet, eine kleine fxml Datei ist:

<?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> 

Sieht aus wie: enter image description here

Sie es mit Eigenschaften, Hörer beweglich machen. Es erfordert einige Arbeit Knospe machbar.

Bud als jewelsea erwähnt controlsfx hat bereits, was Sie brauchen, implementiert, wenn ich mich richtig erinnere sie auch controlfx Beispiele Jar zur Verfügung gestellt, wo Sie Quellcode und alle enthaltenen Sachen in Aktion sehen können, zuerst einen Blick darauf, wenn etwas darin passt Ihre Bedürfnisse. Es ist wirklich trivial, um es dann von diesem Punkt an zu implementieren, ich hatte nur Probleme in der Vergangenheit mit einer der Steuerelemente, wenn ich auf neue Version von Java aktualisiert.

+0

Sie brauchen es nicht wirklich, um beweglich zu sein, nur ein statischer Behälter wie der sollte den Trick machen! – User

Verwandte Themen