Проблема с отображением сцены - PullRequest
1 голос
/ 06 мая 2020

У меня проблема при работе с javafx. Я хочу отобразить одну стадию со сценой, содержащей панель (основная панель с меню), содержащая панель (информацию).

Моя проблема заключается в следующем: либо я вижу содержимое двойной панели в окне ( как показано на рисунке ниже) или пустую панель в зависимости от порядка действий между заданной сценой, центральной панелью и окном отображения. Отображение ошибок:

Вот что я хочу видеть:

UI that I want

Код, который я использую:

package org.HangmanGameFXViews;

import java.io.IOException;


import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Main extends Application {
    private Stage stagePrincipal;

    public Stage getStagePrincipal() {
        return stagePrincipal;
    }


    private BorderPane mainPane;
    private AnchorPane homePane;
    private AnchorPane rulesPane;

    @Override
    public void start(Stage primaryStage) {
        stagePrincipal = primaryStage;
        stagePrincipal.setTitle("Application de gestion de personnes");
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(Main.class.getResource("view/MainContainer.fxml"));
        try {
            mainPane = loader.load();
        } catch (IOException e) {
            e.printStackTrace();
        }


        FXMLLoader loader2 = new FXMLLoader();
        loader2.setLocation(Main.class.getResource("view/Home.fxml"));
        try {
            homePane = loader2.load();
        } catch (IOException e) {
            e.printStackTrace();
        }

        mainPane.setCenter(homePane);
        Scene scene = new Scene(mainPane);
        stagePrincipal.setScene(scene);
        stagePrincipal.show();



    }

    public static void main(String[] args) {
        launch(args);
    }

}

The Home.f xml:

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

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="473.0" prefWidth="378.0" stylesheets="@textarea.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label alignment="CENTER" contentDisplay="CENTER" maxWidth="1.7976931348623157E308" prefHeight="27.0" prefWidth="368.0" text="Bienvenue dans le jeu du PENDU" textAlignment="CENTER">
         <font>
            <Font name="System Bold" size="18.0" />
         </font>
      </Label>
      <ImageView fitHeight="291.0" fitWidth="539.0" layoutX="10.0" layoutY="27.0" pickOnBounds="true" preserveRatio="true">
         <image>
            <Image url="@../../../../resources/pictures/homePicture.jpg" />
         </image>
      </ImageView>
      <TextArea editable="false" layoutX="8.0" layoutY="318.0" prefHeight="147.0" prefWidth="368.0" text="Vous avez 7 coups pour trouver le mot cacher et si vous réussissez... et bien on recommence!&#10;&#10;Plus vous avez trouvez de mots, plus votre score grandira!! Alors à vous de jouer!&#10;PROVERBE : &quot;Pas vu, pas pris!&#10;                     Pris! PENDU!!!&quot;" wrapText="true" />
   </children>
</AnchorPane>

The MainContainers.f xml:

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

<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.HangmanGameFXViews.view.MenuesActions">
   <top>
      <MenuBar maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="500.0" prefWidth="400.0" BorderPane.alignment="CENTER">
         <menus>
            <Menu mnemonicParsing="false" text="Fichiers">
               <items>
                  <MenuItem mnemonicParsing="false" text="Nouveau" />
                  <MenuItem mnemonicParsing="false" onAction="#switchToRules" text="Règles" />
                  <MenuItem mnemonicParsing="false" text="Quitter" />
               </items>
            </Menu>
            <Menu mnemonicParsing="false" text="À propos" />
         </menus>
      </MenuBar>
   </top>
</BorderPane>

The Rules.f xml:

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

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>


<AnchorPane prefHeight="413.0" prefWidth="459.0" stylesheets="@textarea.css" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1">
   <children>
      <Pane prefHeight="200.0" prefWidth="459.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <Label alignment="CENTER" contentDisplay="CENTER" layoutX="35.0" layoutY="3.0" maxWidth="1.7976931348623157E308" text="Le jeu du PENDU" textAlignment="CENTER">
               <font>
                  <Font name="Arial Black" size="14.0" />
               </font>
            </Label>
            <TextArea editable="false" layoutY="25.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="76.0" prefWidth="459.0" text="Vous avez 7 coups pour trouver le mot caché ! Et si vous réussissez : on recommence !&#10;Plus vous acez trouvé de mots, plus votre score grandira !! Alors à vous de jouer !" wrapText="true" />
            <TextArea editable="false" layoutY="118.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="179.0" prefWidth="459.0" text="COMPTES DES POINTS :&#10;                        &#10;                           Mot trouve sans erreur...............................100Pts&#10;                           Mot trouve avec 1 erreur.............................50Pts&#10;                           Mot trouve avec 2 erreurs...........................35Pts&#10;                           Mot trouve avec 3 erreurs...........................25Pts&#10;                           Mot trouve avec 4 erreurs............................15Pts&#10;                           Mot trouve avec 5 erreurs............................10Pts&#10;                           Mot trouve avec 6 erreurs............................5Pts" wrapText="true">
               <font>
                  <Font name="System Bold" size="12.0" />
               </font>
            </TextArea>
            <TextArea editable="false" layoutY="296.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="117.0" prefWidth="459.0" text="Je vous souhaite bien du plaisir ....&#10;Et si vous pensez pouvoir trouver un mot en un coup, c'est que vous pensez que le dictionnaire est petit !&#10;Hors, pour votre information il comprend plus de 330 000 mots ... donc bonne chance." wrapText="true" />
         </children>
      </Pane>

Спасибо за любую помощь.

1 Ответ

1 голос
/ 07 мая 2020

Я думаю, что MRE для требуемого макета можно продемонстрировать с помощью следующих 3 файлов:

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws IOException {

        BorderPane mainPane = FXMLLoader.load(Main.class.getResource("MainContainer.fxml"));
        AnchorPane homePane =  FXMLLoader.load(Main.class.getResource("Home.fxml"));
        mainPane.setCenter(homePane);

        Scene scene = new Scene(mainPane);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

MainContainer.f xml:

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

<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="500.0" 
xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <MenuBar maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"  prefWidth="400.0" BorderPane.alignment="CENTER">
      <!--THIS WAS THE REASON FOR THE WRONG LAYOUT prefHeight="500.0" --> 
         <menus>
            <Menu mnemonicParsing="false" text="Fichiers">
               <items>
                  <MenuItem mnemonicParsing="false" text="Nouveau" />
                  <MenuItem mnemonicParsing="false" text="Quitter" />
               </items>
            </Menu>
            <Menu mnemonicParsing="false" text="À propos" />
         </menus>
      </MenuBar>
   </top>
</BorderPane>

Home.f xml:

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

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="473.0" prefWidth="378.0" stylesheets="@textarea.css" xmlns="http://javafx.com/javafx/11.0.1" 
xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label alignment="CENTER" contentDisplay="CENTER" maxWidth="1.7976931348623157E308" prefHeight="27.0" prefWidth="368.0" 
      text="Bienvenue dans le jeu du PENDU" textAlignment="CENTER">
         <font>
            <Font name="System Bold" size="18.0" />
         </font>
      </Label>
      <ImageView fitHeight="291.0" fitWidth="539.0" layoutX="10.0" layoutY="27.0" pickOnBounds="true" preserveRatio="true">

      </ImageView>
      <TextArea editable="false" layoutX="8.0" layoutY="318.0" prefHeight="147.0" prefWidth="368.0" 
      text="Vous avez 7 coups pour trouver le mot cacher et si vous réussissez... et bien on recommence!&#10;&#10;Plus vous avez trouvez de mots, plus votre score grandira!! Alors à vous de jouer!&#10;PROVERBE : &quot;Pas vu, pas pris!&#10;                     Pris! PENDU!!!&quot;" wrapText="true" />
   </children>
</AnchorPane>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...