JavaFX ボタンをクリックしたときの小さな拡張効果を削除するにはどうすればよいですか? また、メニューボタンのように機能させるにはどうすればよいですか(別の「メニュー」ボタンを押すまで、それを押してフォーカス状態のままにします)。ノードを同じフォーカスにグループ化する方法はありますか?
2 に答える
1 つの価格で 3 つの質問 ;-)
JavaFX ボタンをクリックしたときの小さな拡張効果を削除するにはどうすればよいですか?
ボタンをクリックするとピントが合い、ピントが合うとフォーカスリングに囲まれて少し大きくなります。この効果は css を介してトリガーされます。
デフォルトの css は、JavaFX ランタイム インストールの jfxrt.jar にある caspian.css にあります。関連する抜粋は次のとおりです。
.button {
-fx-skin: "com.sun.javafx.scene.control.skin.ButtonSkin";
-fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color;
-fx-background-insets: 0 0 -1 0, 0, 1, 2;
-fx-background-radius: 5, 5, 4, 3;
... }
.button:focused {
-fx-color: -fx-focused-base;
-fx-background-color: -fx-focus-color, -fx-outer-border, -fx-inner-border, -fx-body-color;
-fx-background-insets: -1.4, 0, 1, 2;
-fx-background-radius: 6.4, 5, 4, 3;
}
わずかな拡張効果を取り除くには、独自のスタイルシートを作成します。スタイルシートでそれをシーンに割り当て、フォーカスされたボタンとフォーカスされていないボタンの背景のインセットと半径を同じ値に設定します。JavaFX CSSのチュートリアルと、これまでになく便利な JavaFX CSSリファレンス ガイドを次に示します。
メニューボタンのように機能させるにはどうすればよいですか(別の「メニュー」ボタンを押すまで、それを押してフォーカス状態のままにします)。
この質問がよくわかりません。これがボタンのデフォルトの動作です。おそらく、フォーカスとアームの状態を混在させていて、実際にToggleButtonが必要ですか?
ノードを同じフォーカスにグループ化する方法はありますか?
現時点ではプラットフォームに組み込まれていません。フォーカスを持っていたペイン内の最後のコントロールを記憶し、ペインがフォーカスを戻すたびに再びフォーカスを再割り当てする、レイアウト ペイン用の独自の FocusModel クラスを作成できます。ただし、カスタムコードになります。使用する必要がある概念は、ノードのフォーカス プロパティ、ノード requestFocus API (デフォルトのフォーカス処理を確実にオーバーライドするために Platform.runLater で実行することで遅延が発生する場合があります)、および (私が思うに) デフォルトのフォーカス順序が依存するという事実です。親内の子の順序。
デフォルトのボタンが気に入らない場合は、お気に入りのボタンのスタイルを設定してください。それ以外の場合は、コードまたは画像を使用して小さな展開効果を説明します。
MenuとMenuItemsを使用してメニューを作成します。
または、トグルボタンを使用してボタンをグループ化し、メニューのように動作させます。
「フォーカスされた状態を維持する」とは、フォーカスされているのではなく、「選択/切り替えられた状態」を意味していると思います。ボタンをクリックした後、ボタンがフォーカスされた状態のままになる原因。