Frage

Ich erstelle eine Anwendung in JavaFx 2.0 und möchte, dass sie bei der Bereitstellung in der Mitte des Fensters eines Browsers angezeigt wird.Ich habe in Google und Yahoo nach diesem Thema gesucht und nichts gefunden.Jede Hilfe wird sehr geschätzt.

War es hilfreich?

Lösung

Sie können eine Kombination aus HBox- und VBox-Bedienfeldern in Ihrer FXML verwenden.Hier ist mein getesteter Code:

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane fx:id="panel1" xmlns:fx="http://javafx.com/fxml" fx:controller="app.MainController">
    <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <VBox alignment="CENTER">
           <Pane fx:id="panel2"></Pane> <!-- YOUR CENTERED CONTENT HERE! -->
        </VBox>
    </HBox>
</AnchorPane>

Das 'panel1' wird im Browserbereich gedehnt.So werden auch die HBox und VBox.Da sie 'center'-Attribute für ihre Kinder haben, wird das' panel2 'zentriert.

Andere Tipps

Sehen Sie sich den Quellcode für den JavaFX Ensemble-Beispiel . Die Ensemble-Anwendung ist so konfiguriert, dass sie ein Browserfenster ausfüllt, unabhängig von der Größe des Fensters. Die Vorgehensweise erfolgt durch Konfiguration im JavaScript, mit dem die App gestartet wird, sowie durch CSS-Formatierung des Divs, in das die Anwendung eingebettet ist.

Hier ist ein Auszug der relevanten Teile des HTML.

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JavaFX 2.0 - Ensemble</title>
    <SCRIPT src="http://java.com/js/dtjava.js"></SCRIPT>

    <script>
      function javafxEmbed_ensemble() {
        dtjava.embed(
          {
            id : 'ensemble',
            url : 'Ensemble.jnlp',
            placeholder : 'javafx-app-placeholder',
            width : '100%',
            height : '100%',
            jnlp_content : '...'
          },
          {
            javafx : '2.0+'
          },
          {}
        );
      }
      dtjava.addOnloadCallback(javafxEmbed_ensemble);
    </script>

    <style>
      html, body, #javafx-app-placeholder, #ensemble-app {  
        margin: 0;  
        overflow: hidden;  
        padding: 0; 
        width: 100%;
        height: 100%; 
      }
    </style>
  </head>
  <body><div id='javafx-app-placeholder'></div></body>
</html>

Wenn Sie etwas anderes als 100% Deckung benötigen, können Sie die 100% -Tags auf beispielsweise 75% setzen und das CSS-Styling anpassen, um die Mitte auf der Seite mit den gewünschten Rändern zu zentrieren.

Die aktuellen Java-Verpackungstools (z. B. das Dienstprogramm javafxpackager) erlauben keine Angabe von Prozentbereichsbreiten. Ich habe hierfür eine Funktionsanforderung in javafx jira erstellt, die Sie erstellen können ein Konto dort, um die Anfrage anzuzeigen. Wenn Sie diese Tools verwenden, um Ihr Bereitstellungs-HTML zu generieren , haben Sie möglicherweise Sie können das Bereitstellungs-HTML manuell oder mithilfe eines Ant-Skripts für die Nachbearbeitung ändern, wie in der Datei build.xml für die Ensemble-Beispielanwendung zu sehen ist.

Verwenden Sie diese FXML

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

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

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="500.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
  <children>
    <HBox id="HBox" alignment="CENTER" spacing="5.0" AnchorPane.bottomAnchor="213.0" AnchorPane.leftAnchor="168.0" AnchorPane.rightAnchor="168.0" AnchorPane.topAnchor="214.0">
      <children>
        <GridPane id="gridPane1" alignment="CENTER" hgap="2.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" vgap="2.0">
          <children>
            <Label id="label1" alignment="CENTER_RIGHT" contentDisplay="RIGHT" text="Username" GridPane.columnIndex="0" GridPane.rowIndex="0" />
            <Label id="label2" alignment="CENTER_RIGHT" text="Password" GridPane.columnIndex="0" GridPane.rowIndex="1" />
            <TextField id="textField1" fx:id="userid" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="0" />
            <PasswordField id="passwordField1" fx:id="password" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
            <Button id="button1" alignment="CENTER_RIGHT" text="Signin" GridPane.columnIndex="1" GridPane.halignment="RIGHT" GridPane.rowIndex="2" />
          </children>
          <columnConstraints>
            <ColumnConstraints halignment="CENTER" hgrow="NEVER" maxWidth="-Infinity" minWidth="-Infinity" percentWidth="0.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
          </columnConstraints>
          <padding>
            <Insets bottom="2.0" left="4.0" right="4.0" top="2.0" />
          </padding>
          <rowConstraints>
            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" vgrow="SOMETIMES" />
          </rowConstraints>
        </GridPane>
      </children>
    </HBox>
  </children>
</AnchorPane>

Könnte Ihr Problem lösen

Versuchen Sie, ein StackPane als Container zu verwenden.Es werden alle darin enthaltenen Knoten zentriert. Torsten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top