簡體   English   中英

JavaFX將結果集顯示到現有的TableView中

[英]JavaFX displaying resultset into existing tableview

我正在嘗試使用桌面GUI應用程序比較HIVE和Oracle表數據,因此我使用JavaFX並構建了該應用程序,能夠從表單中獲取用戶輸入的數據並在后端執行它並獲得結果集,但是我無法在應用程序的ResultSet選項卡中打印結果集,我嘗試了這里使用的方法並瀏覽了其他一些堆棧問題,但是作為JFX的新手,我無法獲取如何將結果集打印到場景中

在此處輸入圖片說明

FXML:

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

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

<TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1100.0" tabClosingPolicy="UNAVAILABLE" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.40"
fx:controller="application.Controller">
<tabs>
<Tab text="Query Tab">
  <content>
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
           <children>
              <TextArea layoutX="34.0" layoutY="143.0" prefHeight="506.0" prefWidth="360.0" promptText="Hive Query" fx:id="HiveQuery" />
              <TextArea layoutX="506.0" layoutY="141.0" prefHeight="508.0" prefWidth="384.0" promptText="Oracle Query" fx:id="OracleQuery" />
              <TextField layoutX="34.0" layoutY="27.0" promptText="Hive Server Name" fx:id="HiveServerName" />
              <TextField layoutX="34.0" layoutY="79.0" promptText="Hive Username" fx:id="HiveUserName" />
              <PasswordField layoutX="204.0" layoutY="79.0" promptText="Hive Password" fx:id="HivePassword" />
              <PasswordField layoutX="698.0" layoutY="79.0" promptText="Oracle Password" fx:id="OraclePassword" />
              <TextField layoutX="521.0" layoutY="79.0" promptText="Oracle Username" fx:id="OracleUserName" />
              <TextField layoutX="521.0" layoutY="27.0" promptText="Oracle HostName" fx:id="OracleHostName" />
              <Button layoutX="420.0" layoutY="666.0" mnemonicParsing="false" text="Compare" fx:id="CompareButton" onAction="#CompareDataSets" />
           </children></AnchorPane>
  </content>
</Tab>
<Tab text="Result Set">
  <content>
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
           <children>
              <TableView layoutX="8.0" layoutY="19.0" prefHeight="671.0" prefWidth="433.0">
                <columns>
                  <TableColumn prefWidth="75.0" text="C1" />
                  <TableColumn prefWidth="75.0" text="C2" />
                </columns>
              </TableView>
              <TableView layoutX="463.0" layoutY="19.0" prefHeight="671.0" prefWidth="448.0">
                <columns>
                  <TableColumn prefWidth="75.0" text="C1" />
                  <TableColumn prefWidth="75.0" text="C2" />
                </columns>
              </TableView>
           </children></AnchorPane>
  </content>
</Tab>

在上面鏈接到的示例之后,您可以執行相同的邏輯,但需要進行一些細微的調整。...首先在FXML中命名tableView,其次,刪除存在的列,以便僅使用tableView。

<Tab text="Result Set">
  <content>
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
           <children>
              <TableView fx:id="tableView" layoutX="8.0" layoutY="19.0" prefHeight="671.0" prefWidth="433.0">
                <columns>
                </columns>
              </TableView>
              ......
           </children></AnchorPane>
  </content>
</Tab>

然后更新您的控制器:

//Name your table view in your FXML file and wire it like this.
@FXML
private TableView tableview;

//Then in your method where you process the data you can add columns dynamically....
        /**********************************
         * TABLE COLUMN ADDED DYNAMICALLY *
         **********************************/
        for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
            //We are using non property style for making dynamic table
            final int j = i;                
            TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1));
            col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){                    
                public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {                                                                                              
                    return new SimpleStringProperty(param.getValue().get(j).toString());                        
                }                    
            });

            tableview.getColumns().addAll(col); 
            System.out.println("Column ["+i+"] ");
        }

//Etc....

這是將列動態添加到FXML布局的表視圖中的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM