Hallo zusammen,
irgendwie habe ich aktuell ein Problem dass die Darstellung von einer ListView mit Custom ListCell sehr lange dauert. Warum ist das so? Ich habe versucht alle Instantieren aus der ListCell rauszunehmen, aber merke doch dass die Erstellung von ca 100 Einträge relativ lange dauert ca. 2Minunten.
Hier habe ich ein Beispiel meiner Anwendung
irgendwie habe ich aktuell ein Problem dass die Darstellung von einer ListView mit Custom ListCell sehr lange dauert. Warum ist das so? Ich habe versucht alle Instantieren aus der ListCell rauszunehmen, aber merke doch dass die Erstellung von ca 100 Einträge relativ lange dauert ca. 2Minunten.
Hier habe ich ein Beispiel meiner Anwendung
Code:
import java.io.IOException;
import java.text.DecimalFormat;
import javafx.beans.property.ObjectProperty;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.control.ListCell;
import javafx.scene.input.ClipboardContent;
public class AgileListViewCells extends ListCell<Ticket>{
ObjectProperty<ListCell<Ticket>> dragSource;
static FXMLLoader mLLoader;
static DecimalFormat df = new DecimalFormat( "00000");
static ClipboardContent cc = new ClipboardContent();
private Node content;
private AgileListViewCellController controller;
public AgileListViewCells(ObjectProperty<ListCell<Ticket>> dragSource){
this.dragSource=dragSource;
mLLoader = new FXMLLoader(getClass().getResource("/de/dm/ui/AgileListViewCell.fxml"));
this.controller = mLLoader.getController();
try {
content = mLLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void updateItem(Ticket item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
}else {
if (controller==null) {
this.controller = mLLoader.getController();
}
controller.update(item, content);
controller.updateStatus(item);
setText(null);
setGraphic(content);
}
}
}
[code]
Hier der passende Controller dazu, sorry ich hoffe der Code (Xtend) unten ist verständlich, da ich nicht noch in reines Java konvertieren kann:
[code]
class AgileListViewCellController extends BaseAgileListViewCellController {
static Image STATUS = new Image(new File("resource/icons/status-icon.png").toURI.toString)
static Image BUSY = new Image(new File("resource/icons/status-busy-icon.png").toURI.toString)
static Image AWAY = new Image(new File("resource/icons/status-away-icon.png").toURI.toString)
static Image OFFLINE = new Image(new File("resource/icons/status-offline-icon.png").toURI.toString)
static DecimalFormat df = new DecimalFormat( "00000")
def void updateStatus(Ticket item) {
titleText.strikethrough = item.status.strikethrough
statusPanel.style = item.status.style
var image = STATUS
if (item.status == Status.Open) {
image = BUSY
} else if (item.status == Status.Waited) {
image = AWAY
} else if (item.status == Status.Closed) {
image = OFFLINE
}
statusImage.image = image
}
def void update(Ticket item, Node node){
val first = AppConfig.Instance.projectDao.cachedEntries.findFirst[it.id==item.project]
projectLink.text = first.shortName
idLink.text = df.format(item.id)
titleText.text = '''«item.name»'''
item.updateStatus
priorityImage.image = Type.getImage(item.type)
Tooltip.install(priorityImage, new Tooltip(Type.getType(item.type).niceName))
Tooltip.install(node, new Tooltip('''
Id: «item.id»
Title: «item.name»
Status: «item.status.niceName»
Priority: «Type.getType(item.type)»
Description: «item.description»
'''))
}
}}
[code]
Hat da jemand eine Idee, warum das rendern jeder einzelenen ListCell so viel Zeit beansprucht.
Grüße
lam