2017-08-04 16 views
2

私はJavaFXを使用してGUIを作成していますが、提供されたレイアウトマネージャのどれも私のニーズを満たしていないことがわかりました。組み込みのレイアウトマネージャのコードを見てきましたが、その多くはという制約を使用しています:レイアウトペインの子に適用できるプロパティはレイアウトの仕方に影響しますでる。 NodeクラスにはプロパティのObservableMapが付属し、設定制約によってこれらのプロパティの一部が設定されます。Pane.setConstraints()メソッドの非表示を回避する方法

問題は、間違った方法Pane.setConstraints()javafx.scene.layoutにパッケージプライベートであるため、パッケージ内で使用できないということです。この便利な機能をAPIから除外することは、私にとって奇妙なことです。

現時点で最もよくわかるのはNode.setProperties()メソッドを直接使用して、本質的にPane.setConstraints()の機能を複製することです。 Pane.setConstraints()メソッドでコードを再利用できる別の回避策がありますか?

Pane.setConstraints()は10行のコードで、可能な限り堅牢な実装を実現するためには、機能を複製するために、これらの10行をコピーして自分のコードに貼り付ける必要があります。

+1

バグレポートをユースケースで書き、おそらく "汚い"コードがfxが望むものです - [Jonathanの返信](http://mail.openjdk.java.net/pipermail/openjfx-dev/2017-August/)を参照してください。 020700.html)をメーリングリストに登録してください。変更があるか、実際にどれだけ有益なのかをたくさんの希望では保証しません。(そこには複数の経験があります。)それまで(現在のターゲットはjava10!)C&Pおよび/またはリフレクションが唯一の方法です...汚れている、違法な... – kleopatra

答えて

2

私はあなたがすでに正しい解決策を持っていると思います(コードをコピーしてクラスに貼り付けることです)。

私は、JavaFX開発者がセキュリティの観点から機能的に役立ち、維持しやすい最小限のAPIを維持したいと考えています。したがって、JavaFXのプライベートな実装の中に「隠されている」便利な機能があり、アプリケーション開発者が(機能は役に立ちそうですが)簡単にアクセスできません。保守性と機能性の間のトレードオフです。

リフレクションを使用してアクセシビリティの問題を回避し、カプセル化を破ることができます。通常は、公的にサポートされているAPIの一部ではないコードを呼び出しており、パブリックAPIで提供されている下位互換性のあるコンパイル保証がないため、このようなコードは将来のJavaバージョンでは機能しなくなる可能性があります。

いつでもリクエストを送信したり、パッチ要求を提供して一部の機能を利用できるようにすることができます(おそらくopenjfx-dev mailing listがこのプロセスを開始する最良の方法です)。

これまで、一部のJavaFXリリースでは以前はプライベートであった重要な機能が、その後のリリースで公開API(たとえばSkin classes for Java 9)でリリースされました。

関連する問題