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


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

Java低速GUI Swing



1 名前:デフォルトの名無しさん [03/08/31 04:24]
そんなSwingとやっていくみんなのスレッドです。

476 名前:デフォルトの名無しさん mailto:sage [04/01/07 13:11]
Win上でSwingアプリをSpy++で見ると
InternalFrameとかタブとかあっても一つのjavax.swing.JFrameしか
見えないんだけどこれってその窓に全部自前で描画してるってこと?

477 名前:デフォルトの名無しさん mailto:sage [04/01/07 13:37]
そういうこと。

Swingの重量コンポーネントと軽量コンポーネントでぐぐるとその辺のことが出てる。

478 名前:デフォルトの名無しさん mailto:sage [04/01/07 14:31]
>>476
だから、リソース的には軽い。

479 名前:468 mailto:sage [04/01/07 15:03]
>>468
> 「ボタンをクリックしたら10秒くらいの時間がかかる処理をはじめる」
> そのボタンをクリックしたら最後、10秒くらいGUIが固まっちゃうのさね。

これって、SwingだけじゃなくほとんどのGUIツールキットで起こらない?
逆に、スレッドや同期が気軽に使えるSwing(Jave)のほうが有利なくらいだと思うのだけれど。

「リストにアイテムを突っ込むときに○○○してからじゃないと遅い」
とか
「モデル側でのエレメントの取得処理は十分高速でないといけない」
みたいな例があるのかと思って。
素人ですんまそん。

480 名前:468 mailto:sage [04/01/07 15:04]
レス番間違えた >>475

481 名前:475 mailto:sage [04/01/07 16:46]
>>479
>これって、SwingだけじゃなくほとんどのGUIツールキットで起こらない?
たとえば、つぎのようなGUIコンポーネントのシステムが
考えられるとおもうよ。

システムが、ワーカースレッドを複数つくっておいて、それをプール。
クリックされたときなどに行う処理は、ワーカースレッドにすべて引き渡す。
こういったことを、プログラマーが意識しなくとも、システムが自動的におこなってくれる。

これなら、へたくそなプログラマーが、
どんなに重い処理をなんの考えもなしに記述しても、
描画や、ボタンがクリックされたかのチェックを行うスレッドは、固まらない。

キューを作っておいて、そこのキューに仕事をため込むことで、
あるていどのバッファとしたりしてもいいかもしれない。

もちろん、重い処理をつぎつぎと発生させれば、
ワーカースレッドも、つぎつぎと浪費されていくことにはなるし、
キューも、やがてはあふれて処理を取りこぼすだろうけどね。

それはさておきJavaでも、既存のSwingのうえに
このようなコンポーネントシステムを構築(ラップ)することは可能だとおもう。
ただ、Javaの場合は、
もうひとつ『シングルスレッドルール』なるものを考慮しないといけないけどね。

// つーか俺がしらないだけで、
// Swingを使ったそういうコンポーネントのシステム、どこかにありそうだけどね。

482 名前:475 mailto:sage [04/01/07 16:47]
>>479
>みたいな例があるのかと思って。
その手の例なら、最近のJava Live Transcriptsのテーマにあったとおもう。
俺は、英語苦手だから、全部目を通したわけではないが。
java.sun.com/developer/community/chat/JavaLive/2003/jl0121.html

483 名前:デフォルトの名無しさん mailto:sage [04/01/07 17:44]
>>481
> たとえば、つぎのようなGUIコンポーネントのシステムが
ちなみに、そのような方法を採用したGUIコンポーネントのシステムってあるの?

484 名前:デフォルトの名無しさん mailto:sage [04/01/07 19:41]
>>481
画面からの入力がコマンドになってるCommandパターンなわけね。
面白いと思うけど、各処理を同期させないといけない場合なんかは
面倒くさそうだな。




485 名前:デフォルトの名無しさん mailto:sage [04/01/07 21:17]
coreJava2Vol2.応用編より

