es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ScalaFX | ListView | ¿Cómo selecciono todos los elementos de la listview usando selectionModel()?

Quiero crear una aplicación de mensajería. Ahora mismo, funciona para conversaciones de uno a uno. Sin embargo, intento crear un botón que envíe el mensaje a todos.

Estoy pensando en usar MultipleSelectionModel() para seleccionar todos los elementos en listView. Sin embargo, MultipleSelectionModel() no es un miembro de listview. (aunque sí lo es selectionModel)

Aquí está lo que he hecho hasta ahora:

package com.hep88.view
import akka.actor.typed.ActorRef
import scalafxml.core.macros.sfxml
import scalafx.event.ActionEvent
import scalafx.scene.control.{Label, ListView, TextField}
import com.hep88.ChatClient
import com.hep88.User
import com.hep88.Group
import com.hep88.Client
import scalafx.collections.ObservableBuffer
import scalafx.Includes._
@sfxml
class MainWindowController(private val txtName: TextField,
private val lblStatus: Label, private val listUser: ListView[User],
private val lblGStatus: Label, private val listGroup: ListView[Group],
private val listMessage: ListView[String],
private val txtMessage: TextField) {

    def handleSend(actionEvent: ActionEvent): Unit ={

if (listUser.selectionModel().selectedIndex.value >= 0){
  Client.greeterMain ! ChatClient.SendMessageL(listUser.selectionModel().selectedItem.value.ref,
    txtMessage.text())
}

}

Intento hacer algo como:

Client.greeterMain ! ChatClient.SendMessageL(listUser.multipleSelectionModel().selectall.value.ref,
     txtMessage.text())

Obviamente, eso no funcionó. ¿Algún consejo sobre cómo puedo hacer que esto funcione?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como ya mencionaste, MultipleSelectionModel() no es un miembro de ListView. En su lugar, puedes usar el método selectionModel() para obtener la instancia de SelectionModel para ListView, y luego usar el método selectAll() para seleccionar todos los elementos de la lista. Aquí tienes una versión actualizada del código:

    def handleBroadcast(actionEvent: ActionEvent): Unit ={
      listUser.selectionModel().selectAll()
      val users = listUser.getItems().asScala.toList
      val refs = users.map(user => user.ref)
      Client.greeterMain ! ChatClient.SendMessageL(refs, txtMessage.text())
    }
    

    En este código, primero llamamos a selectAll() en el modelo de selección para seleccionar todos los elementos de ListView. Luego, obtenemos la lista de elementos de usuario de ListView usando el método getItems () y la convertimos a una lista de Scala usando asScala.toList. Finalmente, extraemos las referencias de actor de la lista de usuarios usando el método map () y enviamos el mensaje a todos los destinatarios.

    Cabe mencionar que este código supone que la clase User tiene una propiedad “ref” que almacena la referencia de actor para ese usuario. Si tu clase User no tiene tal propiedad, deberás modificar el código en consecuencia.

Comments are closed.