jaxbとシリアライズを含むいくつかの方法を試しました。どちらも実際には機能しませんでした。ステージ/シーンのnode
には、richTextFXのLabel
,BarChart
、CodeArea
が含まれています。シリアライズ方法については、私はjava.io.NotSerializableException: javafx.scene.chart.BarChart
を取得します。シーンやステージをxmlなどのファイルに保存する方法はありますか(FXMLではなく)。その後、アプリケーションを閉じてもシーン/ステージを復元できます。どうもありがとう。Javafxはステージ/シーンをファイルに保存します
1
A
答えて
0
あなたのUI要素からのデータを保存する必要がありますJames_Dコメントを1として、あなたthemselves'cos要素がそれらすでに右、コード化されていない)
私はそれをやった方法の短い抜粋:?
public class SaveRestoreDemo extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Save/restore demo");
Group root = new Group();
Scene scene = new Scene(root, 600, 250, Color.WHITE);
BorderPane borderPane = new BorderPane();
borderPane.prefHeightProperty().bind(scene.heightProperty());
borderPane.prefWidthProperty().bind(scene.widthProperty());
VBox box = new VBox(10);
TextArea area = new TextArea();
area.setId("textArea");
TextField field = new TextField();
field.setId("field");
box.getChildren().addAll(area, field);
borderPane.setTop(getMainMenuContainer(box.getChildren()));
borderPane.setCenter(box);
root.getChildren().add(borderPane);
primaryStage.setScene(scene);
primaryStage.show();
}
private VBox getMainMenuContainer(ObservableList<Node> children) {
VBox topContainer = new VBox();
MenuBar mainMenu = new MenuBar();
topContainer.getChildren().add(mainMenu);
Menu menu = new Menu("Menu");
MenuItem load = new MenuItem("Load");
load.setOnAction(e -> load(children));
MenuItem save = new MenuItem("Save");
save.setOnAction(e -> save(children));
menu.getItems().addAll(save, load);
mainMenu.getMenus().add(menu);
return topContainer;
}
private void load(ObservableList<Node> children) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Load file");
File file = fileChooser.showOpenDialog(new Stage());
if (file != null) {
try {
Values values = new Gson().fromJson(org.apache.commons.io.FileUtils.readFileToString(file, StandardCharsets.UTF_8), Values.class);
children.stream().filter(child -> child.getId() != null)
.forEach(child -> {
if (child instanceof TextField) {
TextField field = (TextField) child;
field.setText(values.getFieldText());
} else if (child instanceof TextArea) {
TextArea area = (TextArea) child;
area.setText(values.getAreaText());
}
});
} catch (IOException e) {
// handle properly
}
}
}
private void save(ObservableList<Node> children) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Save file");
File file = fileChooser.showSaveDialog(new Stage());
if (file != null) {
Values values = new Values();
children.stream().filter(child -> child.getId() != null)
.forEach(child -> {
if (child instanceof TextField) {
TextField field = (TextField) child;
values.setFieldText(field.getText());
} else if (child instanceof TextArea) {
TextArea area = (TextArea) child;
values.setAreaText(area.getText());
}
});
try {
org.apache.commons.io.FileUtils.write(file, new Gson().toJson(values), StandardCharsets.UTF_8);
} catch (IOException e) {
// handle properly
}
}
}
private static class Values {
private String areaText;
private String fieldText;
public String getAreaText() {
return areaText;
}
public void setAreaText(String areaText) {
this.areaText = areaText;
}
public void setFieldText(String fieldText) {
this.fieldText = fieldText;
}
public String getFieldText() {
return fieldText;
}
}
}
基本的には、メインコンテナの子をループし、それらから値を収集し、GsonとApache Commonsを使用してJsonに保存します。 この例は非常にシンプルです。より複雑な保存\ロードでは、ノードのIDを使用できます。たとえば、IDのリストまたはマップを保持しておき、保存およびロード中にIDとして使用できます。
関連する問題
- 1. javafxでFileChooserで選択したファイルをコピーして保存するには
- 2. PHPはリモートサーバにファイルを保存/保存しますか?
- 3. JavaFX:画像をペインに保存する
- 4. Retxfitを保存したRxjavaは、バックグラウンドでファイルにデータを保存します。
- 5. スクリーンショットの保存エラーJavaFX
- 6. ユーザーデータをCSVファイルに保存します
- 7. redisクライアントリストをファイルに保存します
- 8. ファイルにpylintメッセージを保存します
- 9. ファイルをMongoDBに保存します
- 10. Expressリクエストオブジェクトをファイルに保存します。
- 11. ファイルにVaadin7 StreamResourceを保存します。
- 12. ファイルを保存ダイアログを使用せずにファイルを保存します
- 13. PHPはファイルに保存しません
- 14. JavaFx;ラベルセンターは幅に依存します
- 15. javafxフォームからPDFにデータを保存するには?
- 16. .rbはファイルを保存しません。
- 17. javafxの枠線枠に描かれたファイルにシェイプを保存する
- 18. JPanelで描画してファイルに保存しますが、保存したファイルはすべて白です
- 19. 保存ファイルは
- 20. JavaFX 2:TableCellで編集を保存
- 21. JavaFX LineChart - 透明な画像を保存
- 22. Androidは保存ファイルに保存されません
- 23. オプションをデータベースまたはファイルに保存しますか?
- 24. PHP/MySQL - データベースまたはファイルにデフォルトテキストを保存しますか?
- 25. ファイルを.macファイルに保存しようとしています
- 26. std :: chrono :: time_pointを保存してファイルに保存する
- 27. javascriptで保存したファイルをどこに保存する
- 28. JavaFXでFilechooserを使用してファイルを検索し、文字列としてのパスを保存します
- 29. ファイルをURLから保存します。
- 30. ブラウザは常に画像ファイルをメモリに保存しますか?
実際のUIを保存するのではなく、*モデル*(アプリケーションが表示している基礎となるデータ)を保存することを検討する必要があります。 –