私はJavaFX(Swingの新機能)に少し慣れていて、内部にいくつかのfxmlサブパネルを持つStackPanesを使用する傾向があります。そのうちの1つは、特定のボタンクリックまたはメニュー選択時にtoFront()に持ち込まれます。フェードアウト/フェードインの切り替えでこれをアニメートすることは可能ですか?私は数日間グーグルで行ってきましたが、この特定のケースに関連するものは何も見つかりません。StackPane内の子にtoFront()を送信する際にフェードトランジションを適用できますか?
0
A
答えて
0
toFront()
は、ノードを親の子リストの末尾に移動するだけで動作します(子リストの順序によってzオーダーが決まります)。したがって、「最前面のノード」はリストの最後にあるものだけです。このノードを含む観測可能な値を作成するには、Bindings.valueAt(...)
とBindings.size(...)
の組み合わせを使用します。
ObjectBinding<Node> frontNode = Bindings.valueAt(stackPane.getChildren(),
Bindings.size(stackPane.getChildren()).subtract(1));
あるいは、代替実装用:
ObjectBinding<Node> frontNode = new ObjectBinding<Node>() {
{ bind(stackPane.getChildren()); }
@Override
protected Node computeValue() {
if (stackPane.getChildren().isEmpty()) return null ;
return stackPane.getChildren().get(stackPane.getChildren().size() - 1) ;
}
}
次に、あなただけの古い値をフェードアウトし、新しい値をフェードリスナーを登録することができます以下はからあなたの出発点を与える必要があります。あなたは働くことができます。
frontNode.addListener((obs, oldNode, newNode) -> {
SequentialTransition fadeOutIn = new SequentialTransition();
if (oldNode != null) {
FadeTransition fadeOut = new FadeTransition(Duration.seconds(1), oldNode);
fadeOut.setToValue(0);
fadeOutIn.getChildren().add(fadeOut);
}
if (newNode != null) {
FadeTransition fadeIn = new FadeTransition(Duration.seconds(1), newNode);
fadeIn.setFromValue(0);
fadeIn.setToValue(1);
fadeOutIn.getChildren().add(fadeIn);
}
fadeOutIn.play();
});
ものは、アプリケーションで設定されている方法によっては、ゼロにすべてのスタックペインの子の不透明度を初期化する必要があるかもしれません。
このコードはすべて、スタックペインへの参照であることに注意してください。
関連する問題
- 1. CHMファイルを電子メールで送信する際に内容が失われる
- 2. クーポンコードを電子メールで送信する際にクーポンコードを電子メールで送信する方法
- 3. 実際のデバイスでアンドロイドアプリケーションから電子メールを送信できません
- 4. Javafx8 Stackpane子供がマウスイベントをブロックする
- 5. RenderTransformを実際のUIElementsに適用できますか?
- 6. .net Webサイトから電子メールを送信する際のエラー
- 7. アプリケーション内に2つのAlarmManagerを送信できますか?
- 8. PHPで電子メールを送信する際のウェブサイトのパフォーマンス
- 9. git commit電子メールを複数の受信者に送信できますか?
- 10. cpを使用してwp7で電子メールを送信する際にbccを非表示にするには
- 11. メッセージを再送信するのに適していますか?
- 12. PHPで電子メールを送信するときにメールを送信できませんでした
- 13. デフォルトのgmailアプリを開かずに、送信者の電子メールIDだけを使用して電子メールを送信することもできます
- 14. メソッドで電子メールを送信する際にインデントが問題を引き起こしています
- 15. トランザクションでOracleで電子メールを送信できますか?
- 16. 電子メールを送信する際にエラーが発生しましたsystem.web.httpexceptions:メッセージをsmtpサーバーに送信できませんでした
- 17. VPC内からラムダからSESに電子メールを送信できない
- 18. 特定のクーポンコードがWooCommerceに適用されたときに電子メール通知を送信する
- 19. モノトゥッチ:電子メールを送信する際に「キャンセル」ボタンをキャプチャする方法は?
- 20. nodejs - nginx/pm2から電子メールアラートを送信できますか?
- 21. Jenkins Script Consoleから電子メールを送信できますか?
- 22. jQueryに単純なフェードトランジションを適用するにはどうすればよいですか?
- 23. Bindingパスに数学演算子を適用できますか?
- 24. 電子商取引でカスタムディメンション(ユーザースコープ)を送信できますか?
- 25. 電子メールを送信する際のSMTPエラー?
- 26. 電子メールを送信する際の問題
- 27. .NET - 電子メールを送信する際の例外
- 28. 電子メールを送信する際のエラー
- 29. 送信後に電子メールを送信
- 30. Suitescript - nlapiSendEmail()の場合、送信者に従業員レコードではない電子メールを送信できますか?
このコードをありがとうございましたが、それを理解するまでにはしばらく時間がかかりました。私が言ったように、私はJavaFXにとってまだかなり新しいです。しかし、私はこの方法で試したが、一貫して動作しなかった。いくつかの実行では、ボタンハンドラ内のすべての正面はリスナをトリガし、フェードは機能しましたが、他の実行では、1つまたは2つのボタンがクリックされた後に動作を停止します。 – Joe1962
Dang、コメントは短すぎるので、上記から続行してください: 私は考えを取って、ボタンが処理されるコントローラレベルで実装しました。クラスレベルでfadeInとfadeOutを設定し、子供は既に不透明度0で始まっているからです)。余分に必要とされたのは、現在の子ノードへの参照だったので、新しいノードでフェードアウトする前にフェードアウトする可能性があります。ああ、またfadeInは、fadeOut.setOnFinishedハンドラ(ハンドラをキャンセルするためにはfadeOut.setOnFinished(null)で終わる)の中に入れなければなりません。 – Joe1962
@ Joe1962「他の実行では、1回または2回ボタンをクリックした後に動作しなくなります。あなたはおそらく[this](http://tomasmikula.github.io/blog/2015/02/10/the-trouble-with-weak-listeners.html)に入っているでしょう。 'frontNode'バインディングをローカル変数ではなくインスタンス変数にすると、それを修正する必要があります。 –