質問
私のjavafx2アプリケーションをjavafx8にポートしようとしていますが、ポップアップコントロールを使用してLinux上のいくつかの問題に気付いた。
スクリーンショットは、ポップアップにその周囲にホワイトボックスを持っているかを示しています。通常は透明でドロップシャドウ効果があるはずです。
これは私のSlackware14 Linuxでのみ発生します、私は同じマシン上で実行されるWindows VMをテストし、それは正常にレンダリングされます。
問題はこれらの問題に関連していると思います https://javafx-jira.kenai.com/browse/rt-33709 https://javafx-jira.kenai.com/browse/rt-33750
解決
問題が何であるか
デフォルトのJavaFX 8(modena.css)は、トランスペアレントウィンドウ機能がいくつかのプラットフォーム(特にいくつかのLinuxプラットフォーム)でオプションであることを考慮に入れていません。
Java 9が出てくるまで、デフォルトのCSSが変更される可能性は低いです。
これはJava 8+のみの解決策です。
あなたのCSSをあなた自身のCSSを上書きして、あなたがあなたのコントロールの一部の周りに醜い白い境界領域を表示せずにそれらのプラットフォームをサポートできるようにするためにあなた自身のCSSを供給してください。あなたが提供するCSSは、透過的なウィンドウが基礎となるプラットフォームの機能ではなくUIをスタイルしていて、そのようなプラットフォームではまだ良く見えるようにすることができます。 透明ウィンドウ機能は条件付け機能です。アプリケーションの起動、チェック条件付き機能がサポートされているかどうかを確認するには、そうでない場合は、カスタムスタイルシートを application.setuseragentStyleSheet()
私はMac(透明なウィンドウ機能をサポートする)でこれをテストしたので、Linuxで予想通りうまく機能することを確認できませんが、それがうまく機能することを願っています: - )
import javafx.application.Application;
import javafx.application.ConditionalFeature;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class SolidPick extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) throws Exception {
ColorPicker picker = new ColorPicker();
if (Platform.isSupported(ConditionalFeature.TRANSPARENT_WINDOW)) {
Application.setUserAgentStylesheet(
this.getClass().getResource(
"solid-pick.css"
).toExternalForm()
);
}
StackPane layout = new StackPane(picker);
layout.setPadding(new Insets(10));
stage.setScene(new Scene(layout));
stage.show();
}
}
.
.color-palette {
-fx-background-radius: 0, 0;
-fx-effect: null;
}
.
これらの線:
- カラーピッカーポップアップを丸みを帯びたものではなく正方形の背景をポップアップします。
- 通常ポップアップを囲む半透明ドロップシャドウ効果を取り除きます。
これらのことの組み合わせは、透明な窓を提供しない環境ではずっと良く見える形と境界線でポップアップを提供します。
solid-pick.css
ファイルはSolidPickアプリケーションと同じディレクトリに配置されているため、アプリケーションJARにバンドルされ、アプリケーションクラスローダーで利用可能になります。
サンプル出力
ポップアップのドロップシャドウ境界線の有無にかかわらず、Mac上のレンダリングのサンプル出力はここにあります。
標準レンダリング=>
正方形の罫線とシャドウのないレンダリングとシャドウ=>
提案されたアプローチ
アプリケーション全体(そしておそらくmodena.cssスタイルシート全体)を通過し、カラーピッカーの上で行われたものと同様のアプローチを使用して、透明なウィンドウの不可環境で発生するレンダリングの問題を解決します。その後、アプリケーションで結果のスタイルシートを使用してください(ライセンス許可が許可されている場合)、 controlsfx