2016-06-20 21 views
0

データベースからテーブルにデータを挿入する必要があります。JavaFX ObservableListWrapperをキャストできません

"com.sun.javafx.collections.ObservableListWrapperをAdminSide.Adminsupervisorにキャストできません"というメッセージが表示されます。

は、これが私の方法である:

public void captureDataSuper() { 
    ObservableList<ObservableList> admsup; 
    admsup = FXCollections.observableArrayList(); 
    Connection c; 
    try { 
     c = KonekDB.createConnection(); 
     String SQL = "SELECT * from adminsupervisor"; 
     ResultSet rs = c.createStatement().executeQuery(SQL); 

     TableColumn<Adminsupervisor, String> id = new TableColumn<Adminsupervisor, String>("ID"); 
     TableColumn<Adminsupervisor, String> user = new TableColumn<Adminsupervisor, String>("Username"); 
     TableColumn<Adminsupervisor, String> pass = new TableColumn<Adminsupervisor, String>("Password"); 
     TableColumn<Adminsupervisor, String> userType = new TableColumn<Adminsupervisor, String>("User Type \n(1=Admin 2=Supervisor)"); 

     id.setCellFactory(TextFieldTableCell.<Adminsupervisor>forTableColumn()); 
     user.setCellFactory(TextFieldTableCell.<Adminsupervisor>forTableColumn()); 
     pass.setCellFactory(TextFieldTableCell.<Adminsupervisor>forTableColumn()); 
     userType.setCellFactory(TextFieldTableCell.<Adminsupervisor>forTableColumn()); 

     userType.setPrefWidth(200); 

     id.setCellValueFactory(new Callback<CellDataFeatures<Adminsupervisor, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<Adminsupervisor, String> p) { 
       return new SimpleStringProperty(p.getValue().getId()); 
      } 
     }); 

     user.setOnEditCommit(
       new EventHandler<CellEditEvent<Adminsupervisor, String>>() { 

      public void handle(CellEditEvent<Adminsupervisor, String> t) { 
       ((Adminsupervisor) t.getTableView().getItems().get(
         t.getTablePosition().getRow())).setUsername(t.getNewValue()); 
      } 
     } 
     ); 
     user.setCellValueFactory(new Callback<CellDataFeatures<Adminsupervisor, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<Adminsupervisor, String> p) { 
       return new SimpleStringProperty(p.getValue().getUsername()); 
      } 
     }); 

     pass.setOnEditCommit(
       new EventHandler<CellEditEvent<Adminsupervisor, String>>() { 

      public void handle(CellEditEvent<Adminsupervisor, String> t) { 
       ((Adminsupervisor) t.getTableView().getItems().get(
         t.getTablePosition().getRow())).setPassword(t.getNewValue()); 
      } 
     } 
     ); 
     pass.setCellValueFactory(new Callback<CellDataFeatures<Adminsupervisor, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<Adminsupervisor, String> p) { 
       return new SimpleStringProperty(p.getValue().getUsername()); 
      } 
     }); 

     userType.setOnEditCommit(
       new EventHandler<CellEditEvent<Adminsupervisor, String>>() { 

      public void handle(CellEditEvent<Adminsupervisor, String> t) { 
       ((Adminsupervisor) t.getTableView().getItems().get(
         t.getTablePosition().getRow())).setUserType(t.getNewValue()); 
      } 
     } 
     ); 
     userType.setCellValueFactory(new Callback<CellDataFeatures<Adminsupervisor, String>, ObservableValue<String>>() { 
      public ObservableValue<String> call(CellDataFeatures<Adminsupervisor, String> p) { 
       return new SimpleStringProperty(p.getValue().getUserType().toString()); 
      } 
     }); 

     supervisorTable.getColumns().addAll(id, user, pass, userType); 

     while (rs.next()) { 
      //Iterate Row 
      ObservableList<String> row = FXCollections.observableArrayList(); 
      for (int i = 1; i <= 4; i++) { 
       //Iterate Column 
       row.add(rs.getString(i)); 
      } 
      admsup.add(row); 
     } 

     supervisorTable.setItems(admsup); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.out.println("Error on Building Data"); 
    } 
} 

これは私のモデルクラスAdminsupervisorです:

public class Adminsupervisor { 

private String id; 
private String username; 
private String password; 
private String userType; 

public String getId() { 
    return id; 
} 

public String getUsername() { 
    return username; 
} 

public String getPassword() { 
    return password; 
} 

public String getUserType() { 
    return userType; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public void setUserType(String userType) { 
    this.userType = userType; 
} 

void set(int j, String newValue) { 
    for (j = 0; j < 4; j++) { 
     if (j == 0) { 
      setId(newValue); 
     } 
     if (j == 2) { 
      setPassword(newValue); 
     } 
     if (j == 3) { 
      setUserType(newValue); 
     } 
     if (j == 1) { 
      setUsername(newValue); 
     } 
    } 
    try { 
     Connection c = KonekDB.createConnection(); 
     //SQL FOR SELECTING ALL OF CUSTOMER 
     String SQL = "UPDATE adminsupervisor SET " 
       + "username=" + username + "," 
       + "password=" + password + "," 
       + "userType=" + userType + " WHERE id=" + id + ""; 
     //ResultSet 
     c.createStatement().executeUpdate(SQL); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.out.println("Error on Building Data"); 
    } 
}} 

あなたが解決策を見つけると、編集されるべきラインを教えている場合それはあなたの素晴らしいことです。ありがとう:)

EDITを:ここに私の表のコンストラクタです:

private TableView supervisorTable() { 
    TableView table = new TableView(); 
    table.setEditable(true); 
    return table; 
} 

答えて

2

私はあなたのエラーは、この行で発生推測している:

supervisorTable.setItems(admsup); 

あなたはsupervisorTableの定義を示していません私はそれがTableView<Adminsupervisor>だと推測します。つまり、テーブルに設定したアイテムは、ObservableList<Adminsupervisor>のタイプである必要があります。ただし、admsupリストはObservableList<ObservableList>と定義されています。

あなたが必要に:

  1. 変更ObservableList<Adminsupervisor>にごadmsupリストのタイプ。
  2. ObservableListをAdminsupervisorに変換する関数を書き込みます。public AdminSupervisor convert(ObservableList values)
  3. リストに項目を追加する前に変換関数を呼び出してください。admsup.add(convert(row))

    質問のこれらの種類は、スタンドアロンで、誰かがちょうどコピーして実行するように貼り付けることができた、作成しmcveあればお答えしやすくなります:

はまた、上に読み問題を再現することができます(この場合、mcveはすべてのデータベースコードをスタブします)。また、あなたの質問に例外が記載されている場合は、常に例外の完全なスタックトレースを提供して、エラーの原因がどこの質問ソースコードにあるコメントに記載してください。

+0

私の編集した質問に、私のTableView定義が表示されました。上記の指示と同じようにコードを編集する必要がありますか? あなたのヒントのためにありがとう、私はまだ純粋な初心者です。 @jewelsea –

+0

私はSuryaを知らない、それはあなたの質問が解決されるかどうかによって決まります。あなたのプログラムが私の答えに提案を適用した後に働いているならば、正しい答えをマークするだけで、質問を編集してmcveを提供する必要はありません。あなたのプログラムが同じキャスト例外の理由で動作していない場合、あなたはmcveを提供するために質問を編集し、誰かがそれを手伝うことができるかもしれません。キャスト例外が修正されてもプログラムがまだ動作していない場合は、新しい問題の新しい質問を作成し、そこにmcveを含めることができます。 – jewelsea

+0

あなたはオンライン@ jewelseaされてうれしいです。私はこの問題を解決し、別の方法に変更すると思います。しかし、方法はまだうまくいきません。この問題を解決するために親切にお手伝いください。 http://stackoverflow.com/questions/37937125/setoneditcommit-with-iteration-javafx –

関連する問題