当前位置: 首页 > 知识库问答 >
问题:

JavaFX我无法通过observableList填充tableview

郑哲彦
2023-03-14

我在填充Tableview时遇到问题。当我运行此代码时,我的tableview具有与观察列表相同数量的记录,但什么都不可见。

有什么想法吗?donť理解一些类似cellvalueProperty的东西。这对我的示例有用吗?谢谢

 package SYSSEL;
 import java.sql.SQLException;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.scene.control.Button;
 import javafx.stage.Stage;
 import java.sql.ResultSet;
 import javafx.scene.control.*;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;

 public class gridOfMessages extends Stage {

   private ObservableList messages;
   @FXML
   private Button buttonCloseGrid;

   @FXML
   private TableColumn C1;

   @FXML
   private TableColumn C2;

   @FXML
   private TableColumn C3;


   @FXML
   private Button buttonRefreshGrid;

   @FXML
   private TableView<gridOfMessages> gridOfMessagesList;


   @FXML
   private void HandlerCloseGrid(ActionEvent event) {

   }

   @FXML
   private void handlerRefreshGrid(ActionEvent event) throws ClassNotFoundException, SQLException {
     //Main Scene
     ResultSet rq = PdfSorting.checkNewMsgs();
     rq.first();
     messages=FXCollections.observableArrayList();
     while(rq.next()){
       //Iterate Row;
       ObservableList<String> row = FXCollections.observableArrayList();
       row.add(rq.getString("ID_DOCUMENT_ESSL"));
       row.add(rq.getString("DOCUMENT_PATH"));
       row.add(rq.getString("BAN"));
       System.out.println("Row [1] added "+row );
       messages.add(row);

     }
     gridOfMessagesList.setItems(messages);

   }
 }



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

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

<AnchorPane id="AnchorPane" minWidth="307.0" prefHeight="506.999977929685" prefWidth="307.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="SYSSEL.gridOfMessages">
  <children>
    <Button id="ButtonCloseGrid" fx:id="buttonCloseGrid" layoutX="0.0" layoutY="468.0" mnemonicParsing="false" onAction="#HandlerCloseGrid" prefHeight="39.0" prefWidth="147.0" text="Zavřít" />
    <Button id="refreshGrid" fx:id="buttonRefreshGrid" layoutX="147.0" layoutY="468.0" mnemonicParsing="false" onAction="#handlerRefreshGrid" prefHeight="39.0" prefWidth="161.0" text="Aktualizovat" />
    <TableView fx:id="gridOfMessagesList" layoutX="0.0" layoutY="0.0" prefHeight="468.0" prefWidth="307.0">
      <columns>
        <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="72.0" text="Číslo datovky" fx:id="C1" />
        <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="147.0" text="Cesta" fx:id="C2" />
        <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="87.0" text="BAN" fx:id="C3" />
      </columns>
    </TableView>
  </children>
</AnchorPane>

共有1个答案

韦衡
2023-03-14

是的,您需要为表中的每一列设置单元格值工厂,这是肯定的。但是你也应该发布你的fxml文件代码,没有它我无法确认这是不是一个问题。

单元格值工厂表示值的来源。如果您的表数据模型类型是gridOfMessages,那么表数据的可观察列表应该是相同的类型。

编辑:

从fxml文件中可以明显看出,您需要为每一列添加单元格值工厂,就像下面的示例中一样,只需将firstName替换为数据模型bean中的属性名称。

  <TableColumn text="First Name">
    <cellValueFactory>
      <PropertyValueFactory property="firstName" />
    </cellValueFactory>
  </TableColumn>

如果您没有为TableView和观察列表设置数据类型,将假定默认的对象类型。无论如何,表中的一列以上很难这样做。

编辑:

然后,您需要编写一个表示一个表行的类。例如,如果希望表有三列,则需要一个具有三个属性的bean。然后将其设置为TableView和ObservableList的类型,用数据填充该列表,并为表设置它,与您的代码中已经存在的类似。应该在控制器类中。这是一个一般性的描述,因为我不知道这个表应该代表什么。

您还可以帮助学习Oracle关于如何使用fxml在表中显示数据的教程

 类似资料:
  • 我无法填充从场景生成器创建的JavaFX组合框。虽然我已经搜索过了,但我找不到解决这个错误的方法。 下面的例子都不管用。 帮助将不胜感激。

  • 我很难用ObservableList中获得的数据填充JavaFX中的表视图。 当在病人信息控制器中按下btn确认()时,它会使用病人信息控制器视图中的屏幕文本数据创建一个病人对象。 然后将该对象添加到队列类中的LinkedList队列中。然后返回队列并将其传递给QueueTabPageController方法displayQueue() 我知道,当我将增强的for循环打印到控制台时,患者对象获得了

  • 下面是Verzeichnisdaten类: 此代码属于Verzeichnisdaten。上面有更多的代码,但现在不相关了。

  • 我被卡住了。我一直在尝试不同的方法将6个头像字符串的结果加载到picturebox控件数组的加载方法中。 这就是我必须迭代(mysql结果集)值字符串到pictureboxes的内容 但是每个图片框都显示为白色(空白)。如果我将SQL查询设置为LIMIT 1,我将为每个图片框获得相同的第一个头像。但它不会相应地分配,或者根本不会。 我如何才能循环到我的6个图片框正确的网址?谢谢你们 编辑 我也尝试

  • //控制器类Mainguicontroller.java

  • 问题内容: 我是JavaFX8的新手,我正在尝试使用initialize方法在控制器中向TableView提供一些数据。我看到了很多关于它的话题,尝试了很多东西,但是对我来说不起作用。 还有很多,但是没有一种解决方案对我有用。 这是我的代码: class Employee class Person 这是定义用户界面的FXML: ConsultHR.fxml 最后是控制器:类ConsultHRCon