2015-11-16 2 views
0

Я создал табличное представление со своими компонентами внутри него, назначил cellValueFactory и установил свойства editable на true. Где-то в моем коде, у меня есть следующие:Как создать обновляемую ячейку tableview в Scala

... 
    tableID.selectionModel().selectedItem.onChange(
      (_, _, newValue) => col_uname.setCellFactory(TextFieldTableCell.forTableColumn()); 
    ... 

С его помощью мне удалось создать, чтобы преобразовать его в текстовое поле и могут ввести в него. Тем не менее, после окончания ввода текста, текст был изменен обратно на предыдущий текст перед редактированием. Какой тип/часть кода следует включить, убедитесь, что текст обновлен правильно? Я пробовал искать в Google, но пока нет объяснений.

ответ

0

Вы должны иметь возможность редактировать таблицу, как вы упомянули, editable = true и добавление фабрики ячеек с текстовым полем, например:

new TableColumn[Person, String] { 
    text = "First Name" 
    cellValueFactory = {_.value.firstName} 
    cellFactory = TextFieldTableCell.forTableColumn() 
    prefWidth = 180 
} 

JavaFX Table View Tutorial также предлагает использовать OnEditCommit. Не уверен, что это действительно необходимо. Вот полный пример, который работает без использования OnEditCommit:

import scalafx.application.JFXApp 
import scalafx.application.JFXApp.PrimaryStage 
import scalafx.beans.property.StringProperty 
import scalafx.collections.ObservableBuffer 
import scalafx.event.ActionEvent 
import scalafx.scene.Scene 
import scalafx.scene.control.TableColumn._ 
import scalafx.scene.control.cell.TextFieldTableCell 
import scalafx.scene.control.{Button, TableColumn, TableView} 
import scalafx.scene.layout.VBox 

object EditableTableView extends JFXApp { 

    class Person(firstName_ : String, lastName_ : String) { 

    val firstName = new StringProperty(this, "firstName", firstName_) 
    val lastName = new StringProperty(this, "lastName", lastName_) 

    firstName.onChange { (_, oldValue, newValue) => println(s"Value changed from `$oldValue` to `$newValue`") } 
    lastName.onChange { (_, oldValue, newValue) => println(s"Value changed from `$oldValue` to `$newValue`") } 
    override def toString = firstName() + " " + lastName() 
    } 

    val characters = ObservableBuffer[Person](
    new Person("Peggy", "Sue"), 
    new Person("Rocky", "Raccoon") 
) 

    stage = new PrimaryStage { 
    title = "Editable Table View" 
    scene = new Scene { 
     root = new VBox { 
     children = Seq(
      new TableView[Person](characters) { 
      editable = true 
      columns ++= List(
       new TableColumn[Person, String] { 
       text = "First Name" 
       cellValueFactory = {_.value.firstName} 
       cellFactory = TextFieldTableCell.forTableColumn() 
       prefWidth = 180 
       }, 
       new TableColumn[Person, String]() { 
       text = "Last Name" 
       cellValueFactory = {_.value.lastName} 
       cellFactory = TextFieldTableCell.forTableColumn() 
       prefWidth = 180 
       } 
      ) 
      }, 
      new Button { 
      text = "Print content" 
      onAction = (ae: ActionEvent) => { 
       println("Characters:") 
       characters.foreach(println) 
      } 
      } 
     ) 
     } 
    } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^