【Java標準GUIライブラリ】 JavaFX スレッド
話題にしたいのはGluonが金儲けをするためにはどうするべきだったかではなくて、
JavaFXが安定して発展するにはGluonがどうすればよかったかなのだが、
>>316で言ったように最初から無理ゲーだったということでおk? ニコニコ大百科見てないなら黙ってりゃいいのにでしゃばりかw >>331
言いたいことわからないとか本気でいってんのかよ
そんなんだから普及しないんだよバカ >>333
>>331が>>329の言いたいことがわからないことと、JavaFXが普及しないことに因果関係はないと思うんだけど。
>>333の頭の中身は大丈夫なのでしょうか。 いや>>333のバカってのはいわゆるツンデレというやつだろう。 >>334
言いたいことがわからないっていってるんだから因果関係もない
お前の頭が大丈夫なのか
そもそもJavaFXの関係ある話なの? JavaFXのスレでなに期待してんだろうなこのバカ >>334
わかったから
ニコニコ大百科での暗躍も実を結ばなかったな
JavaFX
https://dic.nicovideo.jp/a/javafx
で
何がいいたいかくらいわかれバカ >>350
言いたいことあるなら言ってみろ?オラ
ゴミレスしやがって >>351
マジレスするけどJavaFXの人気ないでしょ そもそも次スレ立つかどうかもわからんけど
次は標準が外れるんだな(´・ω・`) >>354
JDK11からなので、もう外れているとも言える。 誤解した。スレタイから標準の文字が外れるという意味か。 流行らせれば良いんだよ。そうすればデファクトスタンダードになってやがてISOとかに登録されて標準化される。 JDK8のJavaFX使うのむっちゃ楽だったのにな〜 >>360
まったくだ。
JDK11だとどうすれば使えるのかすらよくわからん。 ちょっとスレチだけどいい?もしかして、Java標準のGUIってSwing? まあ、最初からライブラリに含まれているので標準と言えば標準かな。 openjfx12からscenebuilder削除されたからgluonのハードフォークが名実ともにscenebuilderになったな。
プロパティファイル化けてんの直してほしいけど、今openjfxのスポンサーgluonだし、
openjfxの公式サイトがgluonでそこからダウンロード出来るのがgluonのビルドだし、
ただのミラーのはずだったgluonのportingのgithub issuesにopenjfx関連のissueあるしこのままjavafx乗っ取られたりしてなw
>>360,361,364
9以降にopenjfxの適当なdistroのモジュールパス通すだけよ。
gluonのsdkでも自分でビルドしてもビルドツール使ってもjavafxバンドルしたjre作っても何でも良いよ。
非モジュールのjavafxアプリをhogehogeするよりモジュール化した方が簡単。 corretto8入れて解決
足りないものがあるなら言えば入れてくれるだろ >>365が言ってるのは自己完結型だな
>>366はOS共通のJDKでJavaFXやる方法 >>366
言っても入れてもらえなかったぽい。代わりに
https://bell-sw.com/pages/java-8u212
なんてものがあるらしいが、問題は
BellSoftがマイナーすぎてOracleやAmazonほどに世間の検証を受けていないことか。 gluonのjavafxバイナリがマイナーチェンジする気まったくないな。
SceneBuilderは自分でビルドすればいいとしてopenjfxめんどくさいのがな。
Liberica JDKはopenjfxは12みたい。11の新しいリビジョンはソースからビルドするしかなさそう。 >>365 >>366
あのさあ・・・
JDK8時代と比べて何も違わんとか言いたげなのは明らかにおかしいだろ
そりゃ過疎るわ FXML使う価値ある?直接コード書いたほうが楽なんだけど >>371
SceneBuilderを使ってGUI上でFXMLを作成できるのが売り。
生FXMLを書くくらいならコードを書いた方が楽なのには同意する。 でもSceneBuilderだとすぐに限界に到達するんだが・・・。
JavaFXってのは迷走してるおかしなプロジェクトなのでは。
初期の頃何か独自スクリプトがあって廃止されて、FXMLとかSceneBuilderも微妙・・・。
性能もコード資産の量もSwingのほうが上だと言われてる。 そもそもなんでOracleはSwingを続けるんじゃなくJavaFXを始めたのか?
JavaFXはモバイル対応してるというけどSwingをモバイル対応させればよかったのでは >>374
どこまで本当か知らないけど、SceneBuilderみたいなGUIツールでデザインしてから
Swingのコードを生成するのは難しかった(実際にそういうツールはあるが不安定)
ので、XMLを導入することにしたとか聞いたことがある。
また、SwingにはBindingとかのReactive Programmingのような仕組みがない。
Swingもそれほど使われていなかったから、この際パラダイムごと更新してしまおうと思ったら
Swing以上に使われなかったというオチがついてしまった。 プロパティバインド使うとモデル側コードにStringPropertyとかの
JavaFX関連コードが出てきて嫌なんだけど?
どこがモデルとビューの分離なの?
それでどうやってビューを別のGUIフレームワークに自由に切り替えれるの? それはモデルじゃなくてライブラリが受け持つ話では? 例えば。
https://qiita.com/kenji-yokoi/items/5cd5f74865de7617cfb5
>public class Model {
>private StringProperty valueProperty = null;
https://docs.oracle.com/javase/jp/8/javafx/properties-binding-tutorial/binding.htm
>class Bill {
> private DoubleProperty amountDue = new SimpleDoubleProperty();
https://gist.github.com/aoetk/4363405
>public class Person {
> private StringProperty name = new SimpleStringProperty();
これらはすべてモデルにProperty系クラスが表れている。
でもPropertyはjavafxパッケージに含まれている。
モデルとビューの分離というなら、モデルをほかのGUIフレームワークでも使いまわせるように
クラス依存関係自体が分離されるべきだと思う。 >>376
自分も同じことを感じたことがあるので、言いたいことは概ねわかるつもり。
あるClass AModelの、あるフィールドAModel#fieldについて、Javaのお作法通りにしていれば
AModel#getField, AModel#setFieldをObjectPropertyを使って書けば、
AModelを継承したObserveableなModelクラスが出来上がるということなのかなと
解釈してそれ以上は考えないようにしている。
多分GUIフレームワークをJavaFXに一本化することを目標に開発されたので
他のGUIフレームワークでModelを使いまわすことは考えられてない。
Model作成の段階で最初からPropertyを用いるという前提だろうとは思う。
最初にも書いたように、他のライブラリやフレームワークと組み合わせようとすると
障害が大きいことには同意する。 JDKを作ってる人達なら
任意のオブジェクトの状態変更を監視するように作ることもできたんじゃないか?
オブジェクトの状態が更新されたらGUIも更新、
更新頻度が激しすぎるといけないから最速でも1秒に1回、とか。
それにしたってDB上で更新が発生したらどうするのかと思うけど。 >>380
できたとは思うけど、OptionalをObjectのスーパークラスにしなかったくらいだから、
そんな変更はできたとしても言語コンセプト的にもしなかっただろうと思う。
JavaFXがOptional以上に大事なものであればあるいいは...ないか....
DB上で更新検出はJavaFX以外でも難しそう。 プロパティバインドというアイデアは永続化されないモデルでだけ有効。
ゲームアプリならありそうだけど普通のアプリでは無さそうな気がする。
DBからオブジェクトを読み出す場合、読み出した時点のデータのまま変化しないし。
変化を検出できるのはもう一度DBから読み出した時だ。
最初独自スクリプトがあって廃止されて、プロパティバインドも微妙。
SceneBuilderやFXMLは一部の人達は使ってるのか知らんが俺には良さそうなものに思えないし。
JavaFXを設計してる人達の構想力まで怪しく思えてくる。
でもなぜかJavaFX好きではあるんだけど。 >>382
SceneBuilderはとっつきやすくて配置の微調整をやりながら構成するのに便利だったけど、
FXML内で反復(及び分岐)をしようとしたときと、動的に数値を変更しようとした時には絶望しか無いことには同意する。
まあ、コントローラー側と組み合わせてなんとかした。
プロパティバインドは、自分はゲームじゃないけどMVCで使っているうちにMVVMを再発明したw >>384
ありがとう。でもまだそれが存在しない頃の話だったんだ.... JavaFXが分離されてしまった今
JavaのGUIアプリは何を使うのが正解なのだろうか 自分で配布するjarファイルとかにはJavaFX含めても良いんだよな?
まあ多分俺はしないと思うが。 気晴らしに昔の話にレスしよう。
>>373
>性能もコード資産の量もSwingのほうが上だと言われてる。
newt並に低レベルなウィンドウ周りとレンダラのパイプラインが一段少ないからそれはないと思う。
ハードウェアもPS世代と固定機能世代だし。
>>374
>Swingをモバイル対応させればよかったのでは
初めからjava meで動く。CDC+AGUIでswing含む。
>>375
>また、SwingにはBindingとかのReactive Programmingのような仕組みがない。
SwingLabが開発しててJSRもあったけどsunがjavafxに注力するから全部白紙になっただけ。
SwingApp framework, beans binding, timing framework, SwingX, JMediaは白紙後全部javafxで同じアイディア実現したよ。
swing teamが協力したし。
swingにないのはコレクションベースのプロパティくらいかな。 JavaFXすごいなUIスレッドと別に描画スレッドがあるのか(WPFと同じ)
Swingでは描画もUIスレッドで行われていたから独自描画とか重いことするとキーイベントやマウスイベントが遅延してた
これがアプリが重いと言われる原因になることも多かったと思う
JavaFXでは描画スレッドが分離したおかげでUIスレッドが軽くなった
ただし中途半端な状態が描画されることもあるので実装には注意が必要
・スタイルクラス.blueを外す
・スタイルクラス.redを付ける
これだと色が青から赤に変わる前に一瞬デフォルトカラーが見えてしまうことがある(もちろん変更はUIスレッドでやってる)
・スタイルクラス.redを付ける
・スタイルクラス.blueを外す
といった工夫が必要 トランジション・アニメーションが描画スレッドだけで完結できないのが残念
プロパティ更新自体はUIスレッドで行われるから
マウスイベントハンドラなんかで重い処理をするとアニメーションがガタつく
結局、プログラマーが適切に非同期処理を実装しないといけないんだなあ SwingでもEDTで重い処理すんなってのは常識だと思ってたけど……
SwingUtilities#invokeLater(Runnable) とか…… ビジネスロジックをワーカースレッドで実行するのは当然分かってるよ
それでもUIスレッドでしかできないことってあるのよ 描画スレッド=UIスレッド=FXスレッドじゃないの?
描画スレッドとUIスレッドを別のものとして喋ってるのが良く分からん。
https://docs.oracle.com/javase/jp/8/javafx/interoperability-tutorial/concurrency.htm
トランジションあたりは良く調べてないけど、
その辺がスムーズに動かないならJavaFXベースのゲームエンジンは無謀なのかな。 JavaFXではUIスレッドとは別に描画スレッドがあるのよ
これがSwingとの大きな違い
UIスレッド=FXスレッド
描画スレッド=Prismスレッド
WPFも同様にUIスレッドと描画スレッドを持つGUIツールキットだ javafx+3dで描画軽くする方法ありますか?
大量にshape3dを表示すると重くて重くて
オクルージョンカリングなるものを実装しようにもjavaでの実例が見つからず厳しい やりたいことはこのように複数のBoxを組み合わせていきたい
https://imgur.com/p1mGbkc.png
ただ通常のBoxでは枠線が表示されないため現状1つのBoxにCylinderを12本くっつけて枠線として表示してる
他にはRectangleを6つ組み合わせて面表示しない方法
テクスチャ―を張り付けてそれっぽく見せる方法を試したけど今のところ一番良かったのがCylinderの手法
普通のBoxとワイヤーフレームを合体させる方法が一番軽量なんだけどTriangleMesh(三角形メッシュ)になってしまって見栄えが悪いのでNG
https://imgur.com/X6VrMC7
現状解決方法としてTriangleMesy→RectanleMeshにする
オクルージョンカリングを実装する
の2つが解決方法として考えられるがどっちも参考例がなくて厳しい
他の案でこんなのしたら解決できるのでは?とかこの案はこうすれば実装できる!とかあったら教えてほしい
質問スレチだったらすまん swing vs javafx自分の理解
メリット
・CSS
・prism。UIスレッドと分けられていて描画が停止しない。GPUが活用される。
・ラムダベースのAPI
・Scene Builderがある(個人的に便利と思わない)
デメリット
・バグが多い
・モデルとビューの分離がし辛い。StringPropertyとか使わない方が良さそう
その他
・ゲームエンジンも通常のGUIもjavafxで一本化できるかも
・標準から分離されたが、JDKと同じ範囲でサポートされるのか? >>404
まあそんな感じだね
Scene Builder不要は同意
ウィンドウリサイズに対応しようと思ったらHTMLのレスポンシブ対応みたいなのが必要になるから
FXMLでノードの入れ子構造を手書きするほうがいい
みんなHTMLは手書きするよね?ホームページビルダーみたいなWYSIWYG使わないでしょ
アプリの画面開発も同じ
JavaFXにバグが多いというのも事実だけどSwingと対比されるとちょっとなあ
だってSwingもバグ多くていまだにフィックス続いてるじゃない?いつ枯れるのよって
JavaFXはモデルとビューの分離も得意
プロパティバインディング使わないなんてもったいないよ! javafxで3dいじる人なんていないか…
悲しいなぁ >>407
javafx + java3dだ
書き方が悪かった >>408
自分も興味あるのでやりたいんだけど
資料情報が少ないしどっちも開発オワコンで・・・180度反転座標で混乱してるし
JavaFX 3Dは左上原点Y軸下方向+Z奥行+
2Dウィンドウと統合の為のブラウザ画面座標系
http://xiphia.info/wp-content/uploads/2014/12/fx_axis.png
Java3Dは画面中央原点でY軸上向き+画面手前Z軸+
一般的な3Dモデラーは右手座標系
http://xiphia.info/wp-content/uploads/2014/12/right_axis.png
2014で止まってる参考↓
http://xiphia.info/2014/12/08/124
JavaFXアーキテクチャ
http://xiphia.info/wp-content/uploads/2014/12/fx_arch.png
で、モデルの読み込みも自分で実装しなきゃいけなくて、
かつ、トゥーンシェーダーは無いみたいですね
これも自分で実装しろということみたいですね。
>>403でも2Dと統合してるのなら3Dのシリンダーで立方体の縁取りをしなくても
描画線幅のプロパティとかがありそうなもんですけどね
というかテクスチャ貼れるなら四角い「◻」画像貼った方が早そうな気がする >>409
プリズムエンジンがどういう動きをしているのか分かりませんが
OpenGLからJava 2Dに渡してシーンのステージを描いていて
ラインプロパティがCSSで変更可能なのか?どうかですね。 >>409
一応テクスチャで□画像貼り付けるやつもやったんだけど,シリンダーのほうが描画的には軽かったんだよね
自分のコードの問題かもしれないけど...
JavaFX3DのShape3DにBoxがあって一応線だけ(ワイヤーフレーム)表示がある
それと普通のBoxを組み合わせるとこんなんなるんだけど
やっぱり立方体だけど少し見栄えが良くない
でも数万個単位になるとシリンダー12個使うよりは当然軽いんだよねぇ...
https://imgur.com/3KfENIX.png >>411
根本的解決では無いけど
デフォルトで背面カリングされてるのかな
せめてシリンダー12個より細長くて黒い直方体12個のほうがポリゴンは減らせると思う >>411
>>412のJavaFX3Dをはじめてやってみたけどこんな感じ?
JavaFX_3D_Cube_Outline_Test
https://i.imgur.com/HY2x9vF.png >>412
背面カリングはデフォルトでされてるね!
なるほど
シリンダーじゃなくて直方体で試してみる! >>413
ポリゴンの数めっちゃ違うのね
そういうのも考えないと駄目だよな
軽くしたいって言ってるのに考えが足りんかった 最近書き込んでないけど3D軽くするアイデア募集してますよー
誰でもいいんだ…頼む… 別の 3Dでさ、軽くなるか重くなるかわからないけど
p5js の 3Dだとデフォルトで豆腐表示みたいですよ
輪郭の色とかも変えられた
https://i.imgur.com/7Y35cPf_d.jpg
https://i.imgur.com/CerH8PS.gif 40年近く前のアルゴリズム程度ならそんなに重たく無さそうだけどな
https://www.youtube.com/watch?v=co3ilmGNnTM
Java 3D Game from scratch - Stickman Sokoban (1982) 3D test Java - 3D Engine From scratch (with source code)
https://www.youtube.com/watch?v=co3ilmGNnTM >>418
案あざます!
ただjavafxで進んでるのでこのまま行きたいからちと厳しいです Java 3DもJava FXも情報少ないねー
別の質問なんだけどJava FXには
AndroidのWebViewみたいなブラウザ機能付けれないのかな?
WebGLで組み込めたりしないのだろうかと思っただけです。 >>419
>>420
わかりやすいのあざす!
gifサイズめちゃくちゃデカくて申し訳ない
やりたいことはこんな感じでいろんな立体を作れるんだ
1000個程度なら軽いんだが
数千になってくるとカクつき始めてしまう
数千個メモリにある状態でも描画を無くせば軽いので(見た目を透明にすれば軽いので)
描画処理に工夫出来ればと思ってるんだ
https://imgur.com/MMRc3G1.gif
否定っぽい意見で返すこともあるけど、こんなのはどう?って意見マジで助かるからバンバン欲しい
そこからアイデア生まれたりもするしね >>423
へーFX 3Dでここまで出来てるんだ面白そうだね
良いね👍
自分にはそれだけのプログラミング技術がないorz
ちなみにそれはシリンダーを直方体にしたら少しはマシになったやつのかな?
マイクラのはどうしてんでしょうかね?
インスタンスを 3D色ペンにしてるというより
objローダーか何かで読み込んでるのかな?
【MineCraft】 Mononoke hime Deidarabotti【でいだらぼっち】
https://www.youtube.com/watch?v=oVrPmdZ7oC4
プリミティブを毎度合成して作るくらいなら
3Dモデルを作って呼び出したほうが良いかもね もうひとつこっちは純粋なjavafxの質問!
質問ばっかでスマン
自由な形のボタンって作れますか?
透過pngの形に合わせてボタンの形と見た目も変わる感じ
わかりにくいgifだけどこんな感じでオシャレなボタンを作りたい
https://imgur.com/jRWHAuD.gif
例として矢印型のボタンを作るとか!
調べた限りボタンに画像を貼り付けるくらいしか近い資料はない
別の手法として2枚の画像を重ねておいてマウスが重なったら表示を変更する
この手法でボタンみたいにマウスが重なった際の見た目の変更を設ける
でその画像にクリックイベントをつけるってのが考えられるんだけどとてもスマートとは言えない
こっちもわかる人いたりしたらお願いします! >>424
シリンダー直方体にしたら多少良くなりました!
マジでその少しでもありがたい!
マイクラは凄いよねぇ
あの膨大なブロックの描画を可能にしてるんだから サポート終了だしJava FXやってる人少ないんだろうなー
自由形状ならペイントのポリゴンでポイント指定しまくって書けそうだけど
ボタンとなるとマウスの座標判定いるのかな・・・
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/paint/ImagePattern.html >>422
JavaFXにもWebViewあるよ
エンジンはWebKit