我學會了使用JavaFX UI控件Example 12-12 Adding Map Data to the Table的TableView回調科特林
它在Java中的作品:
TableColumn<Map, String> firstDataColumn = new TableColumn<>("Class A");
TableColumn<Map, String> secondDataColumn = new TableColumn<>("Class B");
firstDataColumn.setCellValueFactory(new MapValueFactory(Column1MapKey));
firstDataColumn.setMinWidth(130);
secondDataColumn.setCellValueFactory(new MapValueFactory(Column2MapKey));
secondDataColumn.setMinWidth(130);
TableView table_view = new TableView<>(generateDataInMap());
table_view.setEditable(true);
table_view.getSelectionModel().setCellSelectionEnabled(true);
table_view.getColumns().setAll(firstDataColumn, secondDataColumn);
Callback<TableColumn<Map, String>, TableCell<Map, String>>
cellFactoryForMap = new Callback<TableColumn<Map, String>,
TableCell<Map, String>>() {
@Override
public TableCell call(TableColumn p) {
return new TextFieldTableCell(new StringConverter() {
@Override
public String toString(Object t) {
return t.toString();
}
@Override
public Object fromString(String string) {
return string;
}
});
}
};
firstDataColumn.setCellFactory(cellFactoryForMap);
secondDataColumn.setCellFactory(cellFactoryForMap);
但這部分並不在科特林工作(轉換後):
val cellFactoryForMap =
object : Callback<TableColumn<Map<*, *>, String>, TableCell<Map<*, *>, String>> {
override fun call(p: TableColumn<*, *>): TableCell<*, *> {
return TextFieldTableCell(object : StringConverter() {
override fun toString(t: Any): String {
return t.toString()
}
override fun fromString(string: String): Any {
return string
}
})
}
}
錯誤:(49,33)Kotlin:對象必須聲明爲抽象或實現抽象成員public abstract fun call(p0:TableColumn>,String>!):TableCell,*>,String>!在javafx.util.Callback定義
錯誤:(50,13)科特林: '呼叫' 覆蓋沒什麼
錯誤:(51 24)科特林:類型推斷失敗:構造TextFieldTableCell(P0:字符串轉換) 不能應用於 ()
錯誤:(51,43)科特林:類型匹配:推斷類型是但字符串轉換<(??? .. ???)>!預計
錯誤:(51,52)科特林:在javafx.util定義預期的字符串轉換類一種類型的參數
錯誤:(52,21)科特林: '的toString' 覆蓋沒什麼
錯誤:(56,21)Kotlin:'fromString'不會覆蓋任何內容
如何編寫正確的代碼?
現在一切正常。非常感謝你。 –
@NameYuri歡迎您。如果答案正在工作,請標記爲正確答案,讓別人知道:) –