X



Java低速GUI Swing 10
0001デフォルトの名無しさん
垢版 |
2011/09/20(火) 23:23:15.82
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。

Java低速GUI Swing 9
http://hibari.2ch.net/test/read.cgi/tech/1261232019/
Java低速GUI Swing 8
http://pc12.2ch.net/test/read.cgi/tech/1227234261/
Java低速GUI Swing 7
http://pc11.2ch.net/test/read.cgi/tech/1204155623/
Java低速GUI Swing 6
http://pc11.2ch.net/test/read.cgi/tech/1190807478/
Java低速GUI Swing 5
http://pc11.2ch.net/test/read.cgi/tech/1161139809/
Java低速GUI Swing 4
http://pc8.2ch.net/test/read.cgi/tech/1140533866/
Java低速GUI Swing 3
http://pc8.2ch.net/test/read.cgi/tech/1121700954/
Java低速GUI Swing 2
http://pc8.2ch.net/test/read.cgi/tech/1095398949/
Java低速GUI Swing
http://pc5.2ch.net/test/read.cgi/tech/1062271447/l50
0014デフォルトの名無しさん
垢版 |
2011/09/22(木) 08:19:33.40
AWTもターゲットに入ってていいんだよね?

Q. AWT と Swing 混ぜちゃ駄目って聞いたんですけど
  混ぜちゃ駄目なんですか・・・・?
A.
 今まででは、「駄目」というのが正解です。
 が、現在開発中(未リリース)のバージョンではSwingとAWTの混在ができるようになっています。
 正式リリースがされるまで、情報の錯綜があって混乱すると思いますが
 普通の人にとっては「まだ駄目」という状況だと思ってください。

Q. Nimbusって何よ。
A.
 次期Swingの標準となるとされているLAFです。
 元々は、SUNのGnome環境のテーマに使われていた見た目を移植したものになります。
 実装にはXMLベースでLAFを定義できるSynthLookAndFeel を利用しています。
 jdk6の開発版で試す事ができます。

Q. こんなプログラムを作れって言われたんですが・・・
A.
 宿題スレへどうぞ。

Q. なんでスレタイに低速って入ってるの?
A.
 まだまだ速くなるってことさ。
0015デフォルトの名無しさん
垢版 |
2011/09/22(木) 08:19:57.39
Q. JavaFX と Swing 混ぜちゃ駄目なの?

A.
  SwingベースのアプリにJavaFXコンポーネントを乗せるのはOKです。
  逆は不可です。(JavaFX2.0現在)ちなみに、JavaFX2.0は今年の下旬に
  リリースされます。今はベータ版です。
0019デフォルトの名無しさん
垢版 |
2011/09/22(木) 21:06:07.82
Nimbusに変えたいけどレイアウトが崩れるし
微妙にセンスが悪い気がするので結局Windowsのままだ
0020デフォルトの名無しさん
垢版 |
2011/09/22(木) 23:44:36.26
Nimbusと混ぜるとウマーとJOGLパイプライン統合とアプレットのDnDはもうQ&Aでもよさそう。
SwingX系はJRE7の一般DL以降くらいじゃねか?
JavaFXまわりは検討もつかん。JavaFXはprismエンジンだから描画スレッドとEDT別だよってのはここの範疇?
0021デフォルトの名無しさん
垢版 |
2011/09/25(日) 11:50:18.93
>>7
見た目はWindowsのLookAndFeelでぎりぎりなんとかなるけど、
ファイル選択ダイアログの細部の挙動がネイティブと違って気持ち悪い。
あと、テキストフィールドで右クリックしたときの挙動とか。

でも、大きな理由はそんな細部じゃなくて、起動が遅いこと。
ディスクキャッシュに乗ってないとJVM起動して、関連するクラスロードして、
最初のフレーム表示するまでに数秒かかる。
動き出せばネイティブとの速度的な差はない。

0023デフォルトの名無しさん
垢版 |
2011/09/25(日) 12:55:35.08
商用のソフトじゃ使われてないから人気がないように見えるけど
社内とかだと結構使われてたりするよ
0024デフォルトの名無しさん
垢版 |
2011/09/25(日) 13:27:25.01
数千行のテキストを容易に表示できて
表示するテキストを後から容易に追加できて
テキスト中に何らかのコンポーネント(テキストのリンク、アイコン、ボタンなどどれでも良い)も表示できて
そこからイベントを発生させられるような
コンポーネントはありますか?

JEditorPaneでハイパーリンクを使うことを考えましたが
HTMLにテキストを追加するのが容易ではないのと、テキスト追加が頻繁にあると重くなりそうで、別の選択肢が無いか探しています。
0025デフォルトの名無しさん
垢版 |
2011/09/25(日) 14:53:43.96
テキスト追加と、表示とを分けて考えたほうがいい。
たとえば編集にはJTextArea、表示にJEditorPaneを使って、Wikiっぽくするとか
どうよ? どうしても同じ画面でやりたいとかじゃなきゃ、いけそうだが。
0027デフォルトの名無しさん
垢版 |
2011/09/25(日) 20:09:40.16
>>26
難しい、重いと思うならコンポーネントなんか使わないで独自実装でもすれば?
ぐだぐだ抜かしてないで、まず実装してから最適化しろよ。
0037デフォルトの名無しさん
垢版 |
2011/10/04(火) 17:56:40.53
>>34
依存しなくてもできるし、依存してもいい。
もともと、JavaFXスクリプトっていって、WindowsプログラムにおけるWPFのような
お気軽なGUI設計思考で作られた。でも、スクリプト自体がなんもなくなってしまった。
0038デフォルトの名無しさん
垢版 |
2011/10/05(水) 18:48:09.85
JavaFXにはコンポーネントが不足してるのでSwingも使う→
Swingにはリッチなコンポーネントが不足しているのでSwingXも使う(java7いまここ)→Swing labは終ってしまったので結局路頭に迷う。
0039デフォルトの名無しさん
垢版 |
2011/10/06(木) 02:28:29.67
Swingはん、まだまだこれからやで〜。
わし、今日、3980円もする、JavaGUIVol.1ていう、Swingばっかの本こうてきたわ。

0040デフォルトの名無しさん
垢版 |
2011/10/06(木) 02:44:39.96
奇遇やな
わしおととい図書館でVol.2借りてきたで
付属のCDにVol1のソースまで付いてきて得した気分になったで
0041デフォルトの名無しさん
垢版 |
2011/10/06(木) 08:34:53.32
UI 関連は、タッチパネルUI勢、HTML5勢の勢いがすごいからな

すぐに Swing 並の API が JavaScript で用意できるか俺は懐疑的だが
もしものすごい実装用意されたら、ついに Swing は終わってしまうな

0044デフォルトの名無しさん
垢版 |
2011/10/06(木) 21:15:58.13
流れてくるメッセージがちょいちょい違うから混乱するかもな。
それで混乱して質問したら「なんでそんなことやってんだ」と罵倒される。
それに変なクセがつきそう。

練習ならメインウインドウにボタンやらエディットコントロールを貼り付ければ良いと思うよ。
全部CreateWindowでできる。
猫でもわかるかWisdomsoft参考にしろ。
0046デフォルトの名無しさん
垢版 |
2011/10/11(火) 10:20:12.45
JApplet(Swingのアプレット)にJTableって乗せれる?
004846
垢版 |
2011/10/12(水) 12:15:11.24
>>47
どうもです。Javaアプレット復権しないっすかね〜。
0050デフォルトの名無しさん
垢版 |
2011/10/12(水) 14:05:56.18
Javaメインに使ってる自分としては、わざわざActionScriptとか別に覚えるの面倒だから
Appletのが良いかな。
0051デフォルトの名無しさん
垢版 |
2011/10/12(水) 14:20:24.13
全盛期のjavaアプレットは、あまりに重くてただのブラクラと化してたけど
Swingみたく今はそうでもないのかね
0052デフォルトの名無しさん
垢版 |
2011/10/12(水) 14:34:34.67
iOS や Windows 8 がすでに、もうブラウザ上で動くプログラムは
HTML5 オンリーと決め込んでるからな

Flash も Java も Silverlight も廃れるべきと奴らは考えてるらしい。

おれが思いうに Java は着々とセキュリティホールは塞がれてるし、
動作速度も速い。ブラウザの対応も年の功で進んでる。開発環境は
揃ってて、クロスプラットフォームのクライアントサイドの技術と
しては今ある中ではベストだと思うよ。
0055デフォルトの名無しさん
垢版 |
2011/10/12(水) 17:24:59.78
ウィンドウベースのアプリケーションに移植するなら
JApplet.setContentPane(mainPane)
のとこを
JFrame.setContentPane(mainPane)
とかすれば、まあ動くだろう

まあ、アプレットはブラウザ上でセキュアに動くから、
ユーザにとって価値があるのであって、なんでもやらかす
ウィンドウベースのレガシーなアプリケーションにされると
よくないだろう
0058デフォルトの名無しさん
垢版 |
2011/10/12(水) 20:06:08.81
>>50
そこでGWTですよ
0059デフォルトの名無しさん
垢版 |
2011/10/12(水) 23:09:50.56
>>58
確かに、html + JavaScript(&ライブラリ)使って開発するよりは、Javaプログラマにとっては
ハードルは下がりますね…

しかしGWT使った開発、規模が大きくなるとすごく面倒。
コンパイルが洒落にならないくらい時間かかる、ってのが一番大きいと思うけど、他にもデバッグ時とか。
同等規模のhtml5風開発したこと無いのでJavaプログラマにとってどっちがよりましか、
ってのは分からないんだけどもね。
0060デフォルトの名無しさん
垢版 |
2011/10/12(水) 23:37:32.61
>>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
006160
垢版 |
2011/10/12(水) 23:50:40.90
ごめん、多分
> Appletをデスクトップにドラッグ&ドロップすると
> 通常のアプリのようにアイコンダブルクリックで起動できるようになる(JWSとしてインストールされる?)
は記憶違い。
そして>>55はJWSのことを言ってるわけじゃないことにも気付きました…
0064デフォルトの名無しさん
垢版 |
2011/10/13(木) 04:12:46.11
JavaFXがmobile&tabletでも動けばなぁ。
ここの部分は切り捨てなくてよかったと思うよJavaFX。
つかAndroidで動くCDC/PPがいるか。
0067デフォルトの名無しさん
垢版 |
2011/10/21(金) 21:28:11.58
java質問スレとどっちに書くか迷ったのですが、こちらで
質問させてください。

BorderLayoutなJFrameのCENTER位置にJTabbedPaneを
置いて、MouseListener#mouseExitedを仕込みその中で
setCursorsしています。

すると、JTabbedPaneから周りのcomponentにゆっくり
カーソルを出した場合は、さらにwindow外にポインタを
出してもsetしたカーソルを維持してくれます。

が、マウスを早く動かして周りのcomponent上での滞空時間が
短くなるようにカーソルをwindow外に出した場合は、カーソルが
変わってくれなかったり、windowの大きさ変更のカーソルに
なったりします。

これをゆっくり動かしたときと同じようにすることは出来ない
でしょうか。

(mouseExitedイベント自体はちゃんと発生してます)
(window外で発生するmouseDraggedイベント内でsetCursors
してもカーソルは変わってくれませんでした)
(setCursorsはRootPaneのGlassPaneにおこなっています)
006967
垢版 |
2011/10/22(土) 08:33:58.21
setCursorのjavadocに、「このコンポーネントの contains メソッドが
現在のカーソル位置に対して true を返」さないと駄目って書いてある
じゃんorz
マウスの動きが速くてsetCursor前にコンポーネント外に出てしまうと
きかなくなっちゃう、って話ですね。
完全にawtの問題でした。質問すれに行きます。すれ汚しすまんかったです。
0071デフォルトの名無しさん
垢版 |
2011/10/23(日) 15:31:13.82
SwingUtilities.invokeAndWait() が invocationTargetException をスローするとEDTが終了してくれないようなのですが、
何かいい対処方法ないでしょうか…
007271
垢版 |
2011/10/23(日) 15:37:25.43
ttp://javafaq.jp/S065.html#S065-37

ああ、ここらへんみたいです。自己解決しました。
0078デフォルトの名無しさん
垢版 |
2012/01/10(火) 12:06:38.54
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");
 }
}
0080デフォルトの名無しさん
垢版 |
2012/01/10(火) 20:02:40.41
さんくすです。
モーダルダイアログだとsetVisible(true)すると
setVisible(false)かdisponse()するまで処理が止まるんですね。
0081デフォルトの名無しさん
垢版 |
2012/01/12(木) 00:52:54.57
http://pastebin.com/4qH6Adke
上記のようなTableTest.javaというjavaのソースファイルを実行すると、
下図のように、表の部分にマダマダ余白があるにも関わらずスクロールバーが現れてしまうUIとなってしまいます
http://uproda.2ch-library.com/475736Up9/lib475736.jpg
このレイアウトで余白がなくなるまでスクロールバーが表示されないようにするにはどうすれば良いでしょうか?

また、初心者なので他に変な所があれば指摘頂けるとありがたいです
008381
垢版 |
2012/01/12(木) 23:34:46.24
>>82
出来ました!それすると表の項目名(xとy)が表示されないものとばかり思ってました
ありがとうございます
0084デフォルトの名無しさん
垢版 |
2012/01/15(日) 22:32:04.55
JTableの選択モードで

・クリックしたセルを含む行全体を選択(ハイライト)
・同時に選択できる行は1行のみ

のようにするにはどう選択モードを設定すればよいですか?
0086デフォルトの名無しさん
垢版 |
2012/01/20(金) 20:37:51.11
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)
 ・・・・
0087デフォルトの名無しさん
垢版 |
2012/01/24(火) 01:22:12.63
ポップアップメニューで選択されたのをトリガーとして
なにか重い処理を行う場合(サンプルコードのdoSomethingメソッドのような)、
ポップアップメニューが表示されたまま、画面が固まったようになってしまいます。
画面が固まるのは仕方ないとして、別処理の前にポップアップメニューを
非表示にすることはできないのでしょうか。よろしくお願いします。

サンプルコードは以下です
http://ideone.com/zIVRZ
0088デフォルトの名無しさん
垢版 |
2012/01/24(火) 18:55:30.08
>>87
別スレッド立てて、そのなかで重い処理すればいいよ。
今時はスレッドを直接使うんじゃなく、swingworker使うのが普通かな。
0090デフォルトの名無しさん
垢版 |
2012/02/03(金) 15:03:24.45
>>89
Sunの実装が手抜きで未確定文字左下のx,yしかwindowsに送ってないのが原因だから、
Java側からじゃどうしようもないと思う。

BugDatabase行くか、Swing使うの諦めるか、我慢するか。
0092デフォルトの名無しさん
垢版 |
2012/02/19(日) 10:56:26.50
GUIスレッドとファイル・通信を行う2つスレッドのがあります。
ファイル・通信を行うスレッドでイベントを発生させて、GUIスレッドでイベントをキャッチしたいのです。
どのようにすればイベントを発生させることができますか
0094デフォルトの名無しさん
垢版 |
2012/03/02(金) 14:18:11.33
あるウインドウ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のデータを更新して表示する方法があるのかわかりません。
お教えいただきたくお願いします。
0095デフォルトの名無しさん
垢版 |
2012/03/02(金) 15:03:46.87
どうみてもメニューが押されて初めてBが生成されてるようにしか読めないのだが。
Bのコンストラクタにthisを渡したらthisがnullだったわけ?
0096デフォルトの名無しさん
垢版 |
2012/03/02(金) 15:24:30.23
>>95
そうれす。
この場合のthisはAなんだけど、Bのコンストラクタを呼び出すのがAのコンストラクタの内部だから
Aがまだ生成されていないのでthisはまだnullのままなんだと思う。
JavaはそこそこやってるんだけどSwingは最近始めたばかりなので感覚がわからん。
ウインドウA への参照を aRoot として取得できるかと思って B を生成するメニュー項目 menuItemB を使い
final JFrame aRoot = (JFrame) SwingUtilities.getRoot(menuItemB);
みたいなのをイベント発生前に入れてみても、所詮 A のコンストラクタ内なのでaRoot==nullなんだな。
目的とする処理はありがちなので常套手段があるんだと思う。引き続きお願いします。
0098デフォルトの名無しさん
垢版 |
2012/03/02(金) 16:00:44.75
this 自身はたとえコンストラクタの中でも null にならないよ!
きっと何か勘違いしてるよ!
本当にコンストラクタのせいだと思うならコンストラクタであれこれ初期化するのをやめればいいだけじゃない!
init メソッドとか別に作ってそこで色々やればいいと思うよ!
0099デフォルトの名無しさん
垢版 |
2012/03/02(金) 16:05:09.38
内部クラスでのthis参照は色々と落とし穴があるので要注意。
解らなかったらとりあえず内部クラス使うのやめてみよう。

いや、thisがnullとかありえないから。
0100デフォルトの名無しさん
垢版 |
2012/03/02(金) 16:28:55.75
>>98>>99ついでに>>97
確認のために内部クラスを使わずに単純なクラスA,Bを作り、Aのコンストラクタ内部で
BのコンストラクタB(A)を呼び出してみましたが,たしかにAには非null値がちゃんと渡されていました。
>>99さんのご指摘のとおり、やはり内部クラスからのthis参照がまずいようです。
>>98さんのご指摘のようにコンストラクタ以外のinit()メソッドのようなものを作って呼び出したいのですが
どのタイミングで呼び出せば良いかがわかりません。
「パネルBを開いた」というのを、Bのコンストラクタでもなく、actionPerformed()ブロックの中でもなく
呼び出すには、Swingではどのようなからくりを使うんでしょう?初心者でサーセン。
0101デフォルトの名無しさん
垢版 |
2012/03/02(金) 16:33:10.64
>>100
誤>「パネルBを開いた」というのを、...呼び出すには、...
正>「パネルBを開いた」というのを、...知るには、...
0102デフォルトの名無しさん
垢版 |
2012/03/05(月) 10:03:36.04
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);
}
0103デフォルトの名無しさん
垢版 |
2012/03/05(月) 11:53:37.70
eclipseスレから誘導されてきました
Eclipse + WindowBuilderでGUIを作って
フォームにButtonnとLabelを置いて、Buttonをダブルクリックして自動的に開いたソースコードの部分に
labelのテキストをSetText("変更しました")って変更したいんですけどlabelのオブジェクトにアクセスできないわけなんです
どうやってlabelにアクセスするのでしょうか?
0104デフォルトの名無しさん
垢版 |
2012/03/05(月) 12:14:48.43
>>103
誘導されたとはいえ、いくら何でもひどい。

Eclipseスレで「JavaのSwingの基礎知識をググってから 」ってところを何もしてないのがバレバレ。
Javaがある程度理解できるなら、ダブルクリックで表示されたソースを見ただけで
labelのインスタンスがわかるはず。
レスを投稿する


ニューススポーツなんでも実況