数据库内容更改时的JavaFX更新选项卡

时间:2016-04-09 15:07:05

标签: java javafx-8

我使用JavaFX框架开发了一个桌面应用程序。我的主窗口包含一个tabpane,女巫拥有许多子窗口(标签),具有不同的控制器。 当用户对特定子窗口进行CRUD操作时,数据库内容将发生变化。结果,其他子窗口可以使用由子窗口更新的内容,其进行更改。 因此,当数据库发生更改时,写入approche以更新其他子窗口上的UI。

这是一个fxml文件,它表示mainWindow结构:

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

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


<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <TabPane layoutX="38.0" layoutY="14.0" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <tabs>
          <Tab text="subWindow 1">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
                     <children>
                        <TableView prefHeight="371.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                          <columns>
                            <TableColumn prefWidth="75.0" text="C1" />
                            <TableColumn prefWidth="75.0" text="C2" />
                          </columns>
                        </TableView>
                     </children>
                  </AnchorPane>
            </content>
          </Tab>
          <Tab text="subWindow 2">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
                     <children>
                        <ComboBox prefWidth="150.0" />
                     </children>
                  </AnchorPane>
            </content>
          </Tab>
            <Tab text="subWindow 3">
               <content>
                  <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
               </content>
            </Tab>
            <Tab text="subWindow n">
               <content>
                  <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
               </content>
            </Tab>
        </tabs>
      </TabPane>
   </children>
</AnchorPane>

1 个答案:

答案 0 :(得分:0)

解决此问题的常用方法是广泛使用属性绑定。这在JavaFX中得到了很好的支持。使用这种方式,您不会监听数据库的更新,但所有SubWindows都会使用相同的组件和JavaFX-Properties读取和写入数据。如果在该DB中只有一个用户写入,则具有相同的效果。 看看MVVM模式。甚至还有一个框架,支持JavaFX的MVVM:mvvmFX我还没有尝试过,请在评估时告诉我!