データベースからテーブルにデータを挿入する必要があります。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;
}
私の編集した質問に、私のTableView定義が表示されました。上記の指示と同じようにコードを編集する必要がありますか? あなたのヒントのためにありがとう、私はまだ純粋な初心者です。 @jewelsea –
私はSuryaを知らない、それはあなたの質問が解決されるかどうかによって決まります。あなたのプログラムが私の答えに提案を適用した後に働いているならば、正しい答えをマークするだけで、質問を編集してmcveを提供する必要はありません。あなたのプログラムが同じキャスト例外の理由で動作していない場合、あなたはmcveを提供するために質問を編集し、誰かがそれを手伝うことができるかもしれません。キャスト例外が修正されてもプログラムがまだ動作していない場合は、新しい問題の新しい質問を作成し、そこにmcveを含めることができます。 – jewelsea
あなたはオンライン@ jewelseaされてうれしいです。私はこの問題を解決し、別の方法に変更すると思います。しかし、方法はまだうまくいきません。この問題を解決するために親切にお手伝いください。 http://stackoverflow.com/questions/37937125/setoneditcommit-with-iteration-javafx –