我希望有人能够帮助解决我的问题。我需要像 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)
}
我用只有一个字符串(128 字节)的 Data 类测试了这段代码。但实际上应该比现在更多。所以,问题是:我可以使用 JavaFX 2 获得具有相同功能的 MS Excel 表吗?PS:我也用纯Java测试了这段代码,但得到了相同的结果:(