Java低速GUI Swing 10
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所 >>3 そのコピペは立て逃げスレに貼るものなんだが _,,,,,ィ=ー-、_ / /. : : : : : : : : : : .ヽ / ィ /. : /: : : : : : : : : : : : .\ / ┼ /. : /: : : : ハ: : :}斗、ヽ: : .| ノ |. : /_: 斗〒\八」 ∨リリ _,_ 乂レl;W弋ノ };l_> | | `` ∠___l;人 , ─ァ ノ'ノ |: :从ハ`┼一ィ刋:::\ r┴, |: : : : : : :};Y/ハ{;;;;;;;;ノ / ヽ-‐ァ‐ァ';|l/\∧イ \ / /\/;;|l' ̄ハ } \ / |;;メ二ニ| | ャ、__/l;lゝ ト‐| / `/|_,_|;|,_,_,_,_,_ト′ / / |==|;|=====| ∠、,,ィ〜' └r幵─‐r七 {Ξ} 匕} Swingってなんでこんなに人気ないの? 割りと真面目に教えて下さい AWTもターゲットに入ってていいんだよね? Q. AWT と Swing 混ぜちゃ駄目って聞いたんですけど 混ぜちゃ駄目なんですか・・・・? A. 今まででは、「駄目」というのが正解です。 が、現在開発中(未リリース)のバージョンではSwingとAWTの混在ができるようになっています。 正式リリースがされるまで、情報の錯綜があって混乱すると思いますが 普通の人にとっては「まだ駄目」という状況だと思ってください。 Q. Nimbusって何よ。 A. 次期Swingの標準となるとされているLAFです。 元々は、SUNのGnome環境のテーマに使われていた見た目を移植したものになります。 実装にはXMLベースでLAFを定義できるSynthLookAndFeel を利用しています。 jdk6の開発版で試す事ができます。 Q. こんなプログラムを作れって言われたんですが・・・ A. 宿題スレへどうぞ。 Q. なんでスレタイに低速って入ってるの? A. まだまだ速くなるってことさ。 Q. JavaFX と Swing 混ぜちゃ駄目なの? A. SwingベースのアプリにJavaFXコンポーネントを乗せるのはOKです。 逆は不可です。(JavaFX2.0現在)ちなみに、JavaFX2.0は今年の下旬に リリースされます。今はベータ版です。 Nimbusに変えたいけどレイアウトが崩れるし 微妙にセンスが悪い気がするので結局Windowsのままだ Nimbusと混ぜるとウマーとJOGLパイプライン統合とアプレットのDnDはもうQ&Aでもよさそう。 SwingX系はJRE7の一般DL以降くらいじゃねか? JavaFXまわりは検討もつかん。JavaFXはprismエンジンだから描画スレッドとEDT別だよってのはここの範疇? >>7 見た目はWindowsのLookAndFeelでぎりぎりなんとかなるけど、 ファイル選択ダイアログの細部の挙動がネイティブと違って気持ち悪い。 あと、テキストフィールドで右クリックしたときの挙動とか。 でも、大きな理由はそんな細部じゃなくて、起動が遅いこと。 ディスクキャッシュに乗ってないとJVM起動して、関連するクラスロードして、 最初のフレーム表示するまでに数秒かかる。 動き出せばネイティブとの速度的な差はない。 会社で使う分には、起動が遅い方が、いいよ。その分、ゆとりがでる。 商用のソフトじゃ使われてないから人気がないように見えるけど 社内とかだと結構使われてたりするよ 数千行のテキストを容易に表示できて 表示するテキストを後から容易に追加できて テキスト中に何らかのコンポーネント(テキストのリンク、アイコン、ボタンなどどれでも良い)も表示できて そこからイベントを発生させられるような コンポーネントはありますか? JEditorPaneでハイパーリンクを使うことを考えましたが HTMLにテキストを追加するのが容易ではないのと、テキスト追加が頻繁にあると重くなりそうで、別の選択肢が無いか探しています。 テキスト追加と、表示とを分けて考えたほうがいい。 たとえば編集にはJTextArea、表示にJEditorPaneを使って、Wikiっぽくするとか どうよ? どうしても同じ画面でやりたいとかじゃなきゃ、いけそうだが。 テキスト追加はユーザが編集するのではなくて プログラムがテキストを出力します >>26 難しい、重いと思うならコンポーネントなんか使わないで独自実装でもすれば? ぐだぐだ抜かしてないで、まず実装してから最適化しろよ。 >>24 数千行くらいJEditorPaneで十分だがJListでも使っとけ >>27 質問の意図を理解してないアホは死ね >>28 どうもです JavaFXって一体どこで使うべき技術なのかいまいち分からない。 >>32 んなもん、おまぇ、Swingの代わりだろ・・ >>33 JavaFXってSwingに依存してないってこと? SwingもそのうちJava標準GUIライブラリの地位を 剥奪されたりすんのかな >>34 依存しなくてもできるし、依存してもいい。 もともと、JavaFXスクリプトっていって、WindowsプログラムにおけるWPFのような お気軽なGUI設計思考で作られた。でも、スクリプト自体がなんもなくなってしまった。 JavaFXにはコンポーネントが不足してるのでSwingも使う→ Swingにはリッチなコンポーネントが不足しているのでSwingXも使う(java7いまここ)→Swing labは終ってしまったので結局路頭に迷う。 Swingはん、まだまだこれからやで〜。 わし、今日、3980円もする、JavaGUIVol.1ていう、Swingばっかの本こうてきたわ。 奇遇やな わしおととい図書館でVol.2借りてきたで 付属のCDにVol1のソースまで付いてきて得した気分になったで UI 関連は、タッチパネルUI勢、HTML5勢の勢いがすごいからな すぐに Swing 並の API が JavaScript で用意できるか俺は懐疑的だが もしものすごい実装用意されたら、ついに Swing は終わってしまうな HTML5全盛の今でも、PCではまだIE6サポートしないといけないから実戦では使えない 流れてくるメッセージがちょいちょい違うから混乱するかもな。 それで混乱して質問したら「なんでそんなことやってんだ」と罵倒される。 それに変なクセがつきそう。 練習ならメインウインドウにボタンやらエディットコントロールを貼り付ければ良いと思うよ。 全部CreateWindowでできる。 猫でもわかるかWisdomsoft参考にしろ。 JApplet(Swingのアプレット)にJTableって乗せれる? >>47 どうもです。Javaアプレット復権しないっすかね〜。 しないだろう というかあんな時代はもう来なくていい Javaメインに使ってる自分としては、わざわざActionScriptとか別に覚えるの面倒だから Appletのが良いかな。 全盛期のjavaアプレットは、あまりに重くてただのブラクラと化してたけど Swingみたく今はそうでもないのかね iOS や Windows 8 がすでに、もうブラウザ上で動くプログラムは HTML5 オンリーと決め込んでるからな Flash も Java も Silverlight も廃れるべきと奴らは考えてるらしい。 おれが思いうに Java は着々とセキュリティホールは塞がれてるし、 動作速度も速い。ブラウザの対応も年の功で進んでる。開発環境は 揃ってて、クロスプラットフォームのクライアントサイドの技術と しては今ある中ではベストだと思うよ。 ブラウザがダメになるならAppletを実行・起動するにはどうすればいいんですか? JavaWebStartってアプレット扱えなかったっけ? ウィンドウベースのアプリケーションに移植するなら JApplet.setContentPane(mainPane) のとこを JFrame.setContentPane(mainPane) とかすれば、まあ動くだろう まあ、アプレットはブラウザ上でセキュアに動くから、 ユーザにとって価値があるのであって、なんでもやらかす ウィンドウベースのレガシーなアプリケーションにされると よくないだろう そういえば Adobe AIR はどこにいったかね >>58 確かに、html + JavaScript(&ライブラリ)使って開発するよりは、Javaプログラマにとっては ハードルは下がりますね… しかしGWT使った開発、規模が大きくなるとすごく面倒。 コンパイルが洒落にならないくらい時間かかる、ってのが一番大きいと思うけど、他にもデバッグ時とか。 同等規模のhtml5風開発したこと無いのでJavaプログラマにとってどっちがよりましか、 ってのは分からないんだけどもね。 >>55 Java6u10でAppletもJava Web StartもセキュリティについてはJNLPファイルで指定するようになったから 一緒なんだと思ってたけど、違うのかな? http://java.sun.com/developer/technicalArticles/javase/6u10_applets/ とか、ちょっとURL見つからないけどAppletをデスクトップにドラッグ&ドロップすると 通常のアプリのようにアイコンダブルクリックで起動できるようになる(JWSとしてインストールされる?) みたいなデモも昔見たことあるんだけど、こういうのみたときAppletとJWSって実質 同じものなのかなー、なんて思ったんだけど。 >>54 これかな? http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/javaws/developersguide/syntax.html#applet_desc ごめん、多分 > Appletをデスクトップにドラッグ&ドロップすると > 通常のアプリのようにアイコンダブルクリックで起動できるようになる(JWSとしてインストールされる?) は記憶違い。 そして>>55 はJWSのことを言ってるわけじゃないことにも気付きました… GWTってWAVEと同じでもうオワコンなんでしょ? JavaFXがmobile&tabletでも動けばなぁ。 ここの部分は切り捨てなくてよかったと思うよJavaFX。 つかAndroidで動くCDC/PPがいるか。 javaでRIAがもっとしっかりしてればウェブトップ開発に使えたのに java質問スレとどっちに書くか迷ったのですが、こちらで 質問させてください。 BorderLayoutなJFrameのCENTER位置にJTabbedPaneを 置いて、MouseListener#mouseExitedを仕込みその中で setCursorsしています。 すると、JTabbedPaneから周りのcomponentにゆっくり カーソルを出した場合は、さらにwindow外にポインタを 出してもsetしたカーソルを維持してくれます。 が、マウスを早く動かして周りのcomponent上での滞空時間が 短くなるようにカーソルをwindow外に出した場合は、カーソルが 変わってくれなかったり、windowの大きさ変更のカーソルに なったりします。 これをゆっくり動かしたときと同じようにすることは出来ない でしょうか。 (mouseExitedイベント自体はちゃんと発生してます) (window外で発生するmouseDraggedイベント内でsetCursors してもカーソルは変わってくれませんでした) (setCursorsはRootPaneのGlassPaneにおこなっています) setCursorのjavadocに、「このコンポーネントの contains メソッドが 現在のカーソル位置に対して true を返」さないと駄目って書いてある じゃんorz マウスの動きが速くてsetCursor前にコンポーネント外に出てしまうと きかなくなっちゃう、って話ですね。 完全にawtの問題でした。質問すれに行きます。すれ汚しすまんかったです。 >>66 RIAとAndroidになんの関係があるんだ? SwingUtilities.invokeAndWait() が invocationTargetException をスローするとEDTが終了してくれないようなのですが、 何かいい対処方法ないでしょうか… ttp://javafaq.jp/S065.html#S065-37 ああ、ここらへんみたいです。自己解決しました。 5か6で必要なくなったけど全部のケースじゃなかったのか? >>71 EDTの生成、終了ってユーザが管理するものではないと思うが… 死んでも勝手に復活するぞ? SwingでmouseClickedの中でnew JDialog(...)してsetVisible(true)すると、 そこで処理が止まっちゃうんだけど、どうしたらいいの? class HogeListener extends MouseAdaptor { public voud mouseClicked(MouseEvent ev.) { JDialog dialog = new JDialog(...); System.out.println("1"); dialog.setVisible(true); System.out.println("2"); } } setModalityType()とかでモードレスに設定するか 普通にJFrameでも使おう。 さんくすです。 モーダルダイアログだとsetVisible(true)すると setVisible(false)かdisponse()するまで処理が止まるんですね。 http://pastebin.com/4qH6Adke 上記のようなTableTest.javaというjavaのソースファイルを実行すると、 下図のように、表の部分にマダマダ余白があるにも関わらずスクロールバーが現れてしまうUIとなってしまいます http://uproda.2ch-library.com/475736Up9/lib475736.jpg このレイアウトで余白がなくなるまでスクロールバーが表示されないようにするにはどうすれば良いでしょうか? また、初心者なので他に変な所があれば指摘頂けるとありがたいです >>81 35,36行目、JSplitPaneにつっこむところのJScrollPaneを消す。 >>82 出来ました!それすると表の項目名(xとy)が表示されないものとばかり思ってました ありがとうございます JTableの選択モードで ・クリックしたセルを含む行全体を選択(ハイライト) ・同時に選択できる行は1行のみ のようにするにはどう選択モードを設定すればよいですか? JTable table; table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setCellSelectionEnabled(false); JEditorPaneにHTMLフォームを表示しsubmitボタンでフォームデータを表示するプログラムを ↓を参考に作成しましたが、submitボタンでNullPointerExceptionが発生します。 ttp://www15.plala.or.jp/kichijitsu/java/jeditorpane_submit.html どこがおかしいのでしょうか? editorPane.setEditable(false); editorPane.setContentType("text/html"); editorPane.setText(content); ((HTMLEditorKit) editorPane.getEditorKit()).setAutoFormSubmission(false); editorPane.addHyperlinkListener(new MyHyperlinkListener()); class MyHyperlinkListener implements HyperlinkListener { @Override public void hyperlinkUpdate(HyperlinkEvent event) { System.out.println("HOGEHOGE"); //←マウスがリンクに重なると表示されます。 if(event instanceof FormSubmitEvent) { System.out.println("PIYOPIYO"); //←submitボタンを押してもここまできません。 ・・・・ } ・・・・ ↓発生する例外 Exception occurred during event dispatching: java.lang.NullPointerException at javax.swing.text.html.FormView.submitData(FormView.java:376) at javax.swing.text.html.FormView.actionPerformed(FormView.java:356) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) ・・・・ ポップアップメニューで選択されたのをトリガーとして なにか重い処理を行う場合(サンプルコードのdoSomethingメソッドのような)、 ポップアップメニューが表示されたまま、画面が固まったようになってしまいます。 画面が固まるのは仕方ないとして、別処理の前にポップアップメニューを 非表示にすることはできないのでしょうか。よろしくお願いします。 サンプルコードは以下です http://ideone.com/zIVRZ >>87 別スレッド立てて、そのなかで重い処理すればいいよ。 今時はスレッドを直接使うんじゃなく、swingworker使うのが普通かな。 http://uproda.2ch-library.com/484203UfN/lib484203.png Windows環境(XP/7)の文字入力で変換候補ウィンドウが入力文字に重なってしまうのを、 重ならない様に表示する方法があれば教えてください。 AWTでの表示のようになって欲しいです。 >>89 Sunの実装が手抜きで未確定文字左下のx,yしかwindowsに送ってないのが原因だから、 Java側からじゃどうしようもないと思う。 BugDatabase行くか、Swing使うの諦めるか、我慢するか。 どうしようもないですか… 分かりました、ありがとうございました。 GUIスレッドとファイル・通信を行う2つスレッドのがあります。 ファイル・通信を行うスレッドでイベントを発生させて、GUIスレッドでイベントをキャッチしたいのです。 どのようにすればイベントを発生させることができますか SwingUtilities.invokeLater あるウインドウAのメニューからそのウインドウの設定パネルBを出して、ウインドウAの位置や 大きさの現在値を表示したいのですが、設定パネルBを生成するのがウインドウAのコンストラクタ内 (Aの部品のメニューにaddActionListener()を設定して,その中でnew ActionListener(), さらにその中でactionPerformed(ActionEvent)として,その中で new B() を呼ぶ) なので,Aへの参照をBのコンストラクタに引数で渡して B(A instanceOfA) のようにしても instanceOfAには常にnullしか入っていません。(つまりAのコンストラクタが完了して完全にAを 生成した状態になる前の時点でB(A)を呼び出してしまっているのだと思います) こういうときSwingではどういうふうにするのが常套手段なんでしょうか? Aのコンストラクタ内以外でBのデータを更新して表示する方法があるのかわかりません。 お教えいただきたくお願いします。 どうみてもメニューが押されて初めてBが生成されてるようにしか読めないのだが。 Bのコンストラクタにthisを渡したらthisがnullだったわけ? >>95 そうれす。 この場合のthisはAなんだけど、Bのコンストラクタを呼び出すのがAのコンストラクタの内部だから Aがまだ生成されていないのでthisはまだnullのままなんだと思う。 JavaはそこそこやってるんだけどSwingは最近始めたばかりなので感覚がわからん。 ウインドウA への参照を aRoot として取得できるかと思って B を生成するメニュー項目 menuItemB を使い final JFrame aRoot = (JFrame) SwingUtilities.getRoot(menuItemB); みたいなのをイベント発生前に入れてみても、所詮 A のコンストラクタ内なのでaRoot==nullなんだな。 目的とする処理はありがちなので常套手段があるんだと思う。引き続きお願いします。 this 自身はたとえコンストラクタの中でも null にならないよ! きっと何か勘違いしてるよ! 本当にコンストラクタのせいだと思うならコンストラクタであれこれ初期化するのをやめればいいだけじゃない! init メソッドとか別に作ってそこで色々やればいいと思うよ! 内部クラスでのthis参照は色々と落とし穴があるので要注意。 解らなかったらとりあえず内部クラス使うのやめてみよう。 いや、thisがnullとかありえないから。 >>98 >>99 ついでに>>97 確認のために内部クラスを使わずに単純なクラスA,Bを作り、Aのコンストラクタ内部で BのコンストラクタB(A)を呼び出してみましたが,たしかにAには非null値がちゃんと渡されていました。 >>99 さんのご指摘のとおり、やはり内部クラスからのthis参照がまずいようです。 >>98 さんのご指摘のようにコンストラクタ以外のinit()メソッドのようなものを作って呼び出したいのですが どのタイミングで呼び出せば良いかがわかりません。 「パネルBを開いた」というのを、Bのコンストラクタでもなく、actionPerformed()ブロックの中でもなく 呼び出すには、Swingではどのようなからくりを使うんでしょう?初心者でサーセン。 >>100 誤>「パネルBを開いた」というのを、...呼び出すには、... 正>「パネルBを開いた」というのを、...知るには、... A() { JMenu menu; menu.addActionListener(new ActionListener() { actionPerformed(ActionEvent event) { B b = new B(this); } }); } ということ?(上はかなりてきとーだけど) 上の場合の this は A ではなくて、無名クラスのですよ。 下のようにすれば、望みどおりいくような気がします。 見当違いでないとよいのですが。 A() { JMenu menu; menu.addActionListener(new ActionListener() { actionPerformed(ActionEvent event) { createB(); } }); } private void createB() { B b = new B(this); } eclipseスレから誘導されてきました Eclipse + WindowBuilderでGUIを作って フォームにButtonnとLabelを置いて、Buttonをダブルクリックして自動的に開いたソースコードの部分に labelのテキストをSetText("変更しました")って変更したいんですけどlabelのオブジェクトにアクセスできないわけなんです どうやってlabelにアクセスするのでしょうか? >>103 誘導されたとはいえ、いくら何でもひどい。 Eclipseスレで「JavaのSwingの基礎知識をググってから 」ってところを何もしてないのがバレバレ。 Javaがある程度理解できるなら、ダブルクリックで表示されたソースを見ただけで labelのインスタンスがわかるはず。 そういやJava初心者スレってないんだな。 宿題丸投げスレが該当すんのかな >>107 いやあのスレは初心者スレだから。分けてもしょうがない。 388 名前:デフォルトの名無しさん 投稿日:2012/03/05(月) 23:21:06.19 誰か初心者スレ立てろ 389 名前:デフォルトの名無しさん 投稿日:2012/03/05(月) 23:23:41.72 いらねえよ http://toro.2ch.net/test/read.cgi/tech/1329715551/388-389 ★★Java質問・相談スレッド152★★ >>102 さまはじめみなさま どうもありがとうございました。やりたかったのは次のようなことでした。 public class FrameA extends JFrame { final JFrame frameA = this; //これで期待通り動いた[PPP] JMenuItem menuItemForB = new JMenuItem(); menuItemForB.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { panelB = new PanelB(frameA); //[QQQ] } } ); } public class PanelB extends JPanel { public PanelB(FrameA frameA) //frameAの参照を引数で渡す[RRR] { //ここから frameA を操作するために frameA を参照する } } [PPP] のように単純に FrameA の this を取って [QQQ] [RRR] のように引数で渡したところ期待通り PanelB の内部から frameA を参照して操作できるようになりました。動かなかった原因は [PPP] の this のかわりに>>96 に書いたaRootを使っていたことでした。これでOKですが、もし [RRR]のように 引数で親の参照を渡すのより良い方法がSwingプログラムの常套手段にあるようならお教えください。 PanelBが内部クラスならできるよ public class FrameA extends JFrame { JMenuItem menuItemForB = new JMenuItem(); public FrameA(){ menuItemForB.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { panelB = new PanelB(){ } } ); } public class PanelB extends JPanel { public PanelB() //frameAの参照を引数で渡す[RRR] { //FrameA.thisで呼ぶ } } } >>113 なるほど FrameA の中で PanelB を定義すれば FrameA.this が見えるわけですね。 なお >>111 に示したコードの前半もほんとうは>>113 のように FrameA の コンストラクタ内にあったんですが貼り付けるときに削除してしまっていました。 Swing も内部クラスも使ったことがなかったので勉強になります。ただ、PanelB の コードは FrameA から独立させて書いておきたいので、Swing のマナー違反でない 限り >>111 のような引数渡しの方法を使おうと思っています。どうもありがとうございました。 単に public class FrameA extends JFrame { JMenuItem menuItemForB = new JMenuItem(); menuItemForB.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { panelB = new PanelB(FrameA.this); } } ); } は? >>115 いちいちframeAに代入したりしないで直接FrameA.thisを渡すということですね。 >>111 よりスマートだしいけそうですね。どうもありがとうございます。 JFrame をマウスでドラッグして移動するイベントを取得するにはどのようにするのが 定石なんでしょうか?以下のような構造のコードを書いてみましたが、タイトルバーの下の 本体領域の内部では[A][B]の処理が行われるものの、本来の目的である JFrame 全体の ドラッグは検知しないようです。HierarchyBoundsListener() を使えば JFrame 移動の イベントを取得できましたが、マウスのドラッグ以外による移動まで検知してしまうので できれば使いたくありません。簡単な方法がありましたらお教えいただきたくお願いします。 public class Test extends JFrame implements MouseMotionListener { public Test() { ... addMouseMotionListener(this); } public void mouseDragged(MouseEvent e) { ... } //[A] public void mouseMoved(MouseEvent e) { ... } //[B] } >>117 で質問したものです。挙動がおかしかったのはマルチディスプレイ・ マルチワークスペースという少し特殊な環境でテストしていたからのようで、 普通の単一スクリーン上でテストしたところ期待通り動いていました。 現在 HyerarchyBoundsListenerを使っていますが、ComponentListener の componentMoved() でも良さそうです。マルチ・ワークスペースに対応する ように修正することにします。うまくいかなかったらまた質問させてください。 http://orablogs-jp.blogspot.jp/2012/02/mpeg-4-multimedia-support-in-javafx.html 2012年2月10日 [JavaFX] MPEG-4 multimedia support in JavaFX JavaFX 2.1で、H.264/AVCビデオとAdvanced Audio Coding (AAC)オーディオを含むMPEG-4マルチメディアコンテナフォーマットで格納されているデジタルメディアの再生をサポートしました。 この新しい機能は、JavaFXのサポートされているすべてのOS(Mac OS X、Linux、Windows XPとVista (32bit) 、およびWindows 7 (32/64bit)を含む)全体で動作します。 実際のオーディオおよびビデオのデコーディングは、OS固有のメディアエンジンに依存していますが、 JavaFXのメディアフレームワークは、これらのネイティブエンジンでサポートされているすべてのマルチメディアコンテナフォーマットと、メディアのエンコーディングを処理しようとしているわけではありません。 (*) JavaFX 2.0は既に以下のメディアフォーマットをサポートしています。 音声:MP3、非圧縮PCMを含むAIFF、非圧縮PCMを含むWAV 動画:VP6ビデオを含むFLV、MP3オーディオ 日経ソフトウェアの2011年9月号に載ってた Android用の静止画をモザイク処理するプログラムを PC用のJava SEにJavaの部分とJNIを使ったC言語の部分だけ移植してみたんだが 64bit版のJava SEと32bit版のJavaSEでかなり性能が違うな 計測に使ったOSは64bit版Windows 7 SP1でCコンパイラはWindows SDKのを使用 CPUはCeleron G530定格 初回実行時 2回目実行時 java C言語 java C言語 32bit 36ミリ秒 16ミリ秒 29ミリ秒 16ミリ秒 64bit 25ミリ秒 12ミリ秒 8ミリ秒 12ミリ秒 64bit版のJava SEは-versionでバージョン表示するとJava HotSpot(TM) 64-Bit Server VM、 32bit版のJava SEは-versionでバージョン表示するとJava HotSpot(TM) Client VMと出ますが 1度実行した部分の実行速度がかなり違うようです もっと大きい静止画(4000x4000ピクセル)で試してみた 初回実行時 2回目以降実行時 java C言語 java C言語 32bit 274ミリ秒 133ミリ秒 244ミリ秒 133ミリ秒 64bit 87ミリ秒 100ミリ秒 65ミリ秒 100ミリ秒 マイナーアップデート毎にもデフォルトで有効になってる最適化オプション違うんでjreのバージョンも書いてくれ。 java version "1.7.0_03" Java(TM) SE Runtime Environment (build 1.7.0_03-b05) Java HotSpot(TM) Client VM (build 22.1-b02, mixed mode, sharing) java version "1.7.0_03" Java(TM) SE Runtime Environment (build 1.7.0_03-b05) Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode) >CPUはCeleron G530定格 エンコードなど高負担のときなどにも日常的にOCしてるんですか? 64bit版でJavaよりJNIを使ったCの処理が遅いのは JNIで画素数分の巨大なint型配列を引数として渡しているので おそらくJNIのインターフェースのオーバーヘッドによるものだと思います >>123 32bitと64bitの違いよりも、Client VMとServer VMの違いの方が大きいと思うよ。 32bitもServer VMで動かしてみな。 >>123 >>122 のときは-XX:+PrintFlagsFinalオプション使うんだ。 レスポンスの話なら7u4にするとG1 GC使えるからもっと良くなるよ。 client VMってまだあったんだ。 実行速度を優先したい場合は 32bit版のJavaでは-server オプションを指定するといいってことか >>127 えっG1GCってJava6u10からじゃないの? >>129 デフォがg1gcになるのが 7u4からってことでは? >>129 商用サポート先行だからu4未満はAdvancedかSuiteにしかない -server付けるとメモリ喰われて嬉しくないデメリットは有るんじゃないの? 鯖なら速度重視でメモリ積んどけでいいけど、クライアントpcでメモリ増やせってのはなかなか言えないかもしれない。台数多かったりするし。 >>133 存在するけど機能しないオプションは通知なしに無視されるからデフォ設定で起動してたんじゃね? オプションの通知周りはu4で変更入ってたと思う。 ここ数年内に標準的なディスプレイの解像度が一気に3倍ぐらいうpするシナリオが Retinaとかで結構現実味を帯びてきたわけだが、 Swingプログラマはどう立ち回っとけばいいの? フォント周りはポイントサイズでの指定を徹底し、 ボタンやラベルやメニューを普通に使うぶんには JRE側でなんとかdpiを吸収してくれるのかな… 超解像度が必要になってくるのは家庭用の4KやQFHDなビデオソフトが出てきてからだろう。 WUXGAでたりないなら数枚並ばれば間に合う。いままでにWUXGA以上が出てるのに普及しなかっただろ。 >>135 サイズ固定にしないで設定で変えられるようにしとけばOK。 4KとかWUXGAとかは画素数の話で、DPI関係なくない? JUDEのウィンドウ実寸が1/3とかになったら目にきついからUML引退するっ >>138 デスクの上に置くのに26インチ以上は無理があるだろうから今後は画素数だけ上がってDPIが大きくなるよ。 ノートやタブレットだとなおさら。 Na na na, na-na-na-na, na-na-na-na もう世の中アプリというアプリはみんなHTML5/CSS3でデザインするんだ Swingはもう完全に役目を終えたよ ご苦労さんでした JavaFX2.0はXMLだっけ? HTMLにしとけばいいのに。 >>145 viewの定義をxmlでやるのは 最近のGUIではむしろトレンドだと思うんだが つうかJavaScriptとかで書かれた小汚いコードいじりたくねえ >>144 コンシューマー向けはそうなるかも試練な >>146 ttp://gihyo.jp/magazine/wdpress/archive/2012/vol69 Comparators ── 比べてみればわかること 【第2回】マークアップ vs. ツリー >>149 ん?この本買えっつーこと? それは勘弁 すまんが自分の言葉で書いてくれないか? >>146 以前からやってたマイクロソフトやアドビはしかたないけど、 HTML5の仕様がほぼ固まったあとに新たに違うものを覚えさせるより、 それに乗っかったほうが楽じゃなかったのかなと思うよ。 マイクロソフトはMETROではそうするんだろ。 >>151 正直domをJavaScriptみたいなクソ言語でゴリゴリいじるとかやってらんないんだけど それだけならまだいいけどサーバに問い合わせに逝くところ以外全部jsで書けと? 変数のスコープぐらいなんとかしてほしい。。。 別にHTML5絶対反対とか言わないよ 仕事で勉強しているし 押し付けられてもうざいだけ でも、クライアントアプリのGUIデザインで使うJavaScriptなら まともなクラスも、letによるまともなスコープもある最新のJSが使えるだろうし ブラウザで動くんじゃないから、ブラウザ非互換も考えなくていいし そこまでうんこじゃないんじゃないか >>151 HTMLで出来る事だったらそれで良いかもしれない。 だがねHTMLタグにはコンポーネントの場合どうするの? 例えばchartとか。 タダのcanvas置いといてidにそれらしい名前つけるとか、 divタグにnamespaceで特殊属性とか付けてる方が理解不能になるよ。 Adobeだって独自XMLだが、見た目はCSSで定義可能だよ。 Webアプリに関しても結局テンプレートエンジンとかが必要になるしな。 Wicketとかは素のHTMLに独自属性だから一番近い感じになるだろうけど。 XMLCだと画面はHTMLで書けるが、サーバ側でごりごりDOM操作しなきゃならんし。 htmlより抽象化された構文のxmlの方が画面の構造定義しやすいし Controllerのクラスにバインドして簡単にハンドリング出来る とは言ってもスマホのブラウザあたりからいじれるhtmlメインのアプリの利便性は否定しないよ 専用ランタイム要求する時点で相当敷居があがる 昔みたいなFlashしかなかった時代じゃないし でもJavaScriptほどウンコな言語もそうそう無いと思う JavaScriptはうんこだとしても、flashの方がいいって思ってるのか? つーか、ブラウザは普通に他の言語でも動くようにすればいいだけだと思うが。 だよね ブラウザで python が動いたら楽しいだろうな >>156 Flashは死滅して欲しい まぁFlexとか触ったことないけど >>156 AS3はJavaScriptより良いと思う。 よりJavaに近いからそう思うだけかもしれないが。 >>159 ゲーム系死滅するからFlash死滅は困る >>160 スレ違いだけど過疎スレだからいっか。。。 WebGLとかどーなん? >>161 OpenGLをWebに持って来たって感じだから、素でも使える人間なら使えるんじゃない? まぁ、普通無理。 なんで結局ライブラリを使うわけだが、それでも3Dの素養が必須。 使えるブラウザ及びOSなら描画最速。(ハードウェア支援があるから当然と言えば当然) Canvasに素で書くより、ライブラリ経由してでもWebGL使った方が速いらしい。 最終的にはCanvasに描かれるんだけどね。 インタラクティブなもの、例えば地図を立体的に描く場合とかに有効だろうけど、 ゲームとかに使う場合、JavaScriptをオブファスケータとかに掛けないと すぐ中身見られるしあんまり美味しくないと思う。 画像データとかも保護されないし。 swfはそういう実行物のパッケージングとしては優秀だったと思う。 >>160 スマホのFlashはフェードアウトするみたいだけど、どうなるん? Flashがデスクトップのゲーム用にフォーカスすることになって 立ち位置がますますかぶるDirectorの将来がヤバい >>164 スマホで金になりそうなのはアプリしかないでしょってことで、 アプリ制作にフォーカスしてランタイム作りますって事だと思う。 簡単な紙芝居とかだったら今まで使ってきたツールで作れて、 iPhone,Android両対応出来ますぜと。 マウスが存在する従来環境であれば今まで通りでいいんだろうけど、 タッチインターフェースはまるで違うからね。 インタラクティブってこうやればとか思ってた部分が根本的に変わるから。 アポーがアップデート配信タラタラするからだろ 別に堅牢なOSでもないのにウィルス対策入れてないの多いし >>171 ,172 友人が先祖代々信者だがそういう連中はそういうの分かり切っててmacだからで諦めてるよ。 あれが出来ねーとかごちゃごちゃいってるのはにわかだから生粋の信者は文句ないらしいぞ。 開発するならwindowsとか言ってたし。 道具に接する態度としてどっちがいいかはなんともいえんな Macなんて所詮道具(キリっ) 道具が目的化したのがWindows(キリっ) アプレットでjava7に切り替えた途端、ネットワーク接続が以下のエラーで失敗するようになりましたが、 アップデートで何か気にしなければならないことはあるでしょうか? Caused by: java.net.SocketException: Permission denied: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:79) >>176 -Djava.net.preferIPv4Stack=true IPv6がらみ。 JavaFXの姉妹スレはC++さんに荒らしされてるのでこっちでお聞きします。 metalがまだsteelのころに、metalworksだったかのサンプルでcolorがred,greenなど全体の印象を変更できたのですが、metal laf (steel,ocean)の時にそれらカラーなどをSystem.setPropertyなどのプロパのセットのやり方だけで設定することは出来ませんか? Containerクラスの以下のメソッドで、マウス下の部品を取ろうと思っていますが、 コンボボックス、テキストボックス、JTabbedPane、JScrollPaneなどは取れますが、ラベルがどうしても取れません。 なにかいい方法はないでしょうか? Component getMouseEventTarget(int x, int y, boolean includeSelf) { WindowsのネイティブアプリからSwingアプリにドラッグアンドドロップすると ネイティブアプリ固まるようになってね? Swingアプリを終了するまでネイティブアプリ操作できないし ネイティブアプリ領域にマウスポインタもってくとアイコンがドラッグアンドドロップ状態のままだから ドラッグアンドドロップの終了処理がないとかのミスだと思うが。 ドロップで受けたときにスレッドに処理を預ければいいんじゃないの?知らんけど パネルの指定した座標上にある最上位の部品を判断する方法はありますか? これの逆ギャックっぽいものを探しています。 SwingUtilities.getDeepestComponentAt アプレットとか考えなくて良いならgetWindowAncestorで取れんじゃないの? JTextArea のインスタンスについては setBackground(色) を使って普通に背景色を 設定できるんだけどなぜか JTextPane のインスタンスには同じ方法で設定できません (デフォルトの白のまま) 考えられる問題点とか対処方法について情報があったら教えて >>187 背景色指定されたHTML文書読ませた、とか? うちでは引数なしコンストラクタで生成したJTextPaneに setBackground()で背景色指定したら反映された。 >>189 読み込ませたのは通常のプレーンテキストです。単純な ttp://www.johnloomis.org/cpe101/notes/SwingGUI/JTextPane/diagnostic.html みたいな場合は問題なく背景色が設定されるんだけど少し複雑な構造になっているので おかしなことをやっているのかもしれない。JTextPaneの場合には色の設定方法にコツが いるみたいなのでJTextAreaへの変更も含めてもう少し検討します。どうもありがとう ボタンを押すと、GUIが配置される仕組みにしています。 JButtonやJLabelなどはこれができるのですが、JTabbedPaneだけ表示されません。 JTabbedPaneは何か特殊な仕様になっていますか? 自己解決しました それぞれのタブを全部可視化しなきゃならんのか Javaアップデートの準備ができました? って疑問形でタスクバーに表示されたけど、こんな風な聞かれ方だっけ? ( ´_ゝ`)フーン・・・ Σ (゚Д゚;)マジ? 念のため無料のアバストで全てのファルをウイルスチェックしましたが大丈夫だったぽいです。 public class main extends JApplet{ public void init(){ JButton 画像の描画スレッド } public void run(){ 描画スレッドの中身 repaint(); } public void paint(Graphics g){} } 画像を描画しながらJButtonを前面に表示するにはどうやれば良いですか? また、初期状態でJButtonが表示されずにマウスポインタをオーバーさせたら表示されます。これはどうしてですか? 2000年付近の数年はイントラ向けアプリでボロ儲けではないけど普通に。 今も仕事自体はあるけど段々他プラットフォームに移行してる 2000年っていうと、いわゆるWeb系の超初めのころだね。Strutsとかまだなかったんだよな・・ サーブレットとJSPとJavaBeansで頑張ってた頃。 単純にJTextAreaへの参照が正しく貼られていなかったのが原因でした >>189 さんありがとう 軽量の意味はOSの機能を使っていないという意味なんですよ。 速いという意味ではないんです。 だから、Swingは十分高速なんです。 今のスレタイに落ち着いた経緯をご存知ないということでしょう JavaFXスレと分離しているのはなぜよ? 向こうはもう完全にFXスレにしてまえばえーやん Java低速GUI Swing & JavaFX 10 http://toro.2ch.net/test/read.cgi/tech/1316592884/5 5 名前:1[sage] 投稿日:2011/09/21(水) 18:42:16.09 すまん・・重複だったみたい・・ macのJFileChooserのやる気のなさパねぇ いまはopenjdkベースだから開発者が少ないと実装が遅いでしょ macの開発できるならオープンソースコミュニティは喜ばれると思うよ。 jtableの最終行の色を変えたいのですが どうすればいいでしょうか? getRowcount()でレコード数がわからると思うのですが、そのあとがわかりません。 TableCellRendererについて調べるよろし >>8 って実は最近人気のフラットデザインなんじゃね!? 次のjavafxとswingにdate pickerが入るんじゃなかった? >>220 ないみたい。 こっちをFX共用にしとけばよかったのかな。 Swingは失敗したけど、FXは成功するでしょうか みたいな議論はどのスレでやればいいのでしょうか? JDK-6506617 : Keyboard-lock in swing program on Linux box という重大なバグを8年以上たった今でも解決する気がないみたいだけど、 どうしてなんだろう。 ちなみに限定的なバグじゃなくてあらゆるLinuxOSで100%再現する。 オラクルはケチで有名なので文句を言われなければ手間暇かけて直そうとしないからですよ >>224 それは本当にJDK側で解決すべき問題なのかい? YES.なぜならswingの領分で、他のコンポーネントにフォーカスを強制的に移して戻したら数回は直る。 そのときにクリックするなど一切せずLinuxへのメッセージはないからだ。 しかしクリックすれば確実に直る。 日本語入力の時に頻繁に発生するから最悪なんだよね VBOXとかの仮想環境で古いリナックスを使うことが多いけどそのバグが原因でスイングあぷりを使う機会はまずないね オラクルはウインドーズにしか投資しないつもりだからそのバグが直る見込みは絶対ないよ >>230 ネイティブ環境(非仮想環境)だと出ないん? まあ、仮想環境でもキーを連続で打てないのは痛いけど。 ちなみに、バグレポートではキー押しっぱなしが再現方法になってるけど 日本語入力だと、どうすると出てる? ubuntu 6.06 ltsだったけど実機でもよく出るよ 再現方法が少し違うから違うバグだろうけどx-window関連だから多分同じバグだろう 特にESCでダイアログを閉じたときフォーカスが戻って来ないのでキー入力がアスキーでも日本語でもテキストが入力されないバグだったかな ショートカットも効かなくなるからマウスでアプリを終了するしかない(再起動すれば最悪また戻る) このバグはぐぐると英語サイトがいつくかヒットするけど、swingのアプリは実質ウインドーズ専用と考えたほうがいいだろうね javafx8 (build 1.8.0-ea-b117)ももうするリリース近いのにubuntu 12.04では日本語入力がまともじゃないからjavafx8も結局ウインドーズ専用になると思う JavaFX jarファイルに固めてダブルクリックしても起動しないんですが仕様ですか? eclipseからは起動するのに JavaFXを含まないHello Worldレベルのを作って試してみたら? Swing、SWT、ともに起動します 何故かjre7.u45以前のVMを指定したらコマンドラインから起動できることを確認しました jre7.u45以降のではコマンドラインからも起動できない Swingや選んだのは失敗であった 日本語入力するときが不自然すぎる JavaFXもくそすぎわろた 同じように日本語入力が不便 せめて SWT を選んでおくべきだった・・・ OSXは知らないけど、WindowsではGoogleIME使ったときが、入力候補の出る場所がおかしい。 ウィンドウの左下に出る。普通、カーソルのすぐ下に出るだろう。 >>230 java 1.6 のソースコードを見るとログを仕掛けてなおそうと頑張ってた形跡がある。 そのログを見たいなら以下で取得可能。 public static Logger focusLog = Logger.getLogger("java.awt.focus.Component"); >>231 キー押しっぱなし→? Textボックスをマウスクリックでたまにキーフォーカスが死亡する。 ubuntu12.04+ibus+mozcですが、たまにテクストコンポーネントがキー入力を受け付けず、ascii,日本語とも入力できなくなる時が今でもありますよ しかもnetbeans7使っていても発生するのでswing,javafxを検討してみたり勉強しようと考えないほうがいいと思いますよ(java+linuxではそれぐらい終わってるバグです) ケチで有名なオラクルの技術力なんてのは企業買収で成り上がっただけなので底力なんてあるはずもなく実力は所詮こんなものです java.awt.im とかちゃんと使ってる人いるのか? Javaプログラマが日本語入力監視してやらないと、 入力バリデーションとかが期待通りに動かないことがまれによくある。 java1.6以上のJTextAreaなどJTextComponentのline-wrap方式は、 奇妙な位置で折れます。 これを1.5以下の方式に戻す方法があるか教えて下さい。 他の外国語でも同じバグがあるなら修正用ラッパ作る気にもなれるんだけどね… >>243 奇妙な位置で折れることを想定してプログラム書けば全て解決する話 それよりもそのことのためだけに今更1.5以下のJRE使えという方が非常識 たと えばこんな感じに折れます。 これを想定し て書くのはしんどいです。 なんだかんだ言ってMicrosoftの素晴らしさを再認識する Javaも大きく育てばもっとSunもOracleも開発に人材をさけたのかもしれん サンの時代ならまだ信用があったから起死回生もありえたけど、クライアント(ウェブ)やモバイルやデスクトップに興味がない今のオラクルじゃ何やってももう無理 >>246 てか、それ英単語の空白部分で折れてんじゃないの? そもそもそんな不自然な折れ方するバグがあったとしたら世界中の開発者が黙ってないと思うんだがな しかも1,6以上で出るんだろ? もし英単語空白部分で折れてんなら、それline-wrapの仕様だよ >>243 http://docs.oracle.com/javase/jp/7/api/javax/swing/JTextArea.html > JTextArea(Document doc) > 指定されたドキュメントモデルと、ほかの引数はすべてデフォルト (null, 0, 0) で、新しい JTextArea を構築します。 http://docs.oracle.com/javase/jp/7/api/javax/swing/text/Document.html > たとえば、前の図のようにドキュメントのコンテンツが「The quick brown fox」というシーケンスの場合、「The」の前の場所は 0 で、「The」の後とそれに続く空白の間の場所は 3 となります。 textコンポーネントってカスタム化したBreakIteratorとか指定できないのか GUIレイヤーにはHTML5/Google Chromeを使えばすべて解決 FX興味あるけどまだSwing主体で使うべきなんだろうな 今の時代、FXっていうと金融のほうの話にしか聞こえない なんかopenjdkにしたら直ったくさい。 CentOS(32bit) jdk1.7からopenjdk1.7にしたらOK Debian(64bit) open1.6でOK バグの再現方法が分からないのに直ったも糞もあるかよ jdk1.7でもawtのテキスト・コンポーネントってawt.useSystemAAFontSettings=onにしても汚いままだね java+linuxはやっぱり終わってる テキストじゃなくてリスト・コンポーネントだったか? とにかくオラクルはawt component全般で直す気もなければやる気ないんだから、awt,swing,javafxでguiをやろうと考えるのは茨の道に入るのに等しい [#JDK-6506617] Keyboard-lock in swing program on Linux box - Java Bug System https://bugs.openjdk.java.net/browse/JDK-6506617 コメントしまくってプライオリティ上げれば ナオト君とユリコさんしか文句言ってないんじゃあ直されるわけがない linuxデスクトップですらまともに使えないjava+awt+swingなんてのは結局のところwindows専用のguiフレームワークでしょ ていうかjavaがサンだった頃はまだ可能性はあったが、オラクルになったjavaってのはwindowsデスクトップともども静かに死んでいく運命でしかない awt,swing,javafxなんていうデスクトップやクライアントものは誰も相手にしないから、バグなんかもわざわざ報告してもらえるはずない Androidうらやまー。 TWLとかLIBGDXとかゲーム系GUIで良いのが出てくればよいのだが androidの寿命が思いの外長いみたいだから、embbed,mobileのjavafxのライセンスは主要なところはどこも買わないだろう オラクルが欲を出して裁判でグーグルに負けたあたりから、javaはswing,javafxが低速低品質であるだけでなく、desktop/client java自体が終息していたんだなあと思う Product Version JavaFX Scene Builder 2.0 (Developer Preview) Build Information Version: 2.0-b12, Changeset: 8bb7f8e4931d Date: 2014-01-30 08:10 JavaFX Toolkit = QuantumToolkit Pipeline = ES2Pipeline Hardware acceleration ENABLED Java 1.8.0-b127, Oracle Corporation Operating System Linux, amd64, 3.2.0-58-generic Copyright ? 2012, 2014, Oracle and/or its affiliates. All rights reserved. もはや一般向け言語じゃないな。 アプレット開発完全に終わった。 ユーザーにコピペ作業させないと動かないフリーソフトって有り得ないだろwww >ユーザーにコピペ作業させないと動かないフリーソフトって有り得ないだろwww これって何のこと? 開発者側じゃなくて? JavaFXで2chブラウザで作ってみたけどかなりシンプルで扱いやすいライブラリになってて気に入った これはSwingとかは簡単に駆逐される予感がする 今出向先でswing使わされてるけど糞すぎて死にたい sdkも1.4使ってるし、いるのか知らんけど まともなアーキテクトいないと自社内で技術の選定もできねーんだなぁと JavaFXはまだま未熟な印象あるけど相当使える JavaDocとか見てると3Dとかスマホを意識したメソッド名が散見されるけど、 今後クライントアプリで存在感示せるには十分、強力なライブラリだと思うな >>282 ダイアログは、OSが勝手に扱いを変えるしな… ダイアログ的なものなんか簡単に実装できるもんじゃないの 画面の中央で手前に表示されるか Enterをおしたら、閉じて、OKの意味を伝達するか Escをおしたら閉じるか Tabをおしたら、フォーカスが移動するか ダイアログってそんなややこしい仕様だったの? ちっさなStageにボタンつけてモーダルで表示するだけだと思ってた だからみんなダイアログ実装しろしろうるさいんだな プラットフォームによってメタファが違うしライブラリが勝手な解釈して実装がカオスだったりもする ダイアログって出されて嬉しかった記憶がまったくないから もうダイアログは出しちゃダメっていう決まりでいいだろう そういうダイアログメッセージメッセージ出す前にボタン押させないようにするとかいろいろあるだろ SwingどころかAWTですら実装しているというのにFXときたら… WPFだって事実上実装してないに等しいので、 「FXはダイアログとか出さない!」 というコンセプトなのでは。 RIA の方向性がそうなのかもな。 htmlからリッチにするとは言ったがそれはviewにおける表現の事であって云々。 すると、ダイアログの今後はどうあるべきなのは提示されないと困るよね。 モーダル・ウィンドウ作れるからダイアログ要らんがな。 実装面倒くさいだけならJFXtrasにひと通りのもんは入ってる。 軽量とか重量とかって何を基準に言ってるんだろうな。 日本では処理が軽いか重いかっていうイメージで間違った使われ方してるけど heavyweightが環境依存の重いコードガシガシ書くことでlightweightが環境非依存の軽いコード書く事だから本来はコードのポータビリティの話だろ。 会話するとき、間違った使い方してる奴が混じってると会話が噛み合わんってよくあるじゃん。 swingだろうとトップウィンドウがheavyになるって話も実際どこまで理解されてるのだろうね。 javafxはなんでほぼModelのクラスをContorollerって呼んでるんだろ javafxはbindingがあるからsupervising controllerのMVPになるか。 >>300 じゃあなんでPresenterにしなかったのっていう話に javafxはMVPでもpresenter modelでもどっちでも作れるようになってるからcontrollerがpresenterっていう名前だったらおかしいだろ。 それと役割が同じだからじゃね。 署名高すぎ。 なんだよ年5万円って。 趣味でやるなってことか? 相模原メディカルサイト歯科日吉サンテラス歯科藤沢なのはな内科スマイル歯科アイ整形外科亀有 リリオ歯科アクロスみなみの歯科足立ハート歯科新宿くろさか歯科熊本ファミリー歯科伊勢原桜台歯科森林公園滑川モール歯科横浜いちょう歯科小田原めぐみ歯科ホワイトスタイル 質問失礼します。 JTabbedPane に複数の Panel を登録すると、キーボードのカーソル左右でタブを切り替える事ができます。 この機能を無効化したいのですが、どうしたら良いでしょうか? setFocusable(false)でどうだろう >>308 フォーカスは与えたいので少し厳しいですね。 左右で変えられるのは仕様として別のやり方でやってみます。 ありがとうございました。 カードレイアウト使ってタブはボタンかラベルでそれっぽく書けくのは? JavaFXだとStackPane使うんだけどSwingには相当するものがないね。 javax.swing.FocusManager で KeyEvent.VK_RIGHT / VK_LEFT を無効にすればいいんでね。 へんな2chブラウザみつけた JavaFXで実装してるんだと http://www.m9_www.com 使ってみたけど結構重い 怪しいリンク踏んで遠隔操作されたらたまったもんじゃない >>316 ヘボOSとかヘボブラウザ使ってるとビクビクしなきゃなんないのかもね 片山ゆうちゃんとかいう奴の事件が2chにリンク貼ってダウンロードさせるのが目的だったじゃn >>318 あの人、ブラウザで閲覧しただけで即感染するレベルのもん作れたの? >>321 どうでもいい所にツッコんでるなー。 どうせなら、サイトの一番下にコメント書けるようになってるみたいだから、 「背景を別の色にしてください」 って作者さんにリクエストすればいいんでない? なんでそこまでする必要があるのかよくわからんが…? 2ちゃんブラウザは書き込める公開proxyにしか興味なくなった >>313 そっさく更新されててワロタwww しかも背景ちょっと色が薄くなっただけ 作者さんいい奴ぽいな。他人事だと思って軽い気持ちでコメント書けばって言った俺ちょっと反省。 タイトルバーを独自に描画しないと、FX使っても カッコ悪いアプリしかできないね。 俺も昔そう思ってたわ 「俺の考える最強のタイトルバー」をユーザは求めているのか? どんなメリットやデメリットがあるのか?自己満足じゃないのか? タイトルバーの色をラズベリーレッド・パールホワイト・ミッドナイトブラック の中からお選びください 間違えた。 野際陽子「レディース・アートネイチャーより、Forte (for Java)登場しました。」 今までSwingの標準Look&feelで書いていたプログラムをGTK+のLook&feelで動かそうと思ってmainの最初にUIManagerの命令を足しました。 見た目はしっかりGTK+化されているのですが、setBackgroundなどが機能せず、色が変更されません。 専用の命令が必要なのでしょうか? setBackgroundしてから、repaint();で変わらない? >>335 NetBeansなどのデザイナー使えばいいんでね >>334 UIManagerとUIDefaultsとputClientProperty使えと何度言えば 軽量コンポーネントは描画してないっつーの。 それかJavaFX使え。CSS書けばそれで済むからSynthと違って本当にCSSだけでなんでもできるから。 テンプレに入れとけよこれ。 JavaFXのメリットが良くわからん。 SwingのL&Fを強化すれば済んだんじゃないのか? substanceとか、syntheticaとかの外部ライブラリを使えば綺麗にできるけどね。 >>339 FXで今度こそプラットフォームインデペンデントな開発ができると夢見たんやな… >>339 ・原則ソフト前提のswingとちがってH/Wアクセラレーション前提で動いてるとか ・ライブラリのスペースがswingと比べて超軽量とか ・Swingにないコンポーネントサポートしてるとかはnetiveな部分が関わってるからswingではできないしJNIでJAWT呼び出す以上糞重いし ・マルチスレッドで書いたつもりなのに謎のバグがあるし ・>>334 みたいなswingわかってない奴がどうやっても描画ぶっ壊せない設計になってるとか LnFなんてメインテーマじゃない。 >>342 javafxはそんなもん目指してない。バリバリプラットフォーム依存してるしJAWTより薄いnativeで書かれてる。 そもそもRIAなんだからプレゼンテーション層はアプリケーションプログラマが書くからその下触らせないようにしてるからプラットフォーム独立なんて必要ない。 実装にクロスプラットフォームなライブラリ使ってるから移植性に問題もない。だから3dできるしwebブラウザあるし動画再生できるしOS依存の機能使える。 他にも山ほどメリットあるけどあげ出したらキリがない。 というか、SwingXのpainter APIをsunが諦めた時点でswing捨てるのは決まったようなもんだしjavafxにswing teamがsponsoredしてるからその内swingはメンテ終わる。 あと >外部ライブラリを使えば綺麗にできるけどね。 その外部のライブラリをJREに含めるはずだったSwingAppFrameworkがキャンセルされた後javafx2に移行したんだよ。 ほかにもSwingLabの成果は将来のSwingにマージするつもりだったけどこれもJXLayer以外キャンセル。SwingLabはSwingにおけるboostだからそこが解散したらもう未来はない。 javafxにおけるSwingLabに相当するコミュニティもすでにあるから移行する気まんまんだよ。 JavaFXってWindow最大化判定ってできないの? Y_AXISに配置するBoxLayoutを設定し、maximumSizeを決めたJPanelの下にJTextPaneを設定すると、 JTexetPaneの右端まで文字が行っても改行してくれなくなってしまうのですが、これを改善する方法はありますでしょうか? swing designerのような、GUIでウィンドウパーツを組み、ダイレクトにプログラムが書ける EclipseのJavaFX2プラグインありませんか? >>348 それはどのIDEもSceneBuilderを組み込んでるからFXMLのポトペタ部分はどれも同じなのは知ってる上でeclipse固有の話? それならIncubation projectになってるe(fx)clipseがある。 ほかのIDEとの違いはttp://www.coppermine.jp/docs/programming/2013/12/efxclipse.htmlが簡単に説明してる。 ところでJava1.8+swingがデグレードだらけらしいんだが。 Java+Swingによる2chブラウザ V2C_R72 http://anago.2ch.net/test/read.cgi/software/1407868516/ 416 2014/08/29(金) 11:52:21.44 ID:sik4QNGf0 名無しさん@お腹いっぱい。(sage) V2Cが原因じゃなくて1.8.0_20のIME関連が死んでるっぽい。 jEditでも日本語入力しようとすると死ぬ。 ちゃんとテストしてからリリースしろよ。 java - Swing rendering appears broken in JDK 1.8, correct in JDK 1.7 - Stack Overflow http://stackoverflow.com/questions/22737535/swing-rendering-appears-broken-in-jdk-1-8-correct-in-jdk-1-7 http://i.stack.imgur.com/zZwGe.png The rendering of the Font seems to be not OK. Additionally the Button looses its Text, when i move my mouse over it. JavaFXスレが機能してないようなので、こちらで質問。 JavaFXでウィンドウがアクティブになったときに、イベントを発動させたいときはどうしたらいいのでしょう? addFocusListenerに相当する機能が見つからなくて。 以下はSwingでのサンプルです。 ttp://2sen.dip.jp/cgi-bin/upgun/up1/source/up0607.zip JavaFXのシーンビルダー2.0で探してみたけどよく分かりませんでした。 分かる人が居たらどうかお願いします。 そこ前スレじゃないし。分けても人来なくて過疎って落ちるだけって前から言われてたのにテンプレも貼らずに立て逃げしただけ。 >>351 そういうことだったのね どうもSWINGで作ったアプリがJDK8に入れ替えたトタンに、JtextField上で日本語変換すると アプリが落ちちゃうんだよなあ。 jdk8u20以降全部ダメだから8u11にしなさいとの神のご神託です。oracleだけに >>360 Oracleがいかに糞なのかがわかる。 Googleも糞だが、2バイト語圏のテストなんてまるでしていないのがよくわかる。 Javaもそろそろ潮時かもな javafxのlinux platformへの対応が今でも後回しってことが根本的に間違ってる java7(javafx2)がでた2011年の時点でも、javaseやjavafxがwindows platformで使えるメリットって全く無いでしょ そういう要不要の判断ができないのは、優先順位や目的も設定できず、なんとなくで作ってたのが原因だろう モバイルデバイス市場をグーグルに持ってかれちゃった時点でjavafxは廃止してとりあえず様子見でswingに集中すべきだったのにね で、できたjavafx api/frameworkはswingと全く同じだし、それならswing apiを流用して内部実装だけ取り替えるという設計もあったんじゃないのかと思う javafx9は現在のjavafx2/8のapiを全て破棄して、swingライブラリ一部として結合してほしいね(それぐらいのことしないとjavaのguiは使ってもらえないだろう) ただ、グーグルはオラクル(サン)に比べれば名ばかりの貢献であって、長期的に実質的にはオープンソースに何らの貢献もしてないし,グーグルはオラクルを上回る大糞ってことは確かだ よくみたらJComponentの継承関係がjava.awtに依存してるからjavafxとswingを統合するのは無理か それで考えてみたんだけど、javafxのui生成はfxml,cssだけにして、javaコードではui生成はできないようにすればjavafx apiの大半を削除できるし、awt,swingとの差別化にもなる fxmlにはannotation仕様も入るから、html+jsのようにbindingもfxmlでやれるし、現在javafx apiが肥大化し続ける問題を全て解決できるだろうね html,cssでpage form作るのとほぼ同じパラダイムになるからswing mvcを学ばなくて済むし、コントロールのクラスが非公開なのだから公開java apiをメンテしなくて済む uiの動的生成は全く使わないしbuilder classパターンと同じくいらないから、コントロールのjavaクラスはjava9では削除にして、fxml+annotation(java)+nashorn(js object)で構築するのが自然だろう そもそもJavaの商用アプリケーションなんて「素人が作りました」という言い訳が可能が携帯ゲーム以外で見たことないしな… uiは基本的に使いまわしたり他に流用したりせず使い捨て前提でデザインするから、ui frameworkが大きく変わって互換性があまり考慮されなくてもあまり困らないだろう。 kde3,4やgonome2,3も互換性は維持は前提としてないし、ui frameworkは同一バージョンのプラットフォーム固有で、パフォーマンスが必要な3d,anime,game,canvasなどはネイティブに密着で作って欲しいね。 というか、多少複雑でもhtml,flashですら簡単に素早く作れるのだから、それに比べれてみても、javafx8 apiは肥大化して、機能多過ぎで、言語サポート(リテラル)がなくいためコードが多くなって煩雑になる。 しかも、frameworkの設計が使い捨て捨て前提のui生成ではないから管理に手間もかかり、今後javafxをやるのはどう見ても終わってる(普及する可能性もない)。 >で、できたjavafx api/frameworkはswingと全く同じだし まるっきし違うんだが少しはソース読めよ。 ていうかおまえそればっかだな はあ? javaをwindowsだけで使うならjavaなんか止めてc#やれよ。 windowsでjava使う状況は、仕事で必要って以外でjava,javafx,swingが必要な場面ってまずないだろ。 ていうか、linuxのswing,javafxの悲惨すぎる現状を知らないんだろうおまえは? guiなんかhtml page見てもわかるけど、model-viewなんかに分離しなくてもちゃんと作れるし、mvcやその派生のデザイン・パラダイムはもう今の時代やニーズに合わないってこと気が付かないの? linuxやshellもろくに触れず、windowsで満足しているお子様には、guiのお作法とかswing mvcの勉強とか絶対無理。 そもそも勉強が一巡できるかどかよりも、今のjavafx,swing frameworkは巨大で難解すぎて集中力の方が続かないだろね。 >>362 JavaFXに限らずLinuxのデスクトップなんて優先度は最下位でおk。 linux desktopが大事なんじゃなくて、javafx platform戦略としてはopenglesのjava platform再実装であって、linux kernel(shell)を使う端末のためのgui shellをx11に変えて提供するのが目的ってことで、 linux実質はopenglesが大事になってる。その流れでopenglesを実装したx11ではないlinux desktopが恩恵を受けられる。 windowsは特別dirextxのラップで提供しているに過ぎないけど、xbox,psなどjavafx(opengles) apiを使うよりよりネイティブのdirectx/c++しか使わないから、 directx版のjavafxを提供し続けてもjava/oracle利益にもならないし、microsoftものに関わってる時点でオープンソースに貢献もしない。 つまりwindows platformは副次的にして、linux(技術者サーバ)、mac(高利益クライアント)にoracle's resourcesを集中しないと、 javaはdotnetの代替に過ぎずjava platformとしても成長することはない(javafxがwindowsで普及することは絶対にない)。 思うに、windows版のoracle jdkは廃止して、jreだけ提供にすれば、google android対策、windows普及対策、ms-devices普及対策になるね。 windowsでjava開発をしたければ、oracle virtualbox(つまりfree linux desktop)か、jre/bin/jjs(つまりecmascript5/6以降)でやらせて、 ide当開発のパフォーマンスが欲しい人は、microsoftものではなく、mac,linux desktopを導入してもらえばいい。 microsoftの社長がナデラに変わったけど、windowsはcloudosを標榜してるから、windows native(desktop)の高速化にもこだわらず、デバイスがcpu 2.0ghz以下だからパフォーマンスも期待できず、 コスト管理のためwin32apiを全般してdotnetに統一しても、今後のmsもの,windows platformものは、デバイスが高速でないから体感も差はないから批判はあまりないだろう。 これが意味するところは、windows native開発ははc/c++を廃止して全てdotnet vmでやるという方向転換をされたら、jvmはdotnetvm上で動きパフォーマンスはかなり悪くなるから、 linux desktop,devices(tabletなど)が大事なのは、javaが今直ぐwindowsから離れないなら、もうjava platformはmicrosoftの手の上なのだからjavaに未来はないからだ。 sunは消滅し、mac,msとも代表者が代わり、時代は変わったし、これに順応してスキームを変えられないところ(もの)は時代にもニーズにも合わず自然消滅するのかと思う。 この板の投稿の限界値、2048文字丁度なんですよ 他に書いたこともいろいろ削除したんですけどね 率直に聞きますが Swingでスタンドアローンアプリってどうなんでしょうか? やっぱり、各プラットフォーム毎にアプリケーションはそれぞれ に最適なもので作ったほうが良いのでしょうか? guiもクロスプラットフォームにできるという発想自体が幻想だったんですよ 実際受け入れられたのはhtml formですし javafxについても、html5のオラクル実装ってことで突き進んで欲しかったんですが、fxml,cssだけでいいんで、java codeでもui作れるのはいらないです(そういうのはswingでお腹いっぱいです) 理想としては、html3,4 (form), html5のタグをjavafxもの(fxml)に変えてclassfileへコンパイルするだけでjavafx appとして動くってのがいい感じなんですけどね >>374 商用はあきらめて、Pascalみたいに教育に特化すればよいかと 何で「Swingでスタンドアローンアプリってどうなのか?」って質問の答えが 「Pascalみたいに教育に特化すればよい」になるんだよ? swing linuxは、java6以降であればgraphics2dが改善されてるので性能やレスポンスの面では実用です。 linuxの本格的なサポートはxrendererがサポートされたjava7みたいですけど。 ただ、gtk-lafは崩れるし、linuxでは金掛けてないんで作りこまれておらずただ動くってだけで、j.a.SystemTrayはやる気ないし、awtとネイティブ日本語入力・変換との連携はjava8u5でもバグってて未だ直ってません。 画面が見たいなら、netbeansやv2cのlinuxをみればいいんじゃないですかね。 >>369 windowsでjava使う人がほとんどだと思いますけど。 とくにjavaが一見人気に見えますが、よく見ると実際はwindowsでandroid作ってますってのが大半でしょう。 つまりそういう人たちは、microsoftやgoogleものに貢献してますが、oracle,javaものには全く貢献してません。 上の続きですが、oracle jdkのwindows配布は中にして、windows oracle jdkは有料プログラムだけにするのがいいでしょう。 mac,linuxはオープンソース自体なので有料にする理由はありませんが、windowsではvirtualboxもopenjdkもあるので問題ないです。 これと同じくmsがwin32api, c/c++,vc++を一般向けは廃止にして、有料の契約者だけにして、一般は全てdotnetでやるという戦略をとるは現実的だと思いますよ。 そうすると、windowsplatformのvmものつまりdotnetで作るアプリ以外の全てのアプリはパフォーマンスがでないので、msとの有料契約か、ただ動くっていうのだけになるでしょう。 cloud-osの説明を見ててもmsとしてはwindowsのアプリは、基本html5,js,browserでやってくれればいいことでしょうね。 windowsでandroidしか作れない現状のjavaは、javafx(javame)はもちろんjavase自体がオワコンってことです。 JCheckBoxでテキストをクリックしてもチェックが変化しないようにしたいのですが、どうすればよいですか? JavaFXで作った2chブラウザとかあるよ かなり重いけど http://www.m9-www.com >>381 なるほど、こういう意見を言う奴は、3以下の数すら数えられない知性の持ち主と言うことで、 ということは、まともな知性の持ち主は当然逆。 >>384 それって、もしかして産業革命とモジったの? 低速も問題かもしれんが、デザインしにくい VisualStudioだったら適当に貼り付けて終わるが WindowBuilderでやるとスゲー時間が掛かる まるでWEBページを手打ちだけでデザインしてるようだ V2Cもswingで作ってるけど、どれだけ時間掛かったのだろう オマエラの根性に頭が下がるわ もしかしてJavaでGUIがやれるという点しか利点がないんじゃね 天才が組んだアセンブリ資産をデバッグできる人がいなくなったという教訓から、プログラミング言語は馬鹿にもできなきゃダメだということ共通認識になりつつある 8u25が出たのにレス1つなしかいなw swingのバグ直ったらしいぞ。 これか? http://www.oracle.com/technetwork/java/javase/2col/8u25-bugfixes-2298227.html > JCK8's api/javax_swing/JDesktopPane/descriptions.html#getset failed with GTKLookAndFeel on Linux and Solaris run v.s. JDK8+ > api/javax_swing/JScrollPane/indexTGF.html#UpdateUI failed with MotifLookAndFeel on all platform > SWT cannot load native look&feel SWT関連のバグにも対応するのな javafxもswingもまともに動くのはwindowsだけだし、実質windows専用でしょ 今どきwindows以外でもguiが使えればいい、動けばいいというだけじゃだれも使わないよ android,iphoneやその他モバイルでは、どうしてクロスプラットフォームのフレームワークがなかなか流行らず、みなネイティブ言語を使い新規にguiコードを新規に書くのか guiのコードについて手を加えずともwindows以外でも動くのに、なぜ過去にswtが台頭し、なぜ現在までswingは積極的に使われなかったのか それは、windows以外だとjavafx,swingは積極的に力を入れてサポートしておらず、まともに動くのは結局windowsだけしかないからです >>399 windowsで満足してlinuxも使ったことないのによくいうよ windowsで十分満足ならそのどこにクロスプラットフォームが必要なんだよw しかもネイティブlinuxでswingとかjavafxとか作ったことも動かしたこともないんだろ? linux環境でgtk-lafの不出来motiff-lafの最悪さをみれば、swingってのは結局windowsだけだなってことがよく分かるだろう javafxだと、オラクルになってからjavafxドメインと専用ページが消滅し、javafxの紹介ページもjavaseに埋もれてjavafx platform自体が消滅してるでしょ(つまりjavaはオワコンってこと) XPサポ切れによるLinux人口が増えてればLinuxでのGUI需要も増えるだろうからOracleも対応してくるかもしれんよ >>402 そういう人はlinuxにも来なくていいしjavaでも全くお呼びでないので、windowsだけで一生過ごしてて下さい >>401 Windowsにこそクロスプラットフォーム性が必要だということを知らないのか? クライアントは自分のマシンにも「Windows」という名前がついてるから、Windowsで動くものは動いて当然だと思ってるし >>404 それはマイクロソフトがやることであってオラクルの仕事じゃないですね そもそもwindowsで閉じてるならjavaじゃなくてdotnetでいいのでは? >>396 IME問題と思われ。 JDKのページ(その詳細じゃない方)に書いてあるね。 V2Cで騒がれてたけど、そもそもNetBeansでこけるという壮大な奴。 oracle社員誰も使ってないんだねー >>404 Windows CEとWindows RTとWindows Phoneをdisるのはやめてもらえませんか?w >>409 経験上、Windowsで互換性が一番あるのがC言語だったというオチ >>401 クロスプラットフォームなんて幻想だよww 実際には、それぞれの環境に応じて、同じインターフェースになるように 作ってるのが現状。Javaだのなんだの、そんなものは、今もう語るような ものじゃねぇよ。 /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://ヽ:::::::::::::::| l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::// ヽ::::::::::::::l l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/:::「'ヽ:::::::::::// ヽ:::::::::::| |::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ノl:::ノ l:::::::/ ヽ::::::::| ノ:::::::::::::::::::::::::::::::::::::::::::::::::::::/ ゙゙ ノ:::/ ,,;;;;;;,, ,,,,ヽ:::::l ):::::::::::::::::::::::::::::::::::::::::::::::/ ノ/ __,'''i: ('''__):::l )::::::::::::::::::::::::::::::::::::::::::::::::::/  ̄ ̄ン:. :「 ̄`ヾ 1:::::::::::::::::::::::「 `┤l:::::::::::::::::l  ̄ , ヽ ̄ l `l:::::::::::::::::::::ヽ :l li:::::::::::::/ ヽ /´ `l | ヽ::::::::::::::::::::::\_」 lヽ::::/ .l !:-●,__ ノ / ノ:::::::::::::::::::::::::::ノ | l `゙゙ i ,,;;;;;;;;;;;;;;;;;;;;, /ヽ ,/ ヽ::::::::::::::::::::::( l l::::::::.. /.:''/´ ̄_ソ / `ヽ ヽ:::::::::::::::ヽ | l:::::::::::... /::// ̄ ̄_ソ / \ ヴッ!! ヽ:::::::\| l::::::::::::::::... / :::.ゝ` ̄ ̄/ / ヽ ヽ:::l l:::::::::::::::::::..  ̄ ̄;;'' / ヽ l l;;;;;;:::::::::::::::.....;;;;............;;;;;;''ノ l l l '''''''''''''''''''''''''''''''''''''' ̄l | | http://www.youtube.com/watch?v=z2qK2lhk9O0 JFrameの大きさを中のコンポーネントに合わせて変化させたいんだけど、中のコンポーネントの大きさを変えた後のJFrame#pack()が効かない件 >>414 とりあえずこれは動いた import java.awt.Font; import java.util.Random; import javax.swing.*; public class Test { public static void main(String[] args) { SwingUtilities.invokeLater(() -> { Random rng = new Random(); JLabel label = new JLabel("ぬるぽ"); JFrame frame = new JFrame(); frame.getContentPane().add(label); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); Timer timer = new Timer(1000, e -> { label.setFont(new Font(Font.MONOSPACED, 0, rng.nextInt(40) + 10)); frame.pack(); }); timer.setRepeats(true); timer.start(); }); } } >>415 ごめん、一週間以上ハマってたのに自己解決してしまった。 しばらくスレ更新ないからこんなに早くレスくると思わなかったよ。ありがとう。 JFrame/JScrollPane/JTableという階層構造にしてて、JTableの大きさは自動調整させてたんだけど、その結果をJScrollPaneに指定してなかったのが問題だったみたい。 JTableからgetPreferredSize()でサイズとってJScrollPane#setPrefferedSize()で指定してあげて、pack()したらうまくいった。 2回目以降のpack()は動かないって勝手に決めつけるんじゃなくて、そういう簡単なコードを書いて確かめるようにするよ。 >>414 JFrame.setVisible(false) JFrame.setVisible(true) で反映しない? packでダメなのは当たり前ね。すでに表示してるんだから。 JDK8 u60入れてからV2CをNimbus Look&Feelでつかってると 垂直方向のスクロールバーのバーハンドルが表示されなくなるんだけど。 リストが短い(バーハンドルが長い)場合は表示されるんだけど、 リスト長くなると表示されなくなる。 閾値超えるとバーハンドルの長さを最低で留めるって処理が正常にできてないっぽ。 u51ではなんとも無かった。なんでこんなところでエンバグしてんだよとしか…… たぶん水平方向も同じじゃねーかと思うが、 V2Cでは横にはそんなに長くならんので確認してない。 バグが埋め込まれたってことは、もう完全放置かと思いきやいじってるのはいじってるってことか 受ける会社大丈夫? 下記の条件が全て当てはまる会社にご注意下さい。 ・IT系 in tokyo ・「社名 労基」でググると過去の2chスレが出てくる ・転職会議で2.5点 swingが分かりやすく学べる、おすすめの本を教えて下さい。 >>422 ええ、かなり前に出版された本ですね。 で、どなたかお勧めプリーズです。 本屋行って出来るだけ新しい本を探そう 最低でも3年以内、11年前の本とかは論外(読みかえが必要な個所が多数で使いものにならない) swingは時代遅れ、javaFXの乗り代えなさい >>425 なるほどそうなんですか…。 プログラミングの世界は技術革新が早いですね。 同じjavaでもラムダ式だと一瞬他の言語のように見えます。 そーいやJavaFXは日本語入力できるようになったん? 最初期に触ってた新しい物好きな日本人はあれでかなり居なくなったよね。 Javaって業務用アプリ書くのに使うのに、日本語通らないって言われたら誰も手を出さないんじゃない。 jre6なSwingでいくつかローカル部門用アプリ書いたけど、jre8の今もまあ普通に使えてるよ。 FXに手を出したことさえないけどさw JFrame だけのプログラムで、フレームを拡大縮小し続けるだけでメモリ使用量が 200MB くらいまでいくんだがw なんて起動して放置してるだけでヒープ増え続けていくのん? なんか生成し続けてるの? 小さい画像領域に大きい画像は入らないから、新しいメモリ領域を確保するだろ 小から大へ動かすとメモリを大量に消費するだろ 最近始めたんですが 起動がめっちゃ遅いのは仕様ですか? Eclipseからの起動→遅い JAR書き出し起動→超遅い 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 JD7SU JavaFXが死んでこっちは盛り上がっているかと思ったが、そうでもないんだな。 向こうのスレから転載 An Oracle White Paper March 2018 Java Client Roadmap Update https://www.oracle.com/technetwork/java/javase/javaclientroadmapupdate2018mar-4414431.pdf Swing and AWT AWT has been an integral part of Java SE since its launch in 1996. Swing was introduced shortly thereafter as a separate library and finally incorporated into “J2SE 1.2” in 1998. Both toolkits are still part of the Java SE Specification and core to many other toolkits and applications that build on top of them. Oracle will continue developing Swing and AWT in Java SE 8 and Java SE 11 (18.9 LTS). This means they will be supported by Oracle through at least 2026. > This means they will be supported by Oracle through at least 2026. オラクルがこういう言い方するときは要するにまだ何も決まってないってことだぞ。 未来のことに触れてると見せかけて現状を説明しただけっていういつものやつ。 GNU LGPL3で立ち上げたいけど、 Javaのオープンソースでもいける? 一応GNUにメールはしてる 大丈夫だろうか、あまりGNUライセンスにする傾向じゃないプログラムで、 ただ、他に向いてそうなライセンスが見当たらないんですよね。 メールはしたから返事まちかな、、 OSDN > ソフトウェアを探す > マルチメディア > サウンド/オーディオ > ミキサ > Extended MIDI Mixer Yahoo知恵袋の宣伝目的NGに該当するので、こちらで伺います。 Swingなのでこのスレを見てました。 ビクビクしてますが、、 MidiDevice用のINはスレッドをAPIが立ち上げてるのか 一応対処しました。 ひょっとしてOUTも? あとOutputのバッファオーバーを知るAPIがないから それは勘弁な 0.93リリースです。 予想通り過疎ってるwww 独り言落としてくね! Win版OpenJDK使用のアプリで、タッチパネルピンチ操作イベントをマウスホイールイベントとして拾えないバグ、報告されたの5年前なのにずっと放置w もう本家もやる気ないんだろな。 FXですらMac版のスレッド実装問題でdndで落ちるバグ放置されてるし。 仕方ないので、前者はJNA使ってイベント拾う実装を書いてる。 ピンチ検出までできたからもう少しでインかアウトの判定に辿り着けそう。 というわけで未だにswingでマルチプラットフォームアプリ書いてるわけだけど、 WindowsのUWPはオワコンになったし、 なんだかんだで業務用アプリ書くには悪くない環境ですよswing は。 動作もjavascript頼みのマルチプラットフォームフレームワークより軽いと思う。 では、数年後スレが残ってたらまた来ます。 >>451 >なんだかんだで業務用アプリ書くには悪くない環境ですよswing は。 これは大収穫のお言葉、詳しく教えてください!! プログラミングモデルは好きだけど look & feel は不完全な模倣になってて ネイティブのラッパーの方が 実用的だなと思った わしも! 非同期処理の実装しやすいし androidとかフレームワークによってはダイアログ表示と結果取得が非同期だったりするしw swingアプリにJFXPanelのwebkitブラウザ実装したUIキメラ作ったったw これでjsベースのエディタとかビューのモダンなUIフレームワーク使える ブラウザ内のjsエンジンから発生したイベント拾ってJava側でハンドルする ただswingとjfxのスレッドが別だから 初期化時の同期と相互にinvokeLater()使うことに注意必要だけど 男は黙ってJEditorPane サシャナゴンの方が好きだ >>451 本業の合間にやってたから今頃なったけど、Windowsでピンチ操作拾えないバグの回避実装に成功した~ JNAでWin32のローカルメッセージハンドラフックしてピンチイベント検出できた VC++の構造体の内部資料が無くて 色々なソースから類推するのが大変だったけど勉強になった >>452 亀レスすまん 流行りのWebのvue.jsとかreactとかより 設計がシンプルだからデバッグしやすいなど実装が楽ってだけ 業務用はuiのカッコ良さより安早楽が大事でしょ? あとビジネスロジックにおいてJavaは高機能ライブラリが豊富なのも有難い MSの.NETほどにフレームワーク設計しくじってぐちゃぐちゃになってないし 逆に今どきのおしゃれインターフェースにしたいならjs系がいい そういやスレタイでswingを低速言うてるけど JavaFXのほうが初期化しめちゃめちゃ時間かかってもっさりしてるんだけど… そしてmacでは未だにスレッド競合解決してない swnigよりオワコンな気がする スタンドアロンアプリ自体が絶滅しようとしているんだ… クラウドが大規模障害起こして復旧目処立たなくなったとき 人々はjavaアプリの偉大さを噛みしめることであろう swingは死なず、ただ去りゆくのみ JavaでGUIするぐらいならウインドウにHTMLでええやん… まあハードウェアアクセラレートあってもHTML/jsのUIがもっさりしてるのみんな慣れてきたしね GUI表現としてHTML/CSSは十分なんだけどロジックをJavaScriptで書くのはつらい ビジネスロジックは鯖側のnode.jsで書けるしスタンドアロン系も同じnode.jsで動くフレームワークあるよ ただマルチスレッドじゃないから似非非同期による安定実装めんどくさい サーバー側のnode.jsだってJavaScriptじゃん それに昔と違ってビジネスロジックはサーバーサイドが担当するって考え方も今は通用しない SPAが流行しててクライント側で動かさなければならないロジック(JavaScript)が昔より増えてるのだ ビジネスロジックとUIロジック整理しないで実装してるから開発管理破綻してるのでは? フロント/バックエンド部隊の連携、運用保守まで考慮した設計できないならSPAは採用すべきでないと思うけどなぁ 俺のvue.jsとlambdaの開発リーダー経験からの話だけど next.jsあたりはもっと進歩してスッキリしてんのかと思ったが違うの? ビジネスロジックをサーバー側に閉じ込めようとすると SPAではクライント/サーバー間の通信回数が増えてレスポンスが低下したりするのよ だからクライントでビジネスロジックを動かすようになってきてる そうなのか、そんなファットになると 遅延読み込み使ってもロード&jsコンパイルのせいでキャッシュ前は凄く重そうだ そんならアプレットやActiveX時代のほうがよほど合理的だよねw 4年くらい前は鯖と無駄な通信しないように同期対象データを複数のグループにまとめてパフォーマンスと操作性のバランス保ってたけど いまだにフレームワークで鯖と自動差分同期も出ないんだ… というわけで、アプレットはダメでもswingアプリ復活の方向でめでたしめでたしw Ruby on Rails 7 からは、Hotwire に変わった。 HotwireはHTML Over The Wireの略で、 SPAの開発において、JavaScriptのコーディングを極力必要としない。 脱node.js, webpack JSONではなく、HTMLベース。 サーバーサイドでHTMLを生成し、WebSocketでWebブラウザへ送信する https://techblog.gmo-ap.jp/2022/07/05/rails-7-hotwire/ https://zenn.dev/shita1112/books/cat-hotwire-turbo/viewer/abstract SSRていうやつけ? Rails嫌いではないがすっかりオワコンイメージだなあ いやほんとにファットなアプリケーションをHTML/JSで実装しようというアプローチ自体が間違ってたんだなぁとしか思えない そんならアプレットやバイナリ配信してキャッシュさせるアプローチに戻したほうがいい Rails 7 のHotwire, Elixir のPhoenix もLiveView で、 websocket によるリアルタイム通信に変わった。 これはHTTP2 で通信速度が速くなったから ここ数年、SPA でReact に奪われたシェアを回復すべき戦略。 JSON を送って、ブラウザ側で組み立てなくても良い Webフロントエンドは成熟しないねー 次々と新しい技術が登場してきて大変 いま最新技術を選択しても数年後には「まだそんなの使ってるの?」と言われちゃう 日本の客も開発者も要件整理苦手だから泥縄で作るじゃない? そういうやり方の場合SPAは実装ぐちゃぐちゃで使い勝手も悪くメンテも困難になる レガシーなページ遷移あったほうが自然とトランザクション整理されるからお似合いと思うけど そういう意味ではswingとかスマホでスタンドアロンアプリ作るのも日本人向きじゃないと思う >>478 >レガシーなページ遷移 Ruby on Rails では、turbolinks を使って、pjax になる ajaxとhistoryAPI(popState, pushState)を利用して画面遷移する。 js, cssの読み込みを初回時に行い、次回以降の読み込み処理を省略することで高速化する いまではPCのスペックが上がって、遅くもなんともない。 JAVA SWING のボタンはお洒落だからカワイイから JAVA SWING はボタンはカワイイくてお洒落だ swingアプリメンテしてて困るのは 最近は横4000ドット近くあるノートPCで アイコンやフォントが小さすぎる問題 古いフレームワークだからそういうの想定したスケーリング機能がない 結局自分でcontainer内のフォントサイズを再帰的に設定するメソッドとか作ったが 何十個もあるダイアログ全部まで手が回ってない… 逆に>>481 の言うように、スピードは全く問題なくなったね >>482 かわいいっていうか ちっさすぎて見えなくなったよ SwingってHiDPI対応してないの? Swing で作られてるらしいIntelliJ IDEAはHiDPI対応してるっぽいけど? >>485 標準のL&Fは対応してないよ 対応しているように見える実装は独自L&F実装してる OS側の強制拡大スケーリングはうまくいかないこと多いし やはり時代遅れ そうなのか ちなみにJavaFXはHiDPIに対応してた >>483 そんな高解像度のまま使っているのがおかしい jfxはmacOSで致命的ハングするから 代替にならないんだよなぁ ところでJavaFXにあるような カレンダーによるdatechooserいいの無い? 名前忘れたけど有名どころのやつは HiDPI対応してないうえにフォント拡大も パネルサイズ変更も対応してないので つかえないんですよ read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる