JavaFX 将结果集显示到现有的表视图中
JavaFX displaying resultset into existing tableview
我正在尝试使用桌面 GUI 应用程序比较 HIVE 和 Oracle table 数据,因此我使用 JavaFX 构建了该应用程序,能够从表单中获取用户输入的数据并在后端执行它并得到结果集
我无法在应用程序的 ResultSet 选项卡中打印结果集
我尝试了使用的方法 here 并浏览了其他几个堆栈问题,但作为 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,其次,删除存在的列,以便您只有表格视图。
<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 中布局的表视图的方法。
我正在尝试使用桌面 GUI 应用程序比较 HIVE 和 Oracle table 数据,因此我使用 JavaFX 构建了该应用程序,能够从表单中获取用户输入的数据并在后端执行它并得到结果集 我无法在应用程序的 ResultSet 选项卡中打印结果集 我尝试了使用的方法 here 并浏览了其他几个堆栈问题,但作为 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,其次,删除存在的列,以便您只有表格视图。
<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 中布局的表视图的方法。