У меня есть одно табличное представление с JafavaFx для отображения в пользовательских валютах каждую секунду. Каждая вещь работает нормально, но когда tableView пытается перезагрузить данные, она останавливает что-то миллисекунды, я имею в виду морозильник и выглядит не очень красиво. Я не мог удалить это поведение код, который я использую в данный момент является то, что:TableView Live Javafx
setCache(true);
setItems(getObservableList());
Timeline animation = new Timeline();
animation.getKeyFrames().add(new KeyFrame(Duration.seconds(1), new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
setItems(getObservableList());
}
}));
animation.setCycleCount(Animation.INDEFINITE);
animation.play();
Моего TableColum
getColumns().addAll(
getStringField("id","Tikect"),
getStringField("currency","Symbol"),
getStringField("type","S/B"),
getDoubleField("amount","Amt (k)"),
getDoubleField("open","Open"),
getDoubleField("close","Close"),
getDoubleField("stop","Stop"),
getDoubleField("limit","Limit"),
getDoubleField("pl","P/L"),
getDoubleField("gpl","Gross P/L")
);
В другом классе для добавления столбцов у меня есть одна функции так:
public static TableColumn<BaseModel, String> getStringField(String idColumn,String nameColumn) {
TableColumn<BaseModel, String> column = new TableColumn<BaseModel, String>(idColumn);
column.setCellValueFactory(new PropertyValueFactory<BaseModel, String>(idColumn));
column.setMinWidth(100);
column.setText(nameColumn);
return column;
}
Мой ObservableList является:
public ObservableList<BaseModel> getObservableList() throws IOException {
ObservableList<BaseModel> oTransacctions = FXCollections.observableArrayList();
JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser(new URL(getURL()));
JsonToken token = jp.nextToken();
while (token != JsonToken.START_ARRAY) {
token = jp.nextToken();
}
while (token != JsonToken.END_ARRAY) {
token = jp.nextToken();
if (token == JsonToken.START_OBJECT) {
Transaction transaction = parseTransacction(jp);
oTransacctions.add(transaction);
}
}
return oTransacctions;
}
private Transaction parseTransacction(JsonParser jp) throws IOException {
Transaction transaction = new Transaction();
JsonToken token = jp.nextToken();
while (token != JsonToken.END_OBJECT) {
if (token == JsonToken.START_OBJECT) {
while (token != JsonToken.END_OBJECT) {
token = jp.nextToken();
}
}
if (token == JsonToken.FIELD_NAME) {
String fieldname = jp.getCurrentName();
if ("id".equals(fieldname)) {
jp.nextToken();
transaction.setId(jp.getText());
}
if ("currency".equals(fieldname)) {
jp.nextToken();
transaction.setCurrency(jp.getText());
}
if ("type".equals(fieldname)) {
jp.nextToken();
transaction.setType(jp.getText());
}
if ("amount".equals(fieldname)) {
jp.nextToken();
transaction.setAmount(jp.getValueAsDouble());
}
if ("open".equals(fieldname)) {
jp.nextToken();
transaction.setOpen(jp.getValueAsDouble());
}
if ("stop".equals(fieldname)) {
jp.nextToken();
transaction.setStop(jp.getValueAsDouble());
}
if ("limit".equals(fieldname)) {
jp.nextToken();
transaction.setLimit(jp.getValueAsDouble());
}
if ("created_at".equals(fieldname)) {
jp.nextToken();
// transaction.setCreated_at(new Date(jp.getText()));
}
if ("pl".equals(fieldname)) {
jp.nextToken();
transaction.setPl(jp.getValueAsDouble());
}
if ("gpl".equals(fieldname)) {
jp.nextToken();
transaction.setGpl(jp.getValueAsDouble());
}
if ("close".equals(fieldname)) {
jp.nextToken();
transaction.setClose(jp.getDoubleValue());
}
}
token = jp.nextToken();
}
return transaction;
}
и это результат:
Мои вопросы:
- я должен использовать другой компонент, как сетки, ... для сделать этот тип действия?
- если возможно, что я должен делать?
Большое спасибо!
Что такое код для getObservableList? Зачем заменять весь список, а не просто обновлять свойства, которые необходимо обновить? Вы делаете что-нибудь интенсивное на клеточных фабриках? Можете ли вы предоставить минимальный исполняемый пример? Кто большой список и таблица (num entries и num cols)? Обновите свой вопрос с помощью этих ответов. – jewelsea
Извините, может быть, я совсем новый. Когда вы говорите об обновлении ... Я должен перебрать все представление таблицы, и если я найду какие-либо изменения, обновить их? –