毎秒ユーザー通貨に表示するために、JafavaFx を使用したテーブルビューが 1 つあります。すべてが正常に機能しますが、tableView がデータをリロードしようとすると、ミリ秒単位で停止します。フリーザーを意味し、あまり良くありません。この動作を削除できませんでした。この瞬間に使用するコードは次のとおりです。
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();
マイ テーブル列
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")
);
列を追加するための他のクラスには、次のような関数が1つあります。
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;
}
これが結果です:
私の質問は:
- このタイプのアクションを実行するには、グリッドなどの他のコンポーネントを使用する必要がありますか?
- 可能な場合、私は何をすべきですか?
どうもありがとう !