2

を使用するにはどうすればよいですかListArrayListまたはHashMapそれが使用する監視可能なリストで<Person>、新しい初期化のたびにPerson()、テーブル列に対して同じですPropertyValueFactory

どうすれば使用できますか:

 private final ObservableList<Person> data =
    FXCollections.observableArrayList( MyList/HashMap/ArrayList Here);

どこで間違いを犯しているのかを理解するのに苦労しています。

Oracleのドキュメントに例を示します

private TableView<Person> table = new TableView<Person>();
    private final ObservableList<Person> data =
        FXCollections.observableArrayList(
        new Person("Jacob", "Smith", "jacob.smith@example.com"),
        new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
        new Person("Ethan", "Williams", "ethan.williams@example.com"),
        new Person("Emma", "Jones", "emma.jones@example.com"),
        new Person("Michael", "Brown", "michael.brown@example.com"));


TableColumn emailCol = new TableColumn("Email");
    emailCol.setMinWidth(200);
    emailCol.setCellValueFactory(
        new PropertyValueFactory<Person, String>("email"));

    table.setItems(data);

これが私のコードです:

      @FXML
      private TableView<ObservableList> tableViewCOA = new TableView<ObservableList>();

      @FXML
      private TableColumn superTypeNameCol = new TableColumn();

      @FXML
      private TableColumn catagoryNameCol = new TableColumn();

      @FXML
      private TableColumn accountNameCol = new TableColumn();
      @FXML
      private TableColumn accountIDCol = new TableColumn();

  final ObservableList<ObservableList> data = FXCollections.observableArrayList(

        getAllCOA() //<-- myObservableListHere (refer to last method of jdbc)

          );

          superTypeNameCol.setCellValueFactory(
          new PropertyValueFactory<COA,String>("superNameCol")
              );

          catagoryNameCol.setCellValueFactory(
          new PropertyValueFactory<COA,String>("catagoryNameCol")
              );
          accountIDCol.setCellValueFactory(
          new PropertyValueFactory<COA,String>("accountIDCol")
              );
          accountNameCol.setCellValueFactory(
          new PropertyValueFactory<COA,String>("accountNameCol")
              );

          tableViewCOA.setItems(data);

  /*
  * To change this template, choose Tools | Templates
  * and open the template in the editor.
  */
  package accountsMain;

  import javafx.beans.property.SimpleStringProperty;

  /**
  *
  * @author u1
  */
  public class COA{


      private final SimpleStringProperty superNameCol;
      private final SimpleStringProperty catagoryNameCol;
      private final SimpleStringProperty accountNameCol;
      private final SimpleStringProperty accountIDCol;


      public COA(String superName,
          String catagoryName,
        String accountName,
        String accountID

          ){


      this.superNameCol   = new SimpleStringProperty(superName);
      this.catagoryNameCol  = new SimpleStringProperty(catagoryName);
      this.accountIDCol  = new SimpleStringProperty(accountID);
      this.accountNameCol   = new SimpleStringProperty(accountName);

      }

      public String getSuperNameCol() {
        return superNameCol.get();
      }
      public void setSuperNameCol(String superName) {
      superNameCol.set(superName);
      }

      public String getCatagoryNameCol() {
        return catagoryNameCol.get();
      }
      public void setCatagoryNameCol(String catagoryName) {
      catagoryNameCol.set(catagoryName);
      }

      public String getAccountIDCol() {
        return accountIDCol.get();
      }
      public void setAccountIDCol(String accountID) {
      accountIDCol.set(accountID);
      }

      public String getAccountNameCol() {
        return accountNameCol.get();
      }
      public void setAccountNameCol(String accountName) {
      accountNameCol.set(accountName);
      }
      }

  ///////////////////////////// this is what returns -----myObservableList-------///////////////////////////////

  public static ObservableList<ObservableList> getAllCOA() {

          Connection con = null;

      //    HashMap rows = new HashMap();
          ObservableList<ObservableList> rows = FXCollections.observableArrayList();

      try {
          Class.forName("com.mysql.jdbc.Driver");
          con = DriverManager.getConnection(
              "jdbc:mysql://"+host+":3306/"+DBname, user, password);


          PreparedStatement pStmt = con.prepareStatement(
        "select "
              + "supercoa.superTypeName,"
              + "catagorycoa.catagoryName,"
              + "accountscoa.accountName,"
              + "accountscoa.account_id"
              + " FROM"
              + " supercoa,catagorycoa,accountscoa"
              + " WHERE"
              + " accountscoa.catagory_id = catagorycoa.catagory_id"
              + " group by accountscoa.accountName");

          ResultSet rs = null;
          rs = pStmt.executeQuery();
          int i = 1;
          while (rs.next()) {

        //  List singleRow = new ArrayList();
          ObservableList<String> singleRow = FXCollections.observableArrayList();
          String supertypeName = rs.getString("supertypeName");  singleRow.add(supertypeName);
          String catagoryName = rs.getString("catagoryName");  singleRow.add(catagoryName);
          String accountName = rs.getString("accountName");  singleRow.add(accountName);
          String account_id = rs.getString("account_id");  singleRow.add(account_id);

          //rows.put(i,singleRow);
          //i++;
          rows.add(singleRow);
          }

          pStmt.close();
          con.close();

          } catch (ClassNotFoundException | SQLException e) {
          main.ErrorLogging.errorLog(e.toString());

          } 
        return rows;
      }

データは表示されませんが、テーブルには空白の列が表示されます

4

2 に答える 2

3

HashMapからTableViewにデータを取り込むには、TableViewチュートリアルのセクション「データのマップをテーブルに追加する」を参照してください。


getAllCOA()質問で提供した例では、メソッドのシグネチャを次のように変更するのがおそらく最善です。

public static ObservableList<COA> getAllCOA()

また、このgetAllCOA()メソッドを使用する場合は、代わりに次のようにします。

final ObservableList<COA> data = getAllCOA();

また、テーブルを定義するときは、代わりに次を使用してください。

private TableView<COA> tableViewCOA = new TableView<COA>();

このようにして、リストのリストだけでなく、COAオブジェクトのリストを操作することになります。これにより、作成したセル値ファクトリが機能するようになります。セル値ファクトリは、COAオブジェクトのプロパティをイントロスペクトするように構築されており、テーブルデータにCOAオブジェクトを配置していないため、現在機能していません。

于 2012-10-22T20:16:05.823 に答える
0

型キャストをしてみる

private final ObservableList<Person> data = (ObservableList<Person>)
    FXCollections.observableArrayList( MyList/HashMap/ArrayList Here);
于 2012-10-22T07:34:54.260 に答える