JavaFX - Elementy rozszerzające się wraz z oknem

JavaFX - Elementy rozszerzające się wraz z oknem
VD
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:32
0

Witam.
Mam aplikację napisaną w javaFX, która w domyślnym ustawieniu okna wygląda tak, jakbym chciał, jednak jeśli rozszerzy się okno lub włączy tryb pełnoekranowy, to niektóre elementy przesuwają się zgodnie z oknem, ale nie rozszerzają, a niektóre zostają na swoim miejscu i nawet nie drgną. Chciałbym, aby moja aplikacja, niezależnie od rozmiaru okna, wyglądała tak samo. Czy da się to jakoś zrobić?

Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
0

Wszystko się da. Taki przykładzik:

Kopiuj
HBox hBox = new HBox();
TextField textField = new TextField();
textField.setMaxWidth(Double.MAX_VALUE);
hBox.getChildren().add(textField);
HBox.setHGrow(textField, Priority.ALWAYS);

W skrócie: 1) definiujesz dla kontrolerów rozmiary; 2) definiujesz dla kontenerów jak mają się zachowywać w stosunku do osadzonych w nich kontrolerów. Voila.


The quieter you become, the more you are able to hear.
VD
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:32
0

Niestety, stworzyłem metodę, która każdemu polu z mojej klasie nadaje w/w atrybuty i nic, wywoływałem ją w konstruktorze po załadowaniu pliku fxml, wywoływałem przez włożeniem fxmla do stage-a i nic się nie zmienia. Załączam link do paste-a mojego fxmla - http://pastebin.com/HvgYjXnT

edytowany 2x, ostatnio: VanDavv
miiichal_er
miiichal_er
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 3 lata
  • Postów:9
0

W fxml dodaj dla "searchTable"

Kopiuj
AnchorPane.leftAnchor="265.0" AnchorPane.rightAnchor="148.0"

a dla "addButton", "forceAddBox", "cleanButton" AnchorPane.rightAnchor="14.0"

Kopiuj
Pozostałe komponenty analogicznie, w ten sposób możesz ustawić pozycję krawędzi (top, bottom, left, right). W zależności jaki efekt końcowy chcesz uzyskać, dostosuj te wartości.
VD
Gdy dodałem te wpisy do searchTable to fxml się wysypuje
miiichal_er
miiichal_er
Wysypuje..tzn. co się dzieje?
VD
nie wczytuje w ogóle fxml`a
VD
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:32
0

A istnieje możliwość ustawienia tego w SceneBuilderze? Cały layout pisałem właśnie w tym programie

miiichal_er
miiichal_er
te wpisy co podałem wyżej dodałem w pliku .fxml za pomocą SceneBuildera, i szybki podgląd w nim pokazywał, że np. Twoja tabela zwiększa szerokość
VD
a mógłbyś wysłać przerobionego fxml`a?
miiichal_er
miiichal_er
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 3 lata
  • Postów:9
1

W SceneBuilder masz coś takiego jak Anchor Pane Constraints:
dla TableView kliknij na lewy i prawy
2576f9d70f.png

dla dwóch przycisków i checkboxa z prawej zaznacz tylko prawy
a32491358a.png

w efekcie mam coś takiego:
2b3f4e32a1.png

a po rozszerzeniu okna (tabela jest szersza):
14922af152.png

tu masz kod ze zmianami dla tabeli i komponentów na prawo od niej:

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

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

<fx:root maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="621.0" prefWidth="808.0" type="VBox" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <MenuBar layoutY="2.0" prefHeight="25.0" prefWidth="645.0">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Edit">
            <items>
              <MenuItem mnemonicParsing="false" text="Delete" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Help">
            <items>
              <MenuItem mnemonicParsing="false" text="About" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
      <AnchorPane fx:id="quickAddPane" layoutY="27.0" prefHeight="147.0" prefWidth="765.0">
         <children>
            <Separator layoutY="130.0" prefHeight="3.0" prefWidth="808.0" />
            <Label alignment="CENTER" contentDisplay="CENTER" layoutY="14.0" prefHeight="17.0" prefWidth="95.0" text="Imie" />
            <Label alignment="CENTER" contentDisplay="CENTER" layoutY="57.0" prefHeight="17.0" prefWidth="95.0" text="Nazwisko" />
            <Label alignment="CENTER" contentDisplay="CENTER" layoutY="95.0" prefHeight="17.0" prefWidth="95.0" text="Klasa" />
            <TextField fx:id="firstNameField" layoutX="104.0" layoutY="10.0" promptText="Imi�" text="Janek" />
            <TextField fx:id="lastNameField" layoutX="104.0" layoutY="51.0" promptText="Nazwisko" text="Matejko" />
            <TextField fx:id="classIdField" layoutX="104.0" layoutY="91.0" promptText="Klasa" text="3c" />
            <TableView fx:id="searchTable" focusTraversable="false" layoutX="265.0" layoutY="4.0" prefHeight="122.0" prefWidth="395.0" AnchorPane.leftAnchor="265.0" AnchorPane.rightAnchor="148.0">
              <columns>
                <TableColumn editable="false" prefWidth="147.0" resizable="false" text="Imi�" />
                  <TableColumn editable="false" prefWidth="169.0" resizable="false" text="Nazwisko" />
                  <TableColumn editable="false" prefWidth="78.0" resizable="false" text="Klasa" />
              </columns>
            </TableView>
            <Button fx:id="addButton" layoutX="666.0" layoutY="6.0" mnemonicParsing="false" onMouseClicked="#addButtonAction" prefHeight="34.0" prefWidth="128.0" text="Dodaj" AnchorPane.rightAnchor="14.0" />
            <CheckBox fx:id="forceAddBox" layoutX="677.0" layoutY="51.0" mnemonicParsing="false" prefHeight="24.0" prefWidth="117.0" text="Wymuszaj" AnchorPane.rightAnchor="14.0" />
            <Button fx:id="cleanButton" layoutX="666.0" layoutY="86.0" mnemonicParsing="false" onMouseClicked="#clearButtonAction" prefHeight="34.0" prefWidth="128.0" text="Wyczy��" AnchorPane.rightAnchor="14.0" />
         </children>
      </AnchorPane>
      <AnchorPane fx:id="middlePane" prefHeight="310.0" prefWidth="765.0" />
      <Separator prefHeight="3.0" prefWidth="619.0" />
      <SplitPane dividerPositions="0.5714285714285714" prefHeight="165.0" prefWidth="645.0">
        <items>
          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
               <children>
                  <TableView fx:id="eventTableViev" layoutX="-1.0" maxWidth="520.0" minWidth="215.0" prefHeight="158.0" prefWidth="505.0">
                    <columns>
                      <TableColumn fx:id="eventColumn" prefWidth="149.0" text="Zdarzenia" />
                    </columns>
                  </TableView>
               </children>
            </AnchorPane>
          <AnchorPane maxWidth="520.0" minHeight="0.0" minWidth="84.0">
               <children>
                  <TextArea fx:id="eventDescArea" maxWidth="750.0" minWidth="181.0" prefHeight="154.0" prefWidth="462.0" />
               </children>
            </AnchorPane>
        </items>
      </SplitPane>
   </children>
</fx:root>
VD
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:32
0

Wow, dzięki wielkie. Wszystko działa jak należy

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.