Swingの設計者は、2つの理由からSwingをスレッドセーフにしないことを決めた。
まず、スレッドの同期には時間がかかるため、Swingの処理速度を
これ以上遅くしたくなかった。
さらに重要な理由として、他のチームがスレッドセーフな
ユーザーインターフェースツールキットを開発したときの経験が挙げられる。
ユーザーインターフェースツールキットを構築する場合、
他のプログラマがユーザーインターフェースツールキットに独自の
要素を追加できるように拡張性を持たせたい。
しかし、スレッドセーフなツールキットを使うと、同期を行わなければ
ならないという制限のためにプログラミングが難しくなり、
デッドロックの可能性を秘めたコンポーネントが生成される傾向がある。

486 名前:デフォルトの名無しさん mailto:sage [04/01/07 22:37]
>>481
そういうのは今まで見たことがないな.

アプリケーションへのコールバックがマルチスレッドで行われる場合,
イベントハンドラが全てスレッドセーフになっていなければならないってことになるよ.
foolproofのつもりが,かえってプログラマに対する要求がきつくなってる.

あと,いわゆる先行入力ができなくなる.
たとえばボタンを押すとダイアログボックスが開くというような場合,
普通のツールキットならダイアログが開くまで
重い処理があっても入力はキューされるので
ユーザは先行してEnterとか入力することができるけど,
おまいさんのモデルの場合はダイアログが開く前の(重い処理中の)
入力が他のウィジェットに吸収されてしまうので,先行入力ができない.
こういうのはくだらないと思うかもしれないけど,
ユーザの使い勝手の点では重要.

普通に使われてるウィンドウツールキットが
同期的なイベントハンドリングをするのにはしっかりした理由があるので,
ちょっとした思い付きで改善できるならとっくにそうなってるよ.
その点に関してSwingはVBやVCLと比べて優劣の違いはない.普通.
AWTと比べればスレッドアンセーフだけど,むしろその方が一般的だし.

487 名前:デフォルトの名無しさん [04/01/07 23:06]
結論:MFC >>>>>>>>>>>>>>>>> Swing

488 名前:デフォルトの名無しさん mailto:sage [04/01/07 23:21]
>>487
プログラムの組みやすさ以外は、ある意味そうだと思う。

489 名前:デフォルトの名無しさん mailto:sage [04/01/07 23:29]
>>488
マルチプラットフォームだしね。
www.bristol.com/windu/

Mac版もあったけど資料が見当たらない……。

490 名前:デフォルトの名無しさん mailto:sage [04/01/07 23:40]
動作速度、カスタマイズ、大きさ、全てにおいて、MFCの勝ちだな。

491 名前:デフォルトの名無しさん mailto:sage [04/01/08 00:10]
>アプリケーションへのコールバックがマルチスレッドで行われる場合,
>イベントハンドラが全てスレッドセーフになっていなければならないってことになるよ.
>foolproofのつもりが,かえってプログラマに対する要求がきつくなってる.

Swingの場合、それをシングルスレッド規則が包括しているわけですの。
「コールバックしたらイベントキューに突っ込め。ユーザスレッドで再描画するな。」
ですから。

シングルスレッド規則って、しらん人多いんでわ。←これが問題


492 名前:デフォルトの名無しさん mailto:sage [04/01/08 00:58]
シングルスレッド規則知らん人なんですけど
「コールバックしたらイベントキューに突っ込め」
これがどういう事なのかすらわからないのですが

といか、そこまでSwingきわめて、ちみらいったい何つくったわけよ?

493 名前:デフォルトの名無しさん mailto:sage [04/01/08 01:37]
極める何てレベルでなく
基 本 中 の 基 本
です

494 名前:デフォルトの名無しさん mailto:sage [04/01/08 03:10]
>>493
どっちでもいいけど何作ったの?



495 名前:デフォルトの名無しさん mailto:sage [04/01/08 03:34]
>>494
簡易ダウンローだ

496 名前:デフォルトの名無しさん [04/01/08 06:30]
>>494
>>395

497 名前:デフォルトの名無しさん mailto:sage [04/01/08 08:55]
>>491
> シングルスレッド規則って、しらん人多いんでわ。←これが問題
普通は知ってる。

