[Java] 91 JavaFX Borderの線種

JavaFXではボタンの枠線を二重線にできないことが発覚しました。実線、点線、破線のみです。ホバリングの際に二重線を出現させたかったのですががっかりです。線の表現力はSwingの方が数段上のようです。あとボタンの高さをどうしても変えられません。

5日間苦闘しながらJavaFXを再学習してきましたが、どうやら休止せざるを得なくなりました。グラデーションの掛かった図形を作ったりしたのに残念です。JavaScriptやWordPressの時もそうでしたが、CSS内の優先順位が見えなくて思う様に設定できずいつも苦労します。

またSwingに戻ってGUIアプリの作り込みに取り組んでいきます。問題の見た目はデフォルトがダサいだけで、手を入れればそれなりになると思います。

2022/1/18追記
枠線を二重線にできないのはSwingも同じ様です。SwingのL&F Metalではおそらくinsetsを設定して外側に複数の線を描いています。
JavaFXへのSwingコンポーネント埋め込みが可能な様なのでもう少し頑張ってみます。

[Java] 90 JavaFX Paneの詳細位置設定

TabヘッダやTabコンテンツの位置設定等に苦労していましたが、ようやく慣れてきました。この手の設定はSwingの方が断然楽です。

コードから設定する場合はPaneのsetStyleメソッド、CSSから設定する場合は各Paneのpaddingを調整します。ネット情報でコードからはCSSの内容をいじれないと書いていることがありますが、そんなことはありません。

特にTabPaneのタブの位置を調整するのに手こずりました。GitHubで配布しているcaspitan.cssやmodena.cssといった代表的なスタイルシートを元に自分なりにアレンジしました。

TabPaneの場合は以下の様に設定してタブをほぼ中央にもってきました。こういうのは私の様なCSS初心者が一から書いているとなかなか思いつかないです。”:top”を付けられずに立ち往生したでしょう。ネット情報では最後の砦のStackOverflow英語版でも類似の質問に対してまともな回答がありませんでした。今回はcaspitan.cssのおかげでなんとかできました。

CSSを使いこなすには書式を知っているか否かが全てでロジカルにアプローチできないのが厄介です。JavaFXが標準ライブラリから外されてしまった理由が何となく分かる様な気がします。

.tab-pane:top > .tab-header-area {
    -fx-background-insets: 0, 0 0 1 0;
    -fx-padding: 2 80 0 80 ;
}