0

誰かが私の問題を解決するのを手伝ってくれることを願っています。高速スクロールの MS Excel のようなテーブルが必要です。JavaFX 2 を使用していますが、例や解決策が見つかりません。Swing にはいくつかの例がありますが、JavaFX 2 が本当に必要です。すでに TableView、GridPane をテストしましたが、膨大な量のデータで非常に遅く動作します。

    package test

    import javafx.stage.Stage
    import javafx.scene.{Group, Scene}
    import javafx.scene.control.cell.PropertyValueFactory
    import javafx.collections.{FXCollections}
    import javafx.application.Application
    import javafx.util.Callback
    import javafx.scene.control._
    import javafx.scene.layout.{GridPane}

   class TableTest extends Application {

  override def start(stage: Stage) = {

    val root = new Group
    val scene = new Scene(root, 1000, 700)
    val table = new TableView[Data]

    table.setPrefWidth(1000)
    table.setPrefHeight(700)

    val data = FXCollections.observableArrayList[Data]

    for(i <- 0 until 100) data.add(new Data)

    for(j <- 0 until 100) table.getColumns().add(createTextColumn(j.toString))

    table.setItems(data)

    root.getChildren().add(table)
    stage.setTitle("Table View Test JavaFX & Scala")
    stage.setWidth(1024)
    stage.setHeight(768)
    stage.setScene(scene)
    stage.show

  }

  def createTextColumn(index:String):TableColumn[Data, AnyRef] = {

    val activeCol = new TableColumn[Data, AnyRef](index)

    activeCol.setPrefWidth(128)

    activeCol.setCellValueFactory(new PropertyValueFactory[Data, AnyRef]("text"))

    val call = new Callback[TableColumn[Data, AnyRef], TableCell[Data, AnyRef]] {
      override def call(p1: TableColumn[Data, AnyRef]) : TableCell[Data, AnyRef] = {
        new TableCell[Data, AnyRef] {

          val grid = new GridPane
          val label = new Label
          grid.add(label, 0, 0)
          setGraphic(grid)

          override def updateItem(value: AnyRef, empty: Boolean) = {
            val row = getTableRow
            if (row != null && value != null) {
              label.setText(value.toString)
            }
          }
        }
      }
    }

    activeCol.setCellFactory(call)

    return activeCol
  }

}


package test

import javafx.beans.property.{SimpleLongProperty, SimpleStringProperty}

class Data {
  val text = new SimpleStringProperty("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sit amet velit leo, in sodales lorem. Donec vel nisl tellus sed. ")
  def textProperty = text
  def getText : String = text.get
  def setText(value: String) = text.set(value)
}

このコードを、1 つの文字列 (128 バイト) のみを持つ Data クラスでテストしました。でも本当は今以上のはずです。問題は、JavaFX 2 を使用して同じ機能を備えた MS Excel テーブルのようなものを入手できるかどうかです。PS: このコードも純粋な Java でテストしましたが、同じ結果が得られました :(

4

0 に答える 0