理由:他のGUIツールキットも同じだから

498 名前:デフォルトの名無しさん mailto:sage [04/01/08 10:00]
>>434
あのな。わしが言いたいことは
VBとか.net frameworkとかはAPIの質が低いといっているのだよ。
なんというか、初心者みたいなのとかオブジェクト指向を知らない香具師とか
使い捨てプログラムしか作る気がない香具師には便利なんだろうけど。

拡張性を求めるとあれらのAPIはごちゃごちゃして使い勝手が悪い。
(ドキュメントを見る限りでは)WinFXでもまだまだ汚なさは残っているようだ。


499 名前:デフォルトの名無しさん mailto:sage [04/01/08 10:04]
>>445
> > ちょっとヘタクソなコード書いたくらいで、パフォーマンスに大きく影響がでるのも、Swingの良くないところだな。
> ちょっと乱暴な運転したぐらいで、人を殺せてしまうのも、自動車の良くないところですね。
その喩えは奇異だ。そういうのは

ちょっと乱暴なコーディングをしたぐらいで、メモリリークやバグを量産させてデスマーチを起こせてしまうのも、
COBOL, C/C++の良くないところですね。

というならなるほどって思うが

500 名前:デフォルトの名無しさん mailto:sage [04/01/08 10:09]
>>452
そういう危険な国は中国と言うよりむしろポルトガルだよ。
世界一交通死亡事故がおきやすい道路というのがあそこにある。

アメリカや日本の警察のように、国が事故原因をしっかりと詳細に調べず、
事情聴取なとといったこともろくにせず
道路標識を修正・追加するとか、その後の対策をしっかりととらないから
いつまでたっても死亡事故が減らない。

なんだか、C++プログラマを見ているようだ。

501 名前:デフォルトの名無しさん mailto:sage [04/01/08 10:38]
>>498
> VBとか.net frameworkとかはAPIの質が低いといっているのだよ。
そーゆー事は「質の高いAPI」を作ってから言ってください。

502 名前:デフォルトの名無しさん mailto:sage [04/01/08 11:05]
>>499
> というならなるほどって思うが
なるほどって思っちゃうのか。困ったもんだ。

503 名前:デフォルトの名無しさん mailto:sage [04/01/08 13:17]
>>502
なんか読み違えてない?

504 名前:デフォルトの名無しさん mailto:sage [04/01/08 13:32]
>>500
> なんだか、C++プログラマを見ているようだ。
そーゆー話をしたければ死滅スレにでも行け。



505 名前:デフォルトの名無しさん mailto:sage [04/01/08 13:41]
>>501
比較すればSwingAPIの質は高いと思うぞ。

506 名前:デフォルトの名無しさん mailto:sage [04/01/08 19:22]
APIの美しさだけ見ると、一番優れているのはなんだろう。

507 名前:デフォルトの名無しさん mailto:sage [04/01/08 19:30]
>>506
とりあえず「API の美しさ」を定義してください。

しっかし厨が好きそうな話題ですな。

508 名前:デフォルトの名無しさん [04/01/08 21:07]
ttp://cgi.io-websight.com/index2/uploarder/img/hare7300.bin
ttp://cgi.io-websight.com/index2/uploarder/img/hare7301.bin

こんな感じのアプレットをサーブレットで動かそうと考えたのですが
普通に開くと見られるのですが
サーブレットで開くとアプレットを開くことが出来ません。

いろいろいじってみたのですが、行き詰まりました、
もしよろしければ助言いただけないでしょうか

509 名前:デフォルトの名無しさん mailto:sage [04/01/08 22:19]
>>508
サーブレットで開くというのが意味不明。
要解説

510 名前:デフォルトの名無しさん mailto:sage [04/01/08 22:37]
普通に開くは、HTMLとしてアプレットを表示するだけのソースで開き

サーブレットで開くというのは
localhost〜/servlet/MondaiL4 
と言う感じにサーブレット通して開こうとすることを思って書きました。

一応アプレットとして開くと見られるのですが
サーバー通して動きを付けようとサーブレットで開くとアプレットすら表示されません
アプレット表示されて、動きが現れない、なら対処しようがあるのですが
アプレット表示することが出来ず立ち止まっています。

511 名前:デフォルトの名無しさん mailto:sage [04/01/08 22:39]
>>510
で、そのときのHTMLはどんなのが出力されてるの?

ま、「サーブレットで開く」って言葉から、理解不足がありあり感じられるわけで、そろそろ「スレ違い」という目も怖くなってくるわけで。

512 名前:デフォルトの名無しさん [04/01/08 22:46]
Swingのおすすめの本を教えてください

513 名前:デフォルトの名無しさん mailto:sage [04/01/08 22:46]
Swingスレでサーバサイドの話題かよ!

514 名前:デフォルトの名無しさん mailto:sage [04/01/08 23:30]
>>507
何とかかんとか2 とか 何とかかんとかEx
みたいなクラス名, メソッド名があるのは美しくないですね。
意味不明な略語が使われてるのも美しくないですね。



515 名前:デフォルトの名無しさん mailto:sage [04/01/08 23:43]
JavaWebStartアプリをHttpServletと会話させてリッチクライアントな
Webサービス、ってのはアリじゃないのかね。

516 名前:デフォルトの名無しさん mailto:sage [04/01/08 23:46]
>>514
privateなら"なんとかかんとか0"ってのがあっても良いの?

517 名前:デフォルトの名無しさん mailto:sage [04/01/08 23:47]
>>515
Avalonがそれに近いことを実現させようとしている

518 名前:デフォルトの名無しさん mailto:sage [04/01/09 00:44]
>>515
「API の美しさ」ってのは名前だけで決まる、と。

ところで、JComponent とかの J は許せるのか?

519 名前:デフォルトの名無しさん mailto:sage [04/01/09 00:44]
>>516
private なものは公開しないことが前提
裏でどうなっていようと利用する側から触れないところならば問題ない

520 名前:デフォルトの名無しさん mailto:sage [04/01/09 00:45]
>>518
名前も美しさの一因だろうが「名前だけで決まる」なんて書いてないだろ。

521 名前:デフォルトの名無しさん mailto:sage [04/01/09 00:49]
>>520
>>514 では名前に関してしか書いてない。

ところで、JComponent とかの J は許せるのか?

522 名前:デフォルトの名無しさん mailto:sage [04/01/09 00:56]
名前に関してしか書いてないから名前だけで決まる
と考えるなんてすごい○○○ですね。
JComponent の J はない方が美しいでしょうね。

523 名前:デフォルトの名無しさん mailto:sage [04/01/09 01:02]
>>522
> > とりあえず「API の美しさ」を定義してください。
の答えが
> 何とかかんとか2 とか 何とかかんとかEx
> みたいなクラス名, メソッド名があるのは美しくないですね。
> 意味不明な略語が使われてるのも美しくないですね。
だったら、それが全てと解釈されても仕方ない。
他にも条件があるような事も全く書いてないし。

524 名前:デフォルトの名無しさん mailto:sage [04/01/09 01:08]
>>515
アリ。俺そんなの作って公開してるから探してみな

APIの課題になってるけど
JavaAPIについて

boolean型の戻り値を持ってるメソッドの、isXXXXX / getXXXXXXはどういうきり分けになっているのだろう?って思う、どちらかに統一してくれれば良いのに、、と思うけど
あと、.length()、.getLength()、.size()も統一して欲しい
あと、.size()とかって、ゲッターでしょ?getSize()にすべきなのではないか?と思うけど

反論求む



525 名前:デフォルトの名無しさん mailto:sage [04/01/09 01:18]
>>524
Swing に関して言えば、そこそこ統一されてると思うが。

526 名前:デフォルトの名無しさん mailto:sage [04/01/09 01:19]
Jなんとかって汚過ぎ。何のためのpackageなのか分からん。

527 名前:デフォルトの名無しさん mailto:sage [04/01/09 01:20]
>>524
immutableかどうかで変わるとかJava厨が言ってた。
オレは納得してないがな。

528 名前:デフォルトの名無しさん mailto:sage [04/01/09 01:44]
>>527
そう?.getLength()、.size()があるあたりimmutableかどうかで命名されているとは考えにくいのだけど
ちょっと調べてみよ

Jなんとかはいいでしょう
packageはネームスペースの意味もあるけどクラスライブラリの分類/整理が主目的だと思うよ
パッケージが分かれてもクラス名なんか一致しないほうが良いと思う
AWT、Swingは共存して実装できるのだからもしJがなかったらコード醜くなると思うよ

529 名前:508 mailto:sage [04/01/09 02:54]
>>510  すいません、問題はclassの抜け落ちでした。。。。

ところで、サーブレットで開くという表現を使ったのですが
どんな言い方をすればよかったのでしょうか。。。スレ違いですね、ありがとうございました。

530 名前:デフォルトの名無しさん mailto:sage [04/01/09 03:05]
>>508のは「普通に開く」といっても、
>>508のいう「普通」ってどういうことを想定して「普通」と言っているかもわからないし。
「サーブレットで開く」もよくわからないし。

でも、そんな>>508の書き込みでも、
APIの美しさについてのどうでもいいような話よりは、
まだ有意義かもしれないとおもったよ。

言葉の正確さはともかくとして、>>510
>サーブレットで開くというのは
>localhost〜/servlet/MondaiL4 
>と言う感じにサーブレット通して開こうとすることを思って書きました。
で、だいたい言わんとするとは理解できたよ。

つーか、なんでSwingスレで、質問しようとおもんたんだい?

531 名前:デフォルトの名無しさん mailto:sage [04/01/09 03:06]
もしSwingを使ったアプレットなら、そっちの話でもしてみないかい。
なんか解らんことがあったら、解る範囲で答えるよ。

532 名前:508 mailto:sage [04/01/09 03:15]
では、お言葉に甘えて
ttp://cgi.io-websight.com/index2/uploarder/img/hare7301.bin
これが、アプレットなんですが
Appletを継承しています。
JAppletを継承して初めは作っていたのですが、見つけたソースがAppletだったため
Appletになってしまいました、これはAwtと言う奴で、Swingとは違うのでしょうか?
その辺が良くわからず、困惑しています。変な質問すいません

JAppletに戻すにはどうしたら良いかとやってみたのですが出来なかったもので
もしよろしければ、教えていただけると幸いです。

533 名前:デフォルトの名無しさん mailto:sage [04/01/09 04:01]
SwingとAWTは別物だよ。

あと基本的なこととして、
WindowsのIEがデフォルトで使用するマイクロソフトのJavaVMでは、
Swingが使えない。

Swingを使用するためには、Sunなどが提供している最近のJavaVMを
クライアント側がインストールしておく必要がある。

ただWindowsマシンでも、
東芝やDellのマシンでは、もしかしたらデフォルトでSwingが使えるかもしれないけどね。

そんなわけで、現状ではAWTのほうが、
より多くの人がそのままで利用できるアプレットにはなるとおもうけれど。
まあ、それでもSwingでアプレットを作ってみたいなのなら、
ここが参考になると思うよ。英文だけど、断片的なソースの所は理解できるだろうから。
java.sun.com/docs/books/tutorial/uiswing/converting/how.html
How to Convert

534 名前:デフォルトの名無しさん mailto:sage [04/01/09 04:34]
ああいま中身をみたけどこれならSwingでも問題なさそうだね。
とりあえず、 extends Applet を、extends JAppletに。



535 名前:508 mailto:sage [04/01/09 04:46]
>>534 JApplet にすると動かなくなりました。

あと、今困っていることが増えまして
ソースの
MyCellRenderer_Aと↓にあるコピー&ペーストを一緒に使いたいのですが
@ ttp://www.javaworld.com/javaworld/javatips/jw-javatip77.html

@を使おうとすると、MyCellRenderer_Aで設定したことが消えてしまいます。
これは、競合??してるからなのでしょうか、これから勉強してみますが
もし、すぐわかることでしたら、教えていただけると幸いです。

536 名前:デフォルトの名無しさん mailto:sage [04/01/09 04:59]
>>535
だからよー。そのJavaPluginはSwingに対応してるのかい?

537 名前:508 mailto:sage [04/01/09 05:21]
一応使えると思います
@もMyCellRender_Aもバラバラには使えるので

両方同時に使おうとすると@の方だけになってしまうので、今困ってます


538 名前:デフォルトの名無しさん mailto:sage [04/01/09 05:38]
www3.starcat.ne.jp/~ura228/java/work1/Applet1.java
元にしたのはこれか

>>535
どこが動かない?

539 名前:508 mailto:sage [04/01/09 05:57]
そうです
1:テーブルのヘッダーの撤去と列番号の入力

上記@のコピー&ペーストの実装を同時に行おうとすると、
列番号など表示されず
さらに、@の機能まで、縮小されてしまいます
(範囲内でペースト可能なのが、選択1セルに対してのみペーストするようになってしまいます)

両方の機能を同時に使いたいのですが、どこを直したら良いのかわからず困っています


540 名前:デフォルトの名無しさん [04/01/09 15:24]
凄くお馬鹿な質問なんですが、出来なかったので質問させてもらいます。

アプリケーションとして作ったものをアプレットにするにはどうしたらよいのでしょうか
アプリケーションはJFrameを継承しています
アプレットはAppletを継承しないとできませんよね、、、

どうやって、機能を移したら良いのかわからず、何でわからないのかすらわかっていない自分、、ダメすぎでした。。。

541 名前:デフォルトの名無しさん mailto:sage [04/01/09 15:28]
>>540
JFrameを使うアプレットにすればいいじゃん。

542 名前:デフォルトの名無しさん mailto:sage [04/01/09 15:40]
あぁーあ、質問スレになってしまった。

543 名前:デフォルトの名無しさん [04/01/09 15:43]
【クレジットカードのショッピング枠を現金化!】

クレジットカードで買い物をすると、商品代金の80〜90%のキャッシュバック!!
10万円の買い物をすれば8〜9万円の現金がお手元に!!

■■朝日カード■■
www2.pekori.to/~ryu/asahi/


544 名前:デフォルトの名無しさん [04/01/09 19:17]
>>520=522
美しさの例として、よりにもよって最初に挙げたのが名前だった君の言葉じゃ説得力なし。



545 名前:デフォルトの名無しさん mailto:sage [04/01/09 20:01]
>>544
ほんきのあふぉ?

546 名前:デフォルトの名無しさん mailto:sage [04/01/09 20:25]
>>545
必死だな。これだから「Java厨は…」って言われるんだよ。

547 名前:デフォルトの名無しさん [04/01/09 20:44]

  ま  た  J  a  v  a  厨  か  !  !  

半可通の分際で「美しさ」とか言うから、墓穴を掘るんだよ。

548 名前:デフォルトの名無しさん mailto:sage [04/01/09 20:56]
>>546-547
ヒッシダネ

549 名前:デフォルトの名無しさん mailto:sage [04/01/09 21:12]
>>547
死滅スレで好きなだけやってくれ。
pc2.2ch.net/test/read.cgi/tech/1047748598/


550 名前:デフォルトの名無しさん mailto:sage [04/01/09 21:20]
>>533
このまえ hp のパソコンかったら、プリインストールの Windows に
JRE1.4.2_01 がすでにインストールされていました。
各メーカーがこういう取り組みをしてくれると、開発者としてうれしいなぁ。

551 名前:デフォルトの名無しさん mailto:sage [04/01/09 21:23]
>>550
このまえ富士通のパソコンかったら、プリインストールの Windows に
.NET Framework 1.1 がすでにインストールされていました。
各メーカーがこういう取り組みをしてくれると、開発者としてうれしいなぁ。

552 名前:デフォルトの名無しさん mailto:sage [04/01/09 22:25]
>>551
単に富士通の糞ランチャーなどの独自アプリが使ってるからでは?

553 名前:デフォルトの名無しさん mailto:sage [04/01/09 22:32]
>>552
Office 2003 PersonalのHomeStyle+が.NETを使ってるから、
Office 2003 Personalプレインスコのマシンにはメーカー問わず入ってる。

554 名前:デフォルトの名無しさん mailto:sage [04/01/10 00:00]
>>552
.netとは直接関係ないが、今現在のOSにはVBランタイム 6.0, 5.0はデフォルトで
入っているのと同じ感覚なのだろう。

4.0や、3.0,2.0はさすがにランタイムが入っていないが



555 名前:デフォルトの名無しさん mailto:sage [04/01/10 01:23]
>>554
今現在のOS? Windows だよね。Linuxとかにも .net ランタイムが
入ってるのか?

556 名前:デフォルトの名無しさん mailto:sage [04/01/10 01:25]
そんなんだから「Java厨必死だな」といわれるわけだ。

557 名前:デフォルトの名無しさん mailto:sage [04/01/10 01:43]
そろそろSwingの話を……

>>492や俺のような基本中の基本も理解していないレベルのやつのために
シングルスレッドルールや、その意味合いなどを。

558 名前:デフォルトの名無しさん mailto:sage [04/01/10 01:54]
結城氏のJavaデザインパターンマルチスレッド編とかいう本を読むとよくわかるよ

559 名前:492 mailto:sage [04/01/10 02:28]
>>557
たのむ教えてくれ

>>558
読むのめんどくさいから教えてくれ

560 名前:デフォルトの名無しさん mailto:sage [04/01/10 02:51]
そういえば、イベントディスパッチスレッド以外から、Swingコンポーネントをいじくろうとすると、
イベントディスパッチスレッドがデッドロックを起こすことってありますかね?

むかし、訳もわからないままJTableをいじってて、
GUIが完全に固まったことがあったんですが。

もうそのときのソースは学校のハードディスクの中なので確認はできませんが、
ほかのスレッドは、コンソールにメッセージを出し続けていたようだから。
今にして思えば、JTableなどのSwingコンポーネントのメソッドを
イベントディスパッチスレッド以外から呼び出して、
デッドロックを起こしたと解釈すれば納得が。

561 名前:デフォルトの名無しさん mailto:sage [04/01/10 03:39]
>>559
教えてもらう側なのにえらそうだな。死んでいいよ。

562 名前:デフォルトの名無しさん mailto:sage [04/01/10 04:30]
>>561
教える側なのにえらそうだな。

563 名前:デフォルトの名無しさん mailto:sage [04/01/10 04:37]
まずスレッドに対する一般的な知識として、ここを。
www-6.ibm.com/jp/developerworks/java/010427/j_j-thread.html
dW : Java technology : マルチスレッド化Javaアプリケーションの作成

Swingにおける具体的な例としてはこのサイトが、例も短くて理解しやすい。
black.sakura.ne.jp/~third/system/java/swing4.html
Swing とスレッド

英語ならここが短くまとめられている。
www.math.cuhk.edu.hk/TechInfo/JavaTutorial-2/ui/swing/threads.html
Threads and Swing
ここの三つの記事などを一通り読むのも。
java.sun.com/products/jfc/tsc/articles/threads/threads3.html
The Last Word in Swing Threads
Swing自体についてはここも。
java.sun.com/products/jfc/tsc/articles/painting/
Painting in AWT and Swing

>>560
ソースを見ないと正確なことは言えないが、有り得る。

564 名前:デフォルトの名無しさん [04/01/10 05:01]
Javaのレイアウトって使えないよね



565 名前:デフォルトの名無しさん mailto:sage [04/01/10 05:29]
>>557-560
シングルスレッドルールといっても、
Javaチュートリアルのページにもあるようにそれほど恐ろしいものではないよ。
普通にイベントハンドラに、処理を書いておく限りにおいては、
>>560のようにデッドロックを引き起こすことはまずないし。

もちろん長時間かかる処理を行わせれば、処理が終わるまでGUIは固まるが。


マルチスレッドなシステムによる描画なら、MVCの構成が参考になるかもしれない。
システムをMとVCに区分けして、画面の描画はpaintComponent()メソッドにのみ置く。
paintComponent()メソッドは、モデルのデータを読みとって画面に描画する。

イベントディスパッチスレッド以外のスレッドは、
モデルのデータをいじっても、ビューに対する描画は行わないようにする。
スレッドが、モデルのデータをいじったあとは、
repaint()などの、どのスレッドから呼び出してもかまわないメソッドのみを呼び出し、
イベントディスパッチスレッドにpaintComponent()メソッドを呼び出させてビューを更新する。

566 名前:デフォルトの名無しさん mailto:sage [04/01/10 05:35]
>>564
そう?
使えないって、使い方がわからないだけ?

567 名前:デフォルトの名無しさん mailto:sage [04/01/10 12:40]
>>540
JFrameの部分をJAppletに変えればいいじゃん。

568 名前:デフォルトの名無しさん mailto:sage [04/01/10 13:08]
>>564
>Javaのレイアウト

満足行くようにしたかったら自作せよ。そんなに難しくない。
それかSpringLayoutを使いこなせ。
それ以外のレイアウトをそのまま使う奴は素人。
nullを指定するやつはド素人。


569 名前:デフォルトの名無しさん mailto:sage [04/01/10 14:00]
>>568
漏れにとっては、GridBagLayoutのほうが使いやすい。
SpringLayoutは良く分からん。


570 名前:デフォルトの名無しさん mailto:sage [04/01/10 14:29]
そこでNetBeansですよ

571 名前:492 mailto:sage [04/01/13 01:25]
EmptyBorderを簡略化するとレイアウトしやすいよ、
俺はEmptyBorderDecoratorを作ってレイアウトしてる。
↓こんな感じ、どう?
// 空白の枠を「5」にして、ボタンを配置
getContentPane().add(
  new EmptyBorderDecorator(new JButton("ボタン"), 5));



572 名前:デフォルトの名無しさん mailto:sage [04/01/13 17:01]
>>563-565
ありがとうございます。
563の二つ目の例をMVCのやり方で書くとこんな感じでいいんでしょうか。
もちろん複数回のrepaintは、ときには一回だけしか実際にはpaintされないとして。

public class Test extends JFrame implements Runnable {
public static void main(String args[]) {
JFrame frame = new Test();
frame.setBounds(10 , 10 , 400 , 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}

private int color;
public Test() { new Thread(this).start(); }
public void run() {
while(true) {
color += 0x050505;
if (color == 0xFFFFFF) color = 0;
Thread.sleep(100);
repaint();
}
}
public void paint(Graphics g) {
setForeground(new Color(color));
g.fillRect(0 , 0 , getWidth() , getHeight());
}
}

573 名前:デフォルトの名無しさん mailto:sage [04/01/16 18:29]
SwingのMac用ルック&フィールって、もうダウンロードできないんでしょうか。
このページには、

>A Mac L&F for Macintosh systems is also available, as a separate download from
>the Java Developer Connection Web site.

(Macintosh systems用のMac L&Fもまた利用可能です。
(Swing toolkit packageなどとは)別に
Java Developer Connection Web siteからダウンロードできます)

とあるのですが。

Getting Started with Swing
java.sun.com/products/jfc/tsc/articles/getting_started/index.html

574 名前:デフォルトの名無しさん [04/01/16 19:02]
Mac用L&Fは、Macでしか動かない罠。



575 名前:デフォルトの名無しさん mailto:sage [04/01/16 19:20]
>>574
そういうローカルルールのような物をゆるすから、めちゃくちゃになって
ゆくんだよ

576 名前:デフォルトの名無しさん mailto:sage [04/01/16 19:26]
>>573
Apple の行動から察するに、
Mac 用 LookAndFeel は Apple の知的財産なので(以下略)
と言われた、とか言われて訴訟沙汰になるのを Sun が恐れたのでは、と推測。






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

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

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