Подтвердить что ты не робот

Выравнивание JavaFX HBox

Я работаю над программным обеспечением с использованием JavaFX, и у меня есть глупая, но тревожная проблема.

В некоторой части кода у меня есть HBox, а внутри него три элемента: a image, a label и a VBox.

Проблема в том, что я хотел бы, чтобы image выровнялся влево, то есть рядом с левым полем window и VBox, выровненными вправо, то есть рядом с правая граница window, и я не знаю, как это сделать.

Я пытался использовать VBox.setAlignment(Pos.RIGHT_CENTER), но это не сработало.

4b9b3361

Ответ 1

Это наиболее распространенная проблема выравнивания, когда вы хотите поместить элемент в два угла макета.

Предположим, вы хотите:

HBox
  |
  ImageView (Left)
  Label (Center)
  VBox (Right)

Я очень простое решение - использовать два дополнительных Regions. Один между ImageView и Label. Другое между Label и VBox.

HBox
  |
  ImageView (Left)
  Region
  Label (Center)
  Region
  VBox (Right)

Эти регионы должны иметь HGrow как Priority.Always, так что если вы измените размер HBox, эти два будут расти, сохраняя другие элементы в их местоположение и др.

Пример FXML:

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

<?import javafx.scene.control.Label?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>

<HBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="94.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <ImageView fitHeight="150.0" fitWidth="140.0" pickOnBounds="true" preserveRatio="true">
         <image>
            <Image url="http://www.imaginaformacion.com/wp-content/uploads/2010/06/JavaFx.png" />
         </image>
      </ImageView>
      <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
      <Label prefHeight="17.0" prefWidth="205.0" text="Label On the Center" />
      <Region prefHeight="200.0" prefWidth="200.0" HBox.hgrow="ALWAYS" />
      <VBox alignment="CENTER_RIGHT" prefHeight="94.0" prefWidth="200.0">
         <children>
            <Label prefHeight="17.0" prefWidth="200.0" text="Label Inside the VBox" />
         </children>
      </VBox>
   </children>
</HBox>

Обратите внимание на HBox.hgrow="ALWAYS" в обоих регионах.

Выход

enter image description here

Ответ 2

Я думаю, что лучшим вариантом может быть переход с HBox на BorderPane. Это позволяет Вам делать предметы, прикрепленные к любому краю Вашего окна.
Другим вариантом является GridPane. Вы можете выбрать столбец и изменить его свойство Halignment на RIGHT.

И, кстати, я рекомендую использовать JavaFX Scene Builder, развлекаясь с JavaFX.

Ответ 3

Я думаю, что лучший вариант - выбросить эту чушь FXML и сделать с WPF. Почему FXML для начала, какого стандарта XML HTML не существовало, когда вы начали этот проект? Поппи, это было примерно с 2000 года, по крайней мере. Это всего лишь еще один пример того, как Oracle усложняет мир, делая себя более важными (читай больше $$$). Оракул, мир проходит мимо тебя. Но на самом деле в чем была разница в переводе HTML в интерфейс Fat Client, а не в использовании ПОЛНОСТЬЮ нового, и я бы сказал, полностью отсталый, неуклюжий, запутанный и не интуитивно понятный FXML. Тьфу... Просто не могу исправить глупый Оракул.