次のコードを使用して をインストールしLayer
てGlassPane
表示しました。
glassPane.getLayers().add(myLayer);
MobileApplication.getInstance().addLayerFactory("myLayer", ()-> myLayer);
MobileApplication.getInstance().showLayer("myLayer");
レイヤー上Charm 3.0.0
で現在のビューの上にモーダルが表示されていましたがCharm 4.0.0
、レイヤー上ではもうモーダルではありません。それで、モーダルを再び表示する機能が組み込まれていますか、それとも使用する必要がありEventFilter
ますか?
編集:
ProgressLayer の完全なコード (Charm 4.0.0 には適合していません)
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);
}
}
操作が実行されている限り、progressLayer が表示されます。中央の紫色のアイコンを押さない限り、操作を中断したりレイヤーを非表示にしたりすることはできません。
progressLayer.setOnCancelled(e -> hideLayer(progressLayer.getLayerName()));
そして、ここに問題があります。root
画面サイズ全体を使用しない場合、ボタンなどでカバーされていない UI コントロールをアクティブroot
にすることができます。この動作は Gluon Charm 3.0.0 とは対照的です。