TornadoFx передает данные из mysql в табличное представление - PullRequest
0 голосов
/ 11 июля 2020

У меня есть класс для передачи заметок из mysql в tableview в kotlin, но я не могу заставить его работать Я немного новичок в kotlin для рабочего стола, используется только в android с firebase

Это мой класс для получения заметок

class Notes(id_notes: Int = 0, title: String = "none", description: String = "none"){
private var id_notes: SimpleIntegerProperty = SimpleIntegerProperty(id_notes)
private var title: SimpleStringProperty = SimpleStringProperty(title)
private var description: SimpleStringProperty = SimpleStringProperty(description)

fun getId(): Int {
    return id_notes.get()
}

fun setId(id: Int) {
    id_notes.set(id)
}

fun getTitle(): String {
    return title.get()
}

fun setTitle(Title: String) {
    title.set(Title)
}

fun getDescription(): String {
    return description.get()
}

fun setDescription(Description: String) {
    description.set(Description)
}

тогда у меня есть фактический код

tableview(data){
                    prefWidth = 400.0
                    column("ID", Notes::getId)
                    column("Title", Notes::getTitle)
                    rowExpander {
                        label {
                            this.text = Notes::getDescription.toString()
                        }
                    }
                }
private fun getNotes(){
    try {

        val notes = Notes()
        val sql = ("SELECT id_notes, title, description, date FROM notes")
        val con: Connection? = Conn.connection()
        stmt = con?.createStatement()
        rs = stmt?.executeQuery(sql)
        while (rs!!.next()) {
            notes.setId(rs!!.getInt("id_notes"))
            notes.setDescription(rs!!.getString("description"))
            notes.setTitle(rs!!.getString("title"))
            data.add(notes.toString())
        }
    } catch (ex: SQLException) {
        alert(Alert.AlertType.ERROR, "Error", "Could not perform this action")
    }
}

1 Ответ

1 голос
/ 15 июля 2020

В конце я постараюсь решить вашу проблему, но, пожалуйста, сначала прочтите эту часть, потому что это гораздо важнее для вас, чем фактический ответ. Я считаю, что ваши навыки программирования (на данный момент) не требуются для того, что вы пытаетесь выполнить sh, особенно потому, что вы конвертируете свой класс в строку, прежде чем добавлять его к своим данным (которые, похоже, представляют собой набор string, а не набор Notes), поэтому я не знаю, как вы ожидаете, что tableview получит ваш идентификатор, заголовок и описание. Кроме того, у вас есть конструктор для Notes, но вы слишком усложняете его, не используя его и присваивая значения позже. С другой стороны, функция getNotes () никогда не вызывается в вашем коде, вероятно, вызывается в какой-то другой части, которую вы не показываете.

Из-за этого, я думаю, вам следует немного замедлить, попробуйте выровняйте свои базовые c навыки (особенно работая с классами и коллекциями), они читают руководство по tornadofx и пробуют с такими вещами.

Теперь это мое решение. Сначала попробуйте это без базы данных. Я сделал это так, потому что не знаю, есть ли проблемы с вашей базой данных. Они изменяют функцию getNotes () так, как указано в вашем коде, без преобразования notes.toString (), просто de data.add (notes). Не забудьте нажать кнопку, чтобы загрузить данные.

class Prueba: View("MainView") {
    //data should be an FXCollections.observableArrayList<Notes>
    //You didn't show your data variable type, but apparently is some collection of string
    val data = FXCollections.observableArrayList<Notes>()

    override val root = vbox {
        tableview(data){
            prefWidth = 400.0
            column("ID", Notes::getId)
            column("Title", Notes::getTitle)
            rowExpander() {
                label() {
                    //Note the difference here, Notes::getDescription.toString() won't do what you want
                    this.text = it.getDescription()
                }
            }
        }

        //This button is calling the function getNotes(), so data can be loaded
        button("Load Data") {
            action {
                getNotes()
            }
        }
    }

    //Note this function is out side root now
    private fun getNotes() {
        data.clear()
        data.add(Notes(1,"Title 1", "Description 1"))
        data.add(Notes(2,"Title 2", "Description 2"))
        data.add(Notes(3,"Title 3", "Description 3"))
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...