2017-07-20 2 views
0

Relativement nouveau pour Scala et ScalaFX, mais j'ai déjà travaillé avec Java et JavaFX. Ma question est s'il y a un moyen de passer des paramètres à un TreeItem personnalisé?Passage de paramètres au constructeur TreeItem personnalisé

code ressemble à ceci:

Je voudrais faire:

def makePictureHolder(picture: Picture): TreeItem[Picture] = { 
    new TemporaryHolderTreeItem(picture) 
    } 

Avec ceci:

class TemporaryHolderTreeItem extends TreeItem[Picture] { 

    private val gridPane = new GridPane 
    private val progressBar = new ProgressBar { 
    prefWidth = 250 
    } 
    private val columnConstraints = ObservableBuffer(
    new ColumnConstraints(500), 
    new ColumnConstraints(250) 
) 

    def this(picture: Picture) = this() { 
    value = picture 

    gridPane.addColumn(0, new Label(resourceBundle 
     .getString("uploadHolderText") + " " + picture.path)) 

    gridPane.addColumn(1, progressBar) 

    gridPane.columnConstraints = columnConstraints 
    graphic = gridPane 
    } 
} 

Mais je reçois ce message d'erreur:

TemporaryHolderTreeItem.scala:24: com.nodefactory.diehard.gail.views.TemporaryHolderTreeItem does not take parameters 
[error] def this(picture: Picture) = this() { 
[error]    

J'ai essayé de placer le paramètre image er dans la liste des arguments de classe, mais cela ne fonctionne pas non plus. Comme ceci:

class TemporaryHolderTreeItem(picture: Picture) extends TreeItem[Picture](picture) { 

    private val gridPane = new GridPane 
    private val progressBar = new ProgressBar { 
    prefWidth = 250 
    } 
    private val columnConstraints = ObservableBuffer(
    new ColumnConstraints(500), 
    new ColumnConstraints(250) 
) 

    def this() = this() { 
    gridPane.addColumn(0, new Label(resourceBundle 
     .getString("uploadHolderText") + " " + picture.path)) 

    gridPane.addColumn(1, progressBar) 

    gridPane.columnConstraints = columnConstraints 
    graphic = gridPane 
    } 
} 

même message d'erreur comme ci-dessus.

Répondre

0

Solution: J'oublie que le constructeur par défaut dans Scala est en dehors des fonctions, donc je ne l'ai pas besoin def cette() = ceci() {...}

Au lieu de cela cela a fonctionné:

class TemporaryHolderTreeItem(picture: Picture) extends TreeItem[Picture](picture) { 

    private val gridPane = new GridPane 
    private val progressBar = new ProgressBar { 
    prefWidth = 250 
    } 
    private val columnConstraints = ObservableBuffer(
    new ColumnConstraints(500), 
    new ColumnConstraints(250) 
) 

    gridPane.addColumn(0, new Label(resourceBundle 
    .getString("uploadHolderText") + " " + picture.path)) 

    gridPane.addColumn(1, progressBar) 

    gridPane.columnConstraints = columnConstraints 
    graphic = gridPane 

}