Kotlin 中的 TableView 回调
TableView Callback in Kotlin
我学习使用 JavaFX UI 控件 Example 12-12 Adding Map Data to the Table
其作品在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);
但是这部分在kotlin中不起作用(转换后):
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) Kotlin:'call' 不覆盖任何内容
错误:(51, 24) Kotlin:类型推断失败:构造函数 TextFieldTableCell(p0: StringConverter!)
不能应用于
()
错误:(51, 43) Kotlin:类型不匹配:推断类型是 StringConverter<(???..???)>!预计
错误:(51、52)Kotlin:javafx.util
中定义的 class StringConverter 需要一个类型参数
错误:(52, 21) Kotlin:'toString' 不覆盖任何内容
错误:(56, 21) Kotlin:'fromString' 不覆盖任何内容
如何写出正确的代码?
您在 TextFieldTableCell 中的类型有误。
仔细看TextFieldTableCell<S,T> extends TableCell<S,T>
和方法TextFieldTableCell(StringConverter<T> converter)
如果回调 return 类型是 TableCell<Map<*, *>, String>>
,那么您的字符串转换器必须 StringConverter<String>
才能满足类型约束。
Callback<TableColumn<Map<*, *>, String>, TableCell<Map<*, *>, String>> {
TextFieldTableCell(object: StringConverter<String>() {
override fun fromString(string: String): String {
return string
}
override fun toString(`object`: String): String {
return `object`
}
})
}
我学习使用 JavaFX UI 控件 Example 12-12 Adding Map Data to the Table
其作品在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);
但是这部分在kotlin中不起作用(转换后):
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) Kotlin:'call' 不覆盖任何内容
错误:(51, 24) Kotlin:类型推断失败:构造函数 TextFieldTableCell(p0: StringConverter!) 不能应用于 ()
错误:(51, 43) Kotlin:类型不匹配:推断类型是 StringConverter<(???..???)>!预计
错误:(51、52)Kotlin:javafx.util
中定义的 class StringConverter 需要一个类型参数错误:(52, 21) Kotlin:'toString' 不覆盖任何内容
错误:(56, 21) Kotlin:'fromString' 不覆盖任何内容
如何写出正确的代码?
您在 TextFieldTableCell 中的类型有误。
仔细看TextFieldTableCell<S,T> extends TableCell<S,T>
和方法TextFieldTableCell(StringConverter<T> converter)
如果回调 return 类型是 TableCell<Map<*, *>, String>>
,那么您的字符串转换器必须 StringConverter<String>
才能满足类型约束。
Callback<TableColumn<Map<*, *>, String>, TableCell<Map<*, *>, String>> {
TextFieldTableCell(object: StringConverter<String>() {
override fun fromString(string: String): String {
return string
}
override fun toString(`object`: String): String {
return `object`
}
})
}