2017-04-24 98 views
0

我學會了使用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'不會覆蓋任何內容

如何編寫正確的代碼?

回答

1

您的類型在TextFieldTableCell中是錯誤的。

密切關注TextFieldTableCell<S,T> extends TableCell<S,T>和方法TextFieldTableCell(StringConverter<T> converter)

如果回調返回類型爲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` 
      } 
     }) 
    } 
+0

現在一切正常。非常感謝你。 –

+0

@NameYuri歡迎您。如果答案正在工作,請標記爲正確答案,讓別人知道:) –