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) ・・・・ read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる