[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/09 14:29 / Filesize : 137 KB / Number-of Response : 542
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Java低速GUI Swing 8



1 名前:デフォルトの名無しさん [2008/11/21(金) 11:24:21 ]
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。

Java低速GUI Swing 7
pc11.2ch.net/test/read.cgi/tech/1204155623/
Java低速GUI Swing 6
pc11.2ch.net/test/read.cgi/tech/1190807478/
Java低速GUI Swing 5
pc11.2ch.net/test/read.cgi/tech/1161139809/
Java低速GUI Swing 4
pc8.2ch.net/test/read.cgi/tech/1140533866/
Java低速GUI Swing 3
pc8.2ch.net/test/read.cgi/tech/1121700954/
Java低速GUI Swing 2
pc8.2ch.net/test/read.cgi/tech/1095398949/
Java低速GUI Swing
pc5.2ch.net/test/read.cgi/tech/1062271447/l50

339 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:48:12 ]
廃止したら、古いアプリケーションが動かなくなるからな。
ところで Cloneable はスペルミスなのに
Closeable は間違いじゃないんだな。
ややこしい。


340 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 13:56:33 ]
互換用のjarを用意して、コンパイル時にはエラーにしてしまえばいいのに。

341 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 18:53:19 ]
コンパイルエラーにする代わりに警告を出してるんでしょ。
問題ないと思うけど。


342 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 15:16:20 ]
>>340
互換用のjar吐くフリーソフトとか作ったら需要あるかな。
メソッドシグネチャだけコピーして、どれを呼んでもErrorなげる実装とかいうやつ。

343 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:18:34 ]
JDKのライセンス違反になるからダメ。

java.*、javax.*、sun.*以下のクラスは変えちゃいかんのよ。
勝手にクラス追加するのも禁止されてる。

344 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 17:34:57 ]
JEditorPaneで単純にHTMLを表示する場合なんだけど、
<a href="#hoge">Hoge</a>
. . . . . .
<a name="hoge">ここにくる</a>

とやって、ページ内でジャンプさせることってできないんだっけか?

345 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:54:43 ]
>>344
クリック監視はHyperlinkListenerで。
そこからJEditorPane#scrollToReference("#hoge")でなんとかなんないかな。

346 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 19:42:27 ]
>>345
ありがとう!
これから試してみる。

347 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:07:18 ]
>>345
ありがーと!
うまくいった。
JEditorPane#scrollToReference("hoge")
で、#はいらないようです。



348 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:28:04 ]
うふっ

349 名前: mailto:sage [2009/02/26(木) 20:25:14 ]
JLabelがクリックされたとき、JLabelではなく親のコンポーネントがクリックされたことにしたいのですが
どういしたらいいでしょうか。

350 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 20:39:23 ]
>>349
あほらしい方法だけど
public void mouseClicked(MouseEvent e) {
JComponent c = (JComponent)e.getSource();
for(MouseListener l :c.getParent().getMouseListeners()){
l.mouseClicked(e);
}
}

351 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:34:16 ]
俺なら親のaddMouseListenerをオーバーライドしたいな

352 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:48:15 ]
俺俺なら親にディスパッチする

353 名前:sage [2009/02/26(木) 22:54:12 ]
俺俺俺も親にディスパッチするな。
350 みたいに実装するなら、MouseEventを変換してやらないと。



354 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:57:08 ]
まぁ俺の方がディスパッチするけどね。

355 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:07:01 ]
ディスパッチってどうやってするねん?

俺も>>350みたいにリスナーぶち込みで対処したことがある

356 名前:sage [2009/02/26(木) 23:17:41 ]
>>355
java.awt.Component#dispatchEvent(AWTEvent)嫁。

357 名前:349 mailto:sage [2009/02/27(金) 00:35:17 ]
getParent().dispatchEvent(event);が一番短くかけるみたいですね。

>>350から355のみなさん、どうもありがとうございました。



358 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:09:26 ]
普通に JLabel の親に対して
addMouseListener(MouseEvent) を呼べば
>>349 に書かれてるような挙動になるけど。


359 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:40:53 ]
c.addKeyListener(new KeyAdapter() {
  public void keyPressed(KeyEvent e) {
    c.removeKeyListener(this);
  }
});

どさくさにまぎれて、一度だけ実行されるリスナーの小技。(流れ上、マウスリスナでないのは手抜き)
めったに使う機会がないと思うけど。。

360 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:54:28 ]
それいけるんだ
Iteratorのループで出来ないかと思ってた〜

361 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:05:56 ]
JComponent.setFont(new Font("メイリオ", Font.BOLD, 42))
とすると一回目だけすごく遅いんですが、フォントの読み込みは
何かテクニックがあるんでしょうか?

362 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:07:54 ]
アプリケーション起動時にあらかじめ読み込んでおくくらいしかないよ
いずれにせよロード時間はかかる

363 名前:デフォルトの名無しさん [2009/03/01(日) 17:17:19 ]
Java SE Development Kit (JDK) 6 Update 11
Eclipse3.4.1
WindowsXP SP3

上記の環境があり、そこでGUIアプリをJavaで作成しようと思っています。
Swing(?)ってのをElipseのメニューから探したのですが、見当たりません。

JavaSEをアンインストールして、JavaEEをインストールするのが妥当な選択なのでしょうか?
それともplug-inがまた別にあるのでしょうか?

364 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:39:46 ]
>>363
LANケーブルを抜いてクビをククルのが最速

365 名前:デフォルトの名無しさん [2009/03/01(日) 17:49:20 ]
>>364
最速か否かは聞かれてないだろww

366 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:54:37 ]
exlipseの標準環境だと、swingアプリはメモ帳でhtml手打ちするようなのりで、
自分でソースコード書いて全部作ることになるっす。

net beansとかいうの使うと、VBみたいなポトペタを標準でできるらしい
eclipseもプラグイン導入するとポトペタできるらしい
が、swingでポトペタやったことないんでわかりません。

367 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:23:02 ]
>>366
Swingやるなら現状ではNetBeans一択らしい。
EclipseプラグインのVE(VisualEditor)は使いもんにならんそうな。
俺はEclipseで手打ちしてるけどナー。
# EcilpseからSwingアプリを起動すると、フォント構成ファイルが無視されて、
# 日本語じゃないフォントで日本語がレンダリングされるという問題も……。
# おかしいなー、フォント構成ファイルの読み込み自体は正常に行われてるんだが。



368 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:00:47 ]
つ jigloo

369 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:02:05 ]
じぐるーも重いしすごくグループレイアウトが使いにくいしだめだよなぁ

370 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:51:25 ]
NetBeansでGUI作って、Eclipseに持ち込んでる俺。
他にもいるでしょ、こんな人。

371 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:11:34 ]
>>367
VEは使ってみて、脱力した。
正直、自分の脳内でレイアウト組んだほうがマシ。
最近は更新もされてないんじゃなかったっけ?

372 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:20:54 ]
swingの印刷機能って、コンポーネント上の文字がカクカクになって印刷されるんだけど、
これって普通なの?

373 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 08:18:06 ]
>>372
アンチエイリアスかければ?

374 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:11:33 ]
>>370
余裕で俺、とウチの社内全員。

375 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:14:31 ]
>>370
NetBeansでそのままつくらずに、Eclipseに持ち込む理由はなんですか

376 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:27:24 ]
大技見つけたぜぃ。

Javaで比較的簡単にホットデプロイする方法。

まず、デプロイしたいクラスのベースとなるHogeを作っておきます。
そして、それを継承したHoge00というクラスを作ります。
ただし、このクラスのファイル名はHogeXX.javaという風にします。
コンパイルできなければ対策を考えますが、クラスをpublicにしなければ通るようです。
そして、修正してデプロイするときには、Hoge00をHoge01という風にクラスの名前も変えます。
ファイル名はそのままです。

クラス名を変えるとコンストラクタ名まで変えないといけません。この時の小技として
コンストラクタの処理を全て関数にしてHoge00クラスにはコンストラクタを記述しないようにします。
その為、Hogeクラスには空のデフォルトコンストラクタを用意しておきます。

あとは、コンパイルしてシステムのクラスローダを使ってHoge01クラスを読み込んで
Hogeにキャストして使用できます。Hogeにはインターフェースとなる関数を用意しておきます。

従来の方法だと別のクラスローダを使ったりするので、同じクラスを違うクラスであるとしてしまう為
キャストしたり出来ません。なので、リフレクションなどを使ってアクセスする事になります。
これがどうもうまくないと思ったので、別の方法を考えたら思いつきました。

今からサンプルを作ります。

377 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:39:21 ]
space.geocities.jp/solver9999/

ホームページに置きました。
なぜか、antから起動しないとToolProvider.getSystemJavaCompiler()がnullになってしまうので
antを使ってください。この辺を調べてみます。でゎ、おやすみ。



378 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:53:06 ]
なんだか麻布の臭いがする。。。

379 名前:デフォルトの名無しさん [2009/03/04(水) 10:33:20 ]
GUIはまったく初心者だったけど「Javaアプリケーション作成講座」という本を読んで
だんだんわかるようになってきた
とりあえず簡単なテキストエディタやブラウザは作れるようになった

380 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:28:11 ]
javax.tools.ToolProvider.getSystemJavaCompiler()がnullを返すのは
JAVA_HOME\lib\tools.jarにクラスパスが通ってない事が原因でした。

381 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 20:24:28 ]
ネタ・・・じゃ・・・ないの・・・・か?

382 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:06:57 ]
Swingに印刷プレビューダイアログってありますか?

383 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 09:36:17 ]
作れば良いんじゃないの

384 名前:sage [2009/03/06(金) 00:33:36 ]
以下のバグが1.4でも6.0でも再現するんだけど、JTextField#setTextはスレッドセーフじゃないの?
それとも検証方法自体が間違ってるの?
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4765353

385 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:42:39 ]
swing自体スレッドセーフじゃなかったと思う

386 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:44:55 ]
1.4.2で直ってないって書いてあるし、放置されてるんじゃね?

387 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:46:00 ]
この再現コードみたいなことをすること自体基本的にないからなぁ



388 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:50:16 ]
>>385
↓スレッドセーフだと書いてあるんだが・・・
sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/text/JTextComponent.html#setText(java.lang.String)

389 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:13:56 ]
ざっとソースをみたところ、スレッドセーフじゃないね。

テキストのモデルであるDocumentへの書き込みがアトミックであったとしても、
UIスレッドを用いてコンポーネントから何らかの値をとってくるメソッドで
Documentのインスタンスを2回以上使うような操作をする全てのメソッドは
その間はDocumentへの書き込みを排他していないといけないはずなのだが、
少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。

390 名前:389 mailto:sage [2009/03/06(金) 01:15:33 ]
ソースは Java 6 しかみてない。すまん

391 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:18:31 ]
setTextする処理をEDTに投げればいいんじゃないの?的外れだったらごめん。

392 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:43:30 ]
>>389
>.少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。

setTextの話だったんだけど、typo?

393 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:53:44 ]
>>392
getTextが変な値を返す原因がsetTextをUIスレッド以外でアクセスしたことにあるなら、
setTextはスレッドセーフだといえる?

394 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 07:33:43 ]
>>393
setTextの時点で変な値にならないのであれば、setTextはスレッドセーフじゃないの?
(よくわかってないかもしれん・・・)

そもそも>>384の再現コードは、getTextした値が""や"12"や"21"になることがあり、
以下のように思ってるんだが、違うかな?

""は、setTextが値を一度クリアしたタイミングで、getTextしているから。(getTextがスレッドセーフではないから)
"12"や"21"はsetTextがロックする前にAbstractDocument#getLengthを呼び出していることが原因。
(setTextもスレッドセーフではない?)

395 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 13:04:40 ]
JavaDoc を見る限り getText() はスレッドセーフじゃないんだな…知らなかった…
別スレッドからsetText()して結果的に画面に"12"や"21"や""が描画される
ことがないのであれば setText() はスレッドセーフといえる…のかな?

でも現状は >>394 のいうようにsetText()もスレッドセーフじゃないように見えるなぁ

396 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 17:43:09 ]
setText()のスレッドセーフを確認するのに、スレッドセーフではないgetText()が絡んでくるとややこしくなるので
setText()するたびに文字列を溜めておいて、最後に検証するというのはどうだろう。

397 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:28:23 ]
AbstractDocument.readLockを使えば、少しはましになるけど、ダメだった。
たまに、"12"と"21"が出てくる。



398 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:27:20 ]
swingコンポーネントをディープコピーしようとしたら、
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.io.NotSerializableException: com.sun.java.swing.plaf.windows.XPStyle$Skin
っていわれるんだけど、どうすりゃいいの?

399 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:12:39 ]
Beans Bindingはもう見捨てられたのかと思ってたけど、先月スペックリードが変わってるね。
これは期待してもいいんだろうか。

400 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:08:00 ]
スペックリードとは仕様定めるリーダーみたいなものでしょうか?

401 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 10:41:55 ]
複数のクラスで共用するダイアログなどで、わざわざそれぞれのフィールドとして持たせたくない場合は、UIUtilitiesなどを作ってそこでshow***といった感じで定義しても問題ないでしょうか

402 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 20:24:14 ]
逆に何を懸念しているのかがわからない

403 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 13:39:14 ]
Swingを勉強するのにお勧めの書籍とかある?

404 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:06:20 ]
どのレベルか、どんな記述が読み易いか示さないと何とも。

405 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:15:03 ]
>>404

Javaの勉強を始めたばかりで、プログラミング言語Java第四版を読み終わったところ。
まあまあ読みやすかった。訳も気にならなかった。

Head Firest Java 第二版を読んでる最中で、
面白いと思うけど、実用性には欠けると思っている。

ざっと機能を概観する入門書と、詳しい内容の2冊進めてもらえるとうれしい。

こんなところでどうでしょう。

406 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:16:03 ]
swinglabs.orgがもう一週間近く死んでる。

407 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 06:07:53 ]
頭いい人は本から入るのかね?

わしは本読んでると眠くなるんで、いきなりソースコードと戦う派なんだが



408 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:29:02 ]
武闘派か。端から見てるとPCに向かって何か遣ってる引きこもりにしか見えないが。

409 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:39:15 ]
>>405
詳しい内容ではないが実践的な内容ならEffective Java。
Swing関係ないけど。一通りJavaで組めるようになって開発規模が
大きくなってきた頃に手に取ると大変有用な本だと思う。

410 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:03:06 ]
>>409
Swing本当に関係ないなww
Swingの本を薦めてくれ。

411 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:23:35 ]
>>410
申し訳ない。ただJava勉強中のようだったのでつい。
確かにSwing関係ないけど間違いなく勉強になる良い本だよ。
「良いクセ」を学べる本なので、中級へのステップアップ時には
是非読んだ方が良いですよ。

Swing本については、他の人よろしく〜

412 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:27:20 ]
>>411
気持ちはありがたいが、既に本棚にあるのだww

413 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:29:06 ]
JavaはJava教室で買わされた本しかもってない、
Swingはグーグル先生に聞いてなんとかした、
読んでないからいい本なんて分からないんだぜ

Effective Javaは良さそうだな、読んでみようか

414 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:31:16 ]
本ではないが、java.sun.com/docs/books/tutorial/uiswing/

415 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:57:22 ]
>>413
ちゃんと本を読まなかったので、
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
の必要性を知らなかった。
人が書いたコードを見ても、余計なことをしてると思っていた。

416 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 02:46:43 ]
そんなの見た事無いや。orz
解説頼む。

417 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 03:12:48 ]
>>416
Swingは、スレッドセーフじゃないから、初期化もイベントディスパッチスレッドで実行しないといけない。
invokeLaterを使うと後でイベントディスパッチスレッドで実行される。



418 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 03:23:09 ]
>>416
スレッドセーフじゃないんだってさ。

419 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 10:10:35 ]
本ならSwing Hackが実用的かも。
Swingの入門書の次くらいに読むといい本。

420 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 23:55:45 ]
>>419
本屋でSwing Hackをみてきました。見た感じTIPS集みたいですね。
よさそうな入門書だと「Java GUIプログラミング」のVol.1, Vol2なのですが、
ちょっと本気すぎる感じです。以外にSwingの本って売ってないですね。

421 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 02:54:08 ]
>>420
本を買う前に最初はsunのjavaサイトにあるswing関連のチュートリアルで十分じゃないか?
APIリファレンスのswingコンポーネントクラスの説明文の多くにリンクがあったりする。

422 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 02:58:11 ]
あ、すま
>>414で紹介されてるね。

423 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 03:06:57 ]
英語を読むのは面倒くさい
いや読むけどさ(ブツブツ

424 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 04:21:31 ]
>>420
入門書ってどれもほとんど大差ないから。
「Java GUIプログラミング」が本気すぎるとなると習う前に慣れたほうが良いかも。
となるとSwingチュートリアルのソースがベストかな。
英文を隅々まで読まなくても、ソース読んで、実行してみればだいたいわかってくる。

425 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 20:45:24 ]
>>424
ありがとう!やってみる。

426 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:52:15 ]
JOptionPane#showXXXDialog()で適当なコンポーネントをつめたJPanelを
表示した際にダイアログのボタンじゃなくてJPanel内の特定のコンポーネントの
方にフォーカスがあたるようにすることってできる?

427 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:06:24 ]
>>426
???



428 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:47:02 ]
>>427
JOptionPaneをカスタマイズしてJPanelを埋め込んだ場合に、ダイアログのOK/Cancelボタンではなくて追加したJPanel内のコンポーネントに入力フォーカスを当てたい、ということだと思われる。

429 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 08:22:29 ]
できると思う

swing フォーカスでぐぐりゃ解決しそう

430 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:23:07 ]
>>428
そういうことです.わかりにくい文ですみません.
>>492
ぐぐってみました.ttp://terai.xrea.jp/Swing/DefaultFocus.html

JOptionPane#showXXXDialog()系だとJDialogやJFrameがとれないから
FocusTraversalPolicyをセットしたりWindowLister#windowOpend()や
ComponentListner#componentShown()でrequestFocus()呼べないよなー
とか思ってました.
んで上のページの EventQueue#invokeLater() 方式を試してみましたが
手元の環境ではJOptionPaneの場合フォーカスはOKボタンの方になってしまいました…

431 名前:430 mailto:sage [2009/03/19(木) 11:39:29 ]
試したコードはこんな感じです
public static void createAndShow(){
 final JTextField textField = new JTextField("Hello");
 EventQueue.invokeLater(new Runnable(){
  public void run() {
   textField.requestFocusInWindow();
  }
 });
 int result = JOptionPane.showConfirmDialog(
  null, textField, "Input Text",
  JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
}

432 名前:デフォルトの名無しさん [2009/03/19(木) 12:09:21 ]
>>431
実際にフォーカスを取得するまで、
requestFocusInWindow() を何度も呼んでみるとか。

ちょっと力技かもしれないけど HierarchyListener を使えば
JOptionPane.showXxxDialog() で作られるダイアログを取得できる。
そのダイアログに対して
WindowListener か ComponentListener を使えばよい。

「コンポーネントが画面に表示されたときに特定の処理を行う」
って、意外と難しいよね?
JSplitPane が表示されたときディバイダを中央に移動させる方法を
見つけるのに、すごく苦労したことがある。

433 名前:430 mailto:sage [2009/03/20(金) 00:09:49 ]
>>432
なるほど HierarchyListener は思いつきませんでした。これなら動きそうですね。

>>431 のコードはEventQueue#invokeLater()じゃなくて javax.swing.Timer で
1秒後とかやったら期待通り動いたんでタイミングの問題なんでしょうねぇ…
PC性能によって必要な delay 時間が変わるからTimerでやるのは微妙だなー
と思ったけど何度でも呼んでみる的アプローチで繰り返しありの Timer を
設定してフォーカスがとれたら Timer を止める、とかでもできそうですね…

434 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 01:56:28 ]
final JTextField textField = new JTextField("Hello");
JOptionPane pane = new JOptionPane(textField, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = pane.createDialog("Input Text");

dialog.addWindowListener(new WindowAdapter() {
@Override public void windowOpened(WindowEvent e) { textField.requestFocusInWindow(); }
});
dialog.setVisible(true);
dialog.dispose();
Object o = pane.getValue();
int result = (o instanceof Integer) ? (Integer)o : JOptionPane.CLOSED_OPTION;

うそくさいし、ひどく面倒

435 名前:430 mailto:sage [2009/03/20(金) 13:14:55 ]
>>434
確かに JOptionPane を直接使えばJDialogがとれますね。参考になります。
戻り値の扱い周りとかが大変面倒くさそうですけど…

436 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 13:26:02 ]
>>432
>「コンポーネントが画面に表示されたときに特定の処理を行う」
Component#addNotify() / removeNotify()をオーバーライドでできると思う。

437 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:46:14 ]
>>436
addNotify() が呼ばれたとき、
そのコンポーネントが表示されてるとは限らない。
たとえば Window.pack() を呼んだとき、
(たとえウィンドウが不可視であっても)
ウィンドウ内のすべてのコンポーネントの
addNotify() が呼ばれる。

あと、親コンテナの doLayout() が呼ばれるまでは
コンポーネントのサイズが確定しないので、
オーバーライドした addNotify() から
JSplitPane.setDividerLocation() を呼んでも機能しない。



438 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:59:56 ]
JTableのセルをアニメーションして移動したり表示したりしたいのですが
どういう方法が一番いいでしょうねぇ・・・

439 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:12:38 ]
単純にセルを描画する命令をタイマーで呼ぶしか方法はないのでは?
その具体的な方法でしょうか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<137KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef