J'utilise le code suivant pour installer un Layer
dans le GlassPane
et le montrer:Gluon Charm 4.0.0 GlassPane n'est plus modal?
glassPane.getLayers().add(myLayer);
MobileApplication.getInstance().addLayerFactory("myLayer",()-> myLayer);
MobileApplication.getInstance().showLayer("myLayer");
Alors que sur la couche Charm 3.0.0
montrait modale au-dessus de la vue actuelle, sur Charm 4.0.0
la couche n'est pas modale plus. Donc, y at-il une fonction de construction pour le montrer de nouveau modal, ou devons-nous utiliser un EventFilter
?
EDIT:
ProgressLayer complete code (pas adapté à Charm 4.0.0)
code simplifié de ProgressLayer:
public class ProgressLayer extends Layer {
private static final GlassPane GLASS_PANE = MobileApplication.getInstance().getGlassPane();
private String layerName;
private StackPane root;
private Circle clip;
private double size;
public ProgressLayer(Node icon, double radius, String layerName) {
setAutoHide(false);
this.layerName = layerName;
size = radius * 2;
ProgressIndicator progress = new ProgressIndicator();
progress.setStyle("-fx-color:#ff9100");
progress.setRadius(radius);
root = new StackPane(progress);
if (icon != null) {
icon.getStyleClass().add("progress-icon");
clip = new Circle(radius-1);
icon.setClip(clip);
root.getChildren().add(icon);
}
getChildren().add(root);
GLASS_PANE.getLayers().add(this);
}
@Override
public void layoutChildren() {
root.setVisible(isShowing());
if (!isShowing()) {
return;
}
root.resizeRelocate((GLASS_PANE.getWidth() - size)/2, (GLASS_PANE.getHeight() - size)/2, size, size);
if (clip != null) {
clip.setLayoutX(root.getWidth()/2 -1);
clip.setLayoutY(root.getHeight() /2 -1);
}
}
public void setOnCancelled(EventHandler<MouseEvent> handler) {
root.setOnMouseClicked(handler);
}
}
Tant que l'opération est En cours d'exécution, le progressLayer sera montré, et vous n'êtes pas capable d'interrompre l'opération ou masquer la couche, à moins que vous appuyez sur l'icône violet au centre:
progressLayer.setOnCancelled(e -> hideLayer(progressLayer.getLayerName()));
Et voici le problème. Lorsque root
n'utilise pas la totalité de la taille d'écran, les contrôles d'interface utilisateur qui ne sont pas couverts par les boutons root
comme par exemple. peut être activé. Ce comportement est en contraste avec Gluon Charm 3.0.0
Oui, j'ai déjà essayé.J'ai édité ma réponse avec une version simplifiée de ma couche – jns
Dans la version de charme précédente, j'étais capable d'afficher/cacher une couche avec les fonctions correspondantes. 'layer.show()' fonctionne toujours, tandis que 'layer.hide()' ne fonctionne pas. Donc je devais utiliser 'addLayerFactory()' et 'mobileInstance.hideLayer (" myLayer ")' – jns
Cela fonctionne pour moi (c'est sur le dessus de la vue, et il est modal, en cliquant en dehors de lui ne cache pas la couche). Qu'est-ce qui vous manque? Et oui, vous devez utiliser 'addLayerFactory' et' hideLayer'. –