mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Javafx: Update the SceneBuilder asynchronously, because it's a quite heavy operation.
This commit is contained in:
+18
-9
@@ -32,6 +32,7 @@ import java.beans.PropertyChangeListener;
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -49,10 +50,10 @@ public class SceneBuilderEditor extends UserDataHolderBase implements FileEditor
|
||||
private final CardLayout myLayout = new CardLayout();
|
||||
private final JPanel myPanel = new JPanel(myLayout);
|
||||
|
||||
//private final JPanel myErrorPanel = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, 10, 5, true, false));
|
||||
private final JPanel myErrorPanel = new JPanel(new BorderLayout());
|
||||
private final HyperlinkLabel myErrorLabel = new HyperlinkLabel();
|
||||
private JTextArea myErrorStack;
|
||||
private final AtomicBoolean myIsUpdateStatePending = new AtomicBoolean();
|
||||
|
||||
private final Document myDocument;
|
||||
private final ExternalChangeListener myChangeListener;
|
||||
@@ -164,12 +165,18 @@ public class SceneBuilderEditor extends UserDataHolderBase implements FileEditor
|
||||
}
|
||||
|
||||
private void updateState() {
|
||||
addSceneBuilder();
|
||||
if (myIsUpdateStatePending.compareAndSet(false, true)) {
|
||||
removeSceneBuilder(); // remove immediately to avoid showing old contents for a moment
|
||||
|
||||
ApplicationManager.getApplication().invokeLater(() -> {
|
||||
if (myIsUpdateStatePending.compareAndSet(true, false)) {
|
||||
addSceneBuilder();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void addSceneBuilder() {
|
||||
removeSceneBuilder();
|
||||
|
||||
try {
|
||||
FileDocumentManager.getInstance().saveDocument(myDocument);
|
||||
|
||||
@@ -188,11 +195,13 @@ public class SceneBuilderEditor extends UserDataHolderBase implements FileEditor
|
||||
private void removeSceneBuilder() {
|
||||
myChangeListener.stop();
|
||||
|
||||
if (mySceneBuilder != null) {
|
||||
myPanel.remove(mySceneBuilder.getPanel());
|
||||
mySceneBuilder.close();
|
||||
mySceneBuilder = null;
|
||||
}
|
||||
UIUtil.invokeLaterIfNeeded(() -> {
|
||||
if (mySceneBuilder != null) {
|
||||
myPanel.remove(mySceneBuilder.getPanel());
|
||||
mySceneBuilder.close();
|
||||
mySceneBuilder = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user