Java FX Layouts problem

309
22 августа 2017, 11:50

Таблица которая несмотря на AnchorPane не разворачивается на всю область, а зависит только от prefHeight и prefWidth.

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.*?>
<?import com.jfoenix.controls.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<fx:root maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="600.0" prefWidth="800.0" type="BorderPane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <HBox prefHeight="50.0" prefWidth="800.0" BorderPane.alignment="CENTER">
         <children>
            <JFXComboBox fx:id="searchFilter" prefHeight="25.0" prefWidth="211.0">
               <HBox.margin>
                  <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
               </HBox.margin>
            </JFXComboBox>
            <JFXTextField fx:id="searchTextField" prefHeight="25.0" prefWidth="286.0" promptText="Введіть комбінацію">
               <HBox.margin>
                  <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
               </HBox.margin>
               <font>
                  <Font name="Century Gothic Bold" size="14.0" />
               </font>
            </JFXTextField>
            <JFXButton fx:id="btnSearch" prefHeight="30.0" prefWidth="152.0" text="ПОШУК">
               <HBox.margin>
                  <Insets bottom="15.0" left="20.0" right="15.0" top="15.0" />
               </HBox.margin>
            </JFXButton>
         </children>
      </HBox>
   </top>
   <bottom>
      <HBox alignment="TOP_RIGHT" prefHeight="31.0" prefWidth="800.0" BorderPane.alignment="CENTER">
         <children>
            <JFXButton fx:id="btnOK" prefHeight="25.0" prefWidth="125.0" text="ОК">
               <HBox.margin>
                  <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
               </HBox.margin>
            </JFXButton>
            <JFXButton fx:id="btnCancel" prefHeight="25.0" prefWidth="125.0" text="Відміна">
               <HBox.margin>
                  <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
               </HBox.margin>
            </JFXButton>
         </children>
      </HBox>
   </bottom>
   <center>
      <BorderPane fx:id="borderPane" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
         <center>
            <TableView fx:id="tableView" prefHeight="370.0" prefWidth="800.0" BorderPane.alignment="CENTER">
               <columnResizePolicy>
                  <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
               </columnResizePolicy>
            </TableView>
         </center>
         <bottom>
            <Pagination fx:id="pagination" prefHeight="51.0" prefWidth="800.0" BorderPane.alignment="CENTER" />
         </bottom>
      </BorderPane>
   </center>
</fx:root>

Этот fxml файл как абстрактный класс может иметь несколько контроллеров

UPD: Нашел очаг проблем. Дело в setPageFactory от pagination. В моей ситуации он возвращал AnchorPane(неудачный копипаст из другого класса), теперь возвращает BorderPane но вызывает Exception

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Children: cycle detected: parent = StackPane@7d2c0b5d[styleClass=page], node = BorderPane[id=borderPane]

Что он должен возвращать? FXML файл обновлен

pagination.setPageFactory(this::createPage); // вызов в initialize
public BorderPane createPage(int pageIndex) {
    try {

        data = FXCollections.observableArrayList();
        fromIndex = pageIndex * 40;
        toIndex = Math.min(fromIndex + 40, owner.getContactCount());
        loadDataFromDatabase();

        tableView.setItems(FXCollections.observableArrayList(data.subList((int)fromIndex, (int)toIndex)));
        borderPane.setCenter(tableView);
    } catch (Exception e) {
        log.log(Level.SEVERE, "Switch page exception: " + e);
    }

    return borderPane;
}
Answer 1

Убрал borderPane.setCenter(tableView). вот такой exception

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Children: cycle detected: parent = StackPane@54980c9a[styleClass=page], node = BorderPane[id=borderPane]
at javafx.scene.Parent$2.onProposedChange(Parent.java:445)
at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:113)
at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:108)
at com.sun.javafx.scene.control.skin.PaginationSkin.createPage(PaginationSkin.java:332)
at com.sun.javafx.scene.control.skin.PaginationSkin.resetIndexes(PaginationSkin.java:320)
at com.sun.javafx.scene.control.skin.PaginationSkin.resetIndiciesAndNav(PaginationSkin.java:131)
at com.sun.javafx.scene.control.skin.PaginationSkin.handleControlPropertyChanged(PaginationSkin.java:661)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda$registerChangeListener$61(BehaviorSkinBase.java:197)
at com.sun.javafx.scene.control.MultiplePropertyChangeListenerHandler$1.changed(MultiplePropertyChangeListenerHandler.java:55)
at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:89)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
at javafx.scene.control.Pagination.setPageFactory(Pagination.java:297)
at sample.ua.ucountry.MainTables.Account.Account.Dictionaries.OwnerDictionary.initialize(OwnerDictionary.java:76)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at sample.ua.ucountry.MainTables.Account.Account.Dictionaries.OwnerDictionary.<init>(OwnerDictionary.java:60)
at sample.ua.ucountry.MainTables.Account.Account.AccountEdit.edtLookupOwnerOnAction(AccountEdit.java:98)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8413)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
READ ALSO
Не вижу разницы между объектами

Не вижу разницы между объектами

Создал два объекта fileOne и fileTwoОба читают из файла, оба имеют одинаковые методы

240
NPE ответа сервера

NPE ответа сервера

Было и раньше подобное предупреждение, но как то не особо придавал значение, так как проверка с toast’ом проходила и кол-во лайков показывает...

213
Из-за чего сбилась кодировка при сборке JAR?

Из-за чего сбилась кодировка при сборке JAR?

Здравствуйте! Есть приложение написанное на JavaПарсит сайт и при необходимости отправляет email

239
(android studio, java) Подключение/чтение/отправка данных на сторонние устройства через usb COM порт

(android studio, java) Подключение/чтение/отправка данных на сторонние устройства через usb COM порт

сабж: как подключить к андроид устройству сторонние девайсы по COM порту и впоследствии отправлять/читать данные с нихЖелательно предоставить...

347