- 1 名前:デフォルトの名無しさん [03/08/31 04:24]
- そんなSwingとやっていくみんなのスレッドです。
- 398 名前:デフォルトの名無しさん mailto:sage [04/01/02 23:10]
- >>397
普通に編集されたテキストが出力されるけど? どんな環境で使ってるのかな。
- 399 名前:397 mailto:sage [04/01/03 01:59]
- >>398
Red Hat Linux 9です。 java -version java version "1.4.2_01" もう一つ分からないことがあります。 button.addActionListener(this); この行を box.addActionListener(this); に変えて実行し、hogeを編集してからリターンを押すと編集したテ キストが2回表示されます。編集しずに押すと一回だけ表示されま す。 しかも編集したときは、なぜかボタンを押してもテキストが2回表示 されます。
- 400 名前: mailto:sage [04/01/03 04:14]
- >>399
自分も398と同じく普通に編集されたテキストが出力される。 OSはWindowsだけど。LinuxのVMがおかしいのかな? 399の方は自分も躓いた。自分もSwing勉強して間もないので間違いもあるかも知れんが www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7943&forum=12&4 でも話題になってる。 コンボボックスが発生させるアクションイベントは実は2種類に細分化できて comboBoxChangedとcomboBoxEditedがあるみたい。 actionPerformedの引数として渡されるActionEventオブジェクトのgetActionCommand()で区別できるみたい。 選択項目が変化するとcomboBoxChangedのほうが、リターンキーを押すとcomboBoxEditedの方が来る。 編集してリターンキーを押すと選択項目も変化するから2回アクションイベントが発生する。 またコンボボックスを編集可能にして編集して項目書き換えると、 コンボボックスがフォーカスを失うときに、選択項目が変化したとみなされcomboBoxChangedが発生する。 だからボタンを押すとコンボボックスがフォーカス失ったので選択項目変化のためと、ボタンが押されたことによるアクションイベントの両方が起きる。
- 401 名前:400 mailto:sage [04/01/03 04:59]
- で何故397のようなことが起こりうるのかについての推測だけど
編集可能なコンボボックスのテキストを編集しても 編集してる最中にはたくさん文字が入力されたりして変化してるから 選択項目が変化したとコンボボックスが判断するのはリターンキーを押されたかフォーカスを失った時になって初めてである。 だから397さんの環境だと、コンボボックスを編集した後ボタンを押すと ボタンのアクションイベントの処理がまず最初になされ その後になってコンボボックスのフォーカス喪失の処理がなされて 選択項目の更新がなされるようになってるのかな。 自分のWindowだとボタンを押せばその前にコンボボックスのフォーカスが失われたことによる選択項目の更新がまずなされ、 その後ボタンのアクションイベントの処理が行われるからうまくいく。 見当外れだったらすまそ。 コンボボックスとボタンの両方にアクションリスナーを登録してactionPerformedの中で イベントオブジェクトのgetSourceかgetActionCommand()でどっちが先に呼ばれてるか調べてみたら。 ボタンの方が先に呼ばれてたら推測があってるかも。 でも常識的にフォーカス失ったほうの処理の方が先だよな。
- 402 名前:399 mailto:sage [04/01/03 13:00]
- わかりやすい説明ありがとうございます。
>>399の編集した後リターンを押すと2回表示されるのは comboBoxChangedとcomboBoxEditedによるものでした。また、ボタ ンを押したときも同じイベントが発生していました。Tabキーでコ ンボボックスのフォーカスをはずすだけでも同じイベントが発生し ました。 buttonとboxの両方にアクションリスナーを登録してどのイベント が発生しているのかを確認したところ、button、comboBoxChanged 、comboBoxEditedの順で発生していました。buttonのイベントのと きはbox.getSelectedItem()で得られるテキストは編集前の状態で 、boxのイベントのときは編集後の状態でした。
- 403 名前:デフォルトの名無しさん mailto:sage [04/01/03 13:32]
- >>402
編集したらコンボボックスがフォーカスを失うだけでcomboBoxChangedとcomboBoxEditedの両方発生したね。 間違ったこと書いてゴメン。 あと自分のWindowsではやっぱりボタンにアクションリスナー登録しても コンボボックスのイベントの方が先に処理されてました。 LinuxとWindowsじゃ違うみたいだね。 解決策はあまりいい方法は思いつきませんでした。上にあげた www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7943&forum=12&4 が参考になるかも。
- 404 名前:デフォルトの名無しさん mailto:sage [04/01/04 11:54]
- もう済んだ話かもしれないけど、
RedHat9 + Java 1.4.2_03 では、>>397 のようにはならず、>>398 のようになったよ。
- 405 名前:デフォルトの名無しさん [04/01/04 14:04]
- 結論:Javaを使うならやっぱりWindows環境がイイ!
- 406 名前:デフォルトの名無しさん [04/01/04 14:06]
- そしたらJava使う意味ないじゃn
- 407 名前:デフォルトの名無しさん [04/01/04 14:25]
- 低速なのにどうして使うの?
- 408 名前:デフォルトの名無しさん mailto:sage [04/01/04 14:25]
- Javaって、Windowsで使うと意味無いんですか?
ショック。
- 409 名前:デフォルトの名無しさん mailto:sage [04/01/04 14:28]
- Windowsで使うことに意味がないわけではないが
"Windowsだけ"で使うんだったら意味は半減するわな。
- 410 名前:デフォルトの名無しさん mailto:sage [04/01/04 14:31]
- >>407
基地外だから
- 411 名前:デフォルトの名無しさん [04/01/04 14:32]
- >>409
なんの意味が半減するの?
- 412 名前:デフォルトの名無しさん mailto:sage [04/01/04 14:43]
- Javaって、Windows以外で使うと意味が倍増するんですか?
すごーい。 Javaやってみようかなー。
- 413 名前:デフォルトの名無しさん mailto:sage [04/01/04 14:47]
- 馬鹿の集まりだな
JavaのバイトコードはJavaVMがあればWindowsでもLinuxでもSolarisでもそのまま動くということも知らずに Javaスレに来るとは
- 414 名前:デフォルトの名無しさん mailto:sage [04/01/04 14:51]
- >413
師匠!師匠と呼ばせてください。
- 415 名前:デフォルトの名無しさん [04/01/04 14:56]
- >>413
意味が半減する理由にはなっていないと思うが? ケースバイケースという言葉を知らないの?
- 416 名前:デフォルトの名無しさん mailto:ハゲ同sage [04/01/04 14:59]
- >>415
師匠に理屈を言ってはいけません。
- 417 名前:デフォルトの名無しさん [04/01/04 16:01]
- >>387
つまりXAWTがSwingを死滅させるということでFA?
- 418 名前:デフォルトの名無しさん mailto:sage [04/01/04 16:14]
- Windows上でGUIをやる場合Javaに比べて
VBの方が圧倒的に簡単に作れる。 VCの方が圧倒的に自由度が高い。 だからWindows上だけでGUIを作る場合 Javaを積極的に選択する理由がない。 よって複数プラットフォームを視野に入れてJavaでGUIをやる意味に比べたら Windows上だけでJavaでGUIをやる意味は減っている。
- 419 名前:デフォルトの名無しさん mailto:sage [04/01/04 16:33]
- >>418
Javaをやるのは理屈じゃねーんだよボケ
- 420 名前:デフォルトの名無しさん mailto:sage [04/01/04 16:36]
- 信じるものは救われる
- 421 名前:デフォルトの名無しさん [04/01/04 18:47]
- >だからWindows上だけでGUIを作る場合
>Javaを積極的に選択する理由がない。 JTableをVCやVBでやろうとするとそれはそれは大変な道程となる訳で。 文化オリエントの製品を別途購入しVCだと更にCOMの奥義を極めるのが普通、 というまさに茨の道。
- 422 名前:デフォルトの名無しさん [04/01/05 00:41]
- 作り手にとってよいというのはあるだろうさ。
でもSwingで作ってあるアプリはなんかがっかりなんだよね、ユーザーとしては。
- 423 名前:デフォルトの名無しさん [04/01/05 02:16]
- Linuxで日本語フォントがガタガタなんですが
どうにかなりませんか?1.4です。
- 424 名前:デフォルトの名無しさん mailto:sage [04/01/05 02:23]
- 1.5のSwingはかなりいい感じだが。
もっと早くやってくれよという。
- 425 名前:名無しさん [04/01/05 02:30]
- >>3
- 426 名前:デフォルトの名無しさん mailto:sage [04/01/05 02:31]
- Javaって相変わらずGUIが枯れてないんですねぇ…。
J#に走ろうかと考えてますがやっぱりあれですか?
- 427 名前: mailto:sage [04/01/05 02:50]
- JTextAreaの重さには愕然とした。
たいした事の無い量のテキストでスクロールが明らかに重い。 Swingで使える軽い奴ないかな。
- 428 名前:デフォルトの名無しさん mailto:sage [04/01/05 03:36]
- >>427
残念ながらあなたの要望にJavaはついてこれません・・ JTextAreaのスクロールが重い・・とは思った事ないなぁ・・
- 429 名前:デフォルトの名無しさん mailto:sage [04/01/05 04:31]
- >>428
そもそも、JTextAreaにスクロール機能なんて無い。 重いとかいってるのは、スクロール量が小さすぎるからだろう から、自分で調整しろ。てか、API Doc読め。 JScrollPane scroll = new JScrollPane(new JTextArea()); scroll.getVerticalScrollBar().setUnitIncrement(25);
- 430 名前:427 mailto:sage [04/01/05 05:18]
- _| ̄|○ >>428 >>429
- 431 名前:デフォルトの名無しさん mailto:sage [04/01/05 21:13]
- >>418
VBのほうが簡単ってありゃオブジェクト指向言語としては最低だよ。 VBもVC++もソースコードの管理のしやすさ、メンテナンス性では Javaに劣る。
- 432 名前:デフォルトの名無しさん mailto:sage [04/01/05 21:15]
- >>422
マシンパワーが2GHz以上、メモリ1GB以上あれば Swingで作ってあろうと満足に動く。 しかも最近のSwingアプリはルックスが綺麗だ。
- 433 名前:デフォルトの名無しさん mailto:sage [04/01/05 22:04]
- >>432
「最近」=1.5というのなら同感
- 434 名前:デフォルトの名無しさん [04/01/05 23:18]
- >>431
オブジェクト指向は手段であり、目的ではなく、ましてや何かを比較する尺度では無い訳で。
- 435 名前:デフォルトの名無しさん mailto:sage [04/01/05 23:23]
- Javaはすべて、Swingがぶちこわしたと言っても過言じゃないと思う。
なんで、標準的でもっとシンプルでかるいtoolkitにしなかったのか
- 436 名前:デフォルトの名無しさん mailto:sage [04/01/05 23:24]
- >>435
使い勝手は悪くても、作り勝手はいいんだよなぁ。
- 437 名前:【中吉】 [04/01/05 23:28]
- 1 名前:ひろゆき@どうやら管理人★ 投稿日:03/07/04 21:40 ID:???
おみくじ機能を搭載しました。 名前欄にomikujifusianasanといれて書き込むと、 【大吉】【中吉】などに変換されますです。。。
- 438 名前:デフォルトの名無しさん mailto:sage [04/01/06 00:35]
- >>435
「なんで軽いtoolkitにしなかったのか」というのはわからんでもないが Swingより標準的でシンプルなtoolkitってなんだ? >>436の言うとおりなのだが、PCの性能がついてくればSwingのつかいごこちもじょじょによくなっていくのだろう(今のPCではSwingの豪快な機能拡張に絶えられない) それが>>435の回答だと思うのだが
- 439 名前:デフォルトの名無しさん [04/01/06 01:23]
- 昔に比べるとSwing自体もかなり軽くなったって言われてるが、
実際に昔のPCで今のSwing動かすとどうなの? もう手元にそんなPC残ってないもんで、わからないんだけど。
- 440 名前:デフォルトの名無しさん mailto:sage [04/01/06 01:34]
- PCの性能が上がれば云々ってJava出た当初からずーっと言ってるよ。
その間PCの性能が一切上がってないとでも?
- 441 名前:デフォルトの名無しさん mailto:sage [04/01/06 02:00]
- もうちょっとなんだよなぁ。
2GHz512MBが当たり前になればいいのかな、と思う。 まぁ、昔ほど遅くなくなった。 1.5はVMの起動も速いし、結構使えるかも。 「使い勝手」っていったのは、IMEの制御とかクリップボード関係とか、WindowsでいえばDLLが必要になるような機能が使えないので、かゆいところに手が届かないことがあるってこと。
- 442 名前:デフォルトの名無しさん mailto:sage [04/01/06 02:00]
- 俺、別に今のPCでけっこう快適にSwing動いてるんだけど。
明らかに遅いSwingアプリって、Swingが悪いんじゃなくて書いた人間が ヘタクソってケースがよくあるよ。
- 443 名前:デフォルトの名無しさん mailto:sage [04/01/06 04:16]
- ちょっとヘタクソなコード書いたくらいで、パフォーマンスに大きく影響がでるのも、Swingの良くないところだな。
- 444 名前:デフォルトの名無しさん mailto:sage [04/01/06 07:40]
- >>442-443
だよねえ。Java質問スレのほうでも シングルディスパッチスレッドとか、そのあたりについて質問していた人がいたようで。 それは逆を言えばSwingって簡単に使えるから、よく原理を分かっていなくても、 どうにか動くものが作れてしまうってことでもあるんだけど。 【初心者】Java質問・相談スレ38【大歓迎】 pc2.2ch.net/test/read.cgi/tech/1071613279/867-869n
- 445 名前:デフォルトの名無しさん mailto:sage [04/01/06 09:54]
- > ちょっとヘタクソなコード書いたくらいで、パフォーマンスに大きく影響がでるのも、Swingの良くないところだな。
ちょっと乱暴な運転したぐらいで、人を殺せてしまうのも、自動車の良くないところですね。 キミはプログラム書かないほうが幸せだと思われ。
- 446 名前:443 mailto:sage [04/01/06 10:11]
- >>445
ん? VBとかVCLとかだと、ヘタクソなコードでパフォーマンスに大きく影響が出たりしないからな。 小回りは効かないけどな。 445の言い方をすればちょっと乱暴な運転しただけで人を殺せる車は良くないということだな。 普通の車なら、ちょっと乱暴な運転しただけでは人を殺せないからな。 なんなら、そこらへんの車で乱暴な運転してみ。あんたの腕では暴れもしないから。 もちろん、車というものは人を殺そうとして運転すれば人を殺せる。 # 日本車でちょっと乱暴な運転で暴れるのは前期SW20か。
- 447 名前:デフォルトの名無しさん mailto:sage [04/01/06 12:38]
- >>445←こういうのが俗に言うJava厨の慣れの果て
- 448 名前:デフォルトの名無しさん mailto:sage [04/01/06 14:30]
- Swing のシングルスレッド規則なんか、そうしないと使いもんにならない
くらい遅かったから後付けしたんだろ。JComponent#setText とかは 「このメソッドはスレッドセーフですが、〜」って中途半端なんだよ。 とかよく知らずに言ってみる。
- 449 名前:デフォルトの名無しさん mailto:sage [04/01/06 15:10]
- > そうしないと使いもんにならないくらい遅かったから後付けしたんだろ。
イベントディスパッチスレッドで重い処理すれば止まるのは Windows も同じ。
- 450 名前:デフォルトの名無しさん mailto:sage [04/01/06 17:23]
- >>446
> VBとかVCLとかだと、ヘタクソなコードでパフォーマンスに大きく影響が出たりしないからな。 例えば BCB で OnMouseMove 内に while(true); だけ書いておけば即死すると思うが。 > 445の言い方をすればちょっと乱暴な運転しただけで人を殺せる車は良くないということだな。 書き方が悪かったか? まぁその部分は枝葉だし 「ちょっと余所見したぐらいで、人を殺せてしまうのも、自動車の良くないところですね」 「ちょっと巻き込み確認を怠ったぐらいで、人を殺せてしまうのも、自動車の良くないところですね」 でも何でも良いわけだが。
- 451 名前:デフォルトの名無しさん mailto:sage [04/01/06 18:42]
- >>450
> 例えば BCB で OnMouseMove 内に while(true); だけ書いておけば即死すると思うが。 明らかに殺意あり。密必の恋。
- 452 名前:443 mailto:sage [04/01/06 18:48]
- >>450
そのたとえに、やっちゃいけないことやったらよくない結果になる、という以上の意味はあるのか? っていうか、お前はちょっと余所見したくらいで人殺してしまうくらい殺伐とした道路事情の場所に住んでるのか? そこは中国か?勇気がないと道路渡れんようなところか? まぁ、発言するたびにバカ晒してる感じだから、そろそろやめとけ。
- 453 名前:デフォルトの名無しさん mailto:sage [04/01/06 18:57]
- >>451
> 明らかに殺意あり。密必の恋。 単に > > ヘタクソなコードでパフォーマンスに大きく影響が出たりしないからな。 が間違いだって例をだしただけ。
- 454 名前:デフォルトの名無しさん mailto:sage [04/01/06 19:01]
- >>453
while(true);が「下手糞な」コードだ、と?
- 455 名前:443 mailto:sage [04/01/06 19:04]
- >>453
で、その例が、適切でないという指摘をうけたわけだな。 Swingの場合、コーディングの自由度が高いから、安易に組むと、最適に組んだときとのパフォーマンスの差が大きいという話をしてるわけだろ。 VCLの場合、コーディングの自由度が低いから、差はでにくい、と。VBよりは自由度あるけど。 VCLでもコーディング次第でパフォーマンスを落とせるとか、そういう話じゃないだろ。
- 456 名前:デフォルトの名無しさん mailto:sage [04/01/06 19:05]
- >>452
> そのたとえに、やっちゃいけないことやったらよくない結果になる、という以上の意味はあるのか? 無い。 > っていうか、お前はちょっと余所見したくらいで人殺してしまうくらい殺伐とした道路事情の場所に住んでるのか? 仮に、脇見運転で人を殺したら道路事情のせいにするのか? > そこは中国か?勇気がないと道路渡れんようなところか? 例え話にそんなツッコミされても… 中国行ったこと無いし。
- 457 名前:デフォルトの名無しさん mailto:sage [04/01/06 19:09]
- >>454
> while(true);が「下手糞な」コードだ、と? イベントディスパッチスレッドを止めるような事をしてはイカンのは Java も BCB も同じという例だから、while(true); でなくても別に構わないんだけどね。
- 458 名前:デフォルトの名無しさん mailto:sage [04/01/06 19:13]
- >>455
> VCLでもコーディング次第でパフォーマンスを落とせるとか、そういう話じゃないだろ。 Swing 以外でも同じようにコーディング次第でパフォーマンスが落とせるなら、 Swing が悪いわけでは無いという事になりますが…
- 459 名前:443 mailto:sage [04/01/06 19:15]
- > 仮に、脇見運転で人を殺したら道路事情のせいにするのか?
するわけないだろ。 歩行者もバカじゃないし、普通の速度でちょっとくらい脇見しても、死ぬようなタイミングで突っ込んできたりはせんよ。 普通車で自転車まきこんでも、よほど壁にはさんだりしない限り、死ぬようなこともないし。 だからといって、脇見や巻き込み確認をしなくてもいいわけじゃないよ。 たとえが適当じゃない、っていいたいだけ。
- 460 名前:443 mailto:sage [04/01/06 19:16]
- >>458
その直前の文章くらい、読んでくれ。
- 461 名前:デフォルトの名無しさん mailto:sage [04/01/06 19:18]
- >>459
> > 仮に、脇見運転で人を殺したら道路事情のせいにするのか? > > するわけないだろ。 普通はそうだよね。 プログラム組む時も同じような心構えなら > ちょっとヘタクソなコード書いたくらいで、パフォーマンスに大きく影響がでるのも、Swingの良くないところだな。 とか言わんと思うんだが。
- 462 名前:デフォルトの名無しさん mailto:sage [04/01/06 19:22]
- >>460
> ちょっとヘタクソなコード書いたくらいで、パフォーマンスに大きく影響がでるのも、Swingの良くないところだな。 > VBとかVCLとかだと、ヘタクソなコードでパフォーマンスに大きく影響が出たりしないからな。 とかゆー発言から、 「Swing だけが、ヘタクソなコードでパフォーマンスに大きく影響が出る」 のかを問題にしてる。
- 463 名前:デフォルトの名無しさん mailto:sage [04/01/06 20:22]
- >>461
もう放置しろよ。屁理屈捏ねる粘着相手にしても切がないでしょ。
- 464 名前:デフォルトの名無しさん mailto:sage [04/01/06 20:55]
- >>463
「ちょっと下手糞に書くとSwing『だけ』パフォーマンスが『著しく低下する』」 に対する反論はしないわけ? それともできないわけ? 窮地に追い詰められた時に「屁理屈捏ねる粘着相手」と相手を蔑むことで その場から逃げようとする姿勢は情けなく思います。
- 465 名前:デフォルトの名無しさん mailto:sage [04/01/06 21:55]
- 俺Swingはヘタレなんで知らないけど
下手糞なコーディングする自分を恥じる心は無いわけ? 「うわぁい、俺実装のクイックソートはバブルソートより遅いぞ☆」 悪いのはクイックソート?下手糞な俺実装?それとも使ってる言語か?
- 466 名前:デフォルトの名無しさん mailto:sage [04/01/06 22:07]
- >>465
ワラタ そりゃー下手糞なコーティングしてるヤシが悪いだろ。 俺はSwingとか今から始める段階だから知らないんだけどさ 「ちょっと下手糞に」の「ちょっと」ってのが嫌だナァ。 言葉だと面倒だから良いコーティングと悪いコーティングのソースキボン
- 467 名前:デフォルトの名無しさん mailto:sage [04/01/06 22:13]
- >>465
> 下手糞なコーディングする自分を恥じる心は無いわけ? そりゃ恥じるべきだよ。 > ちょっとヘタクソなコード書いたくらいで、パフォーマンスに大きく影響がでるのも、Swingの良くないところだな。 > VBとかVCLとかだと、ヘタクソなコードでパフォーマンスに大きく影響が出たりしないからな。 とかゆー発言から、 「Swing だけが、ヘタクソなコードでパフォーマンスに大きく影響が出る」 のかを問題にしてる。
- 468 名前:デフォルトの名無しさん mailto:sage [04/01/06 23:09]
- 具体的に、どんなヘタクソなことができるの?
- 469 名前:デフォルトの名無しさん mailto:sage [04/01/07 00:14]
- 俺Swingは趣味(?)でやってて、仕事で個人的に使うツールを作って使ってるだけなんだけど
2GHz512MBでもちょっと遅い・・と思うけどなぁ あと4倍は速くなって欲しいと思う。いつになったら8GHzの時代になることやら。。 あと、専門でやってるわけではないのでヘタレコーディングになってるかもしれない 自分では普通につくっているつもりなのだが。
- 470 名前:デフォルトの名無しさん mailto:sage [04/01/07 00:24]
- >>469
SWTスレの↓なのが気になったけどどうなんだろ? > Eclipse3.0M6からの、SWTへのSwing埋め込みを試してみた人レポートよろ
- 471 名前:デフォルトの名無しさん mailto:sage [04/01/07 01:06]
- >>470
元カキコした者です。↓が簡単な紹介になってます。 download.eclipse.org/downloads/drops/S-3.0M6-200312182000/eclipse-news-part1-M6.html 自分で評価しろやゴルァと言われそうですが、僕はSWTでしかJavaのGUI作ったことないので評価しにくいのですよ。
- 472 名前:デフォルトの名無しさん mailto:sage [04/01/07 01:30]
- >>470
dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/snippits/snippet135.html SunをEclipseコンソーシアムに引きずり込みたいIBMが 「SwingのコードもEclipseに組み込める」というために つくったものだったけど、結局無駄になったね。internal なAPIから正式なAPIになったけど、これ以上すすめる モチベーションがIBM/OTIにあるのかは疑問。
- 473 名前:デフォルトの名無しさん [04/01/07 01:53]
- とりあえず、443は何故そんなに必死なんだ?
- 474 名前:デフォルトの名無しさん mailto:sage [04/01/07 01:59]
- SWTにSwing組み込めるのは、おまけだろ
SWTはSWTで組まないと意味内
- 475 名前:デフォルトの名無しさん mailto:sage [04/01/07 07:50]
- へたくそが使っても、へんなふうにはならない部品というのは、
たしかにすごいけど、SwingやAWTにそこまで求めるのも酷のような気がする。 まあそこまで使い勝手のいいようにラップされた部品というのも、 Java以外のなにかのシステムのGUIコンポーネントには、あるのかもしれないけど。 Javaチュートリアルを日本語に訳して誰でも読めるようにしてくれれば、 固まるようなJavaのGUIアプリも、ずいぶんと数が少なくなりそうなんだが。 >>468 俺も、すごく基本的なことしかわからないけど、 まず基本的な問題として、Javaにおいては、 ボタンがクリックされときに処理をするとか、画面を描画したりするとか、 そういうGUI関連の処理をしてくれるスレッドは、ひとつしか存在しない。 ゆえに、 「ボタンをクリックしたら10秒くらいの時間がかかる処理をはじめる」 とか、そんなソフトをなんの考えもなしにつくったら、 そのボタンをクリックしたら最後、10秒くらいGUIが固まっちゃうのさね。 これを固まらないように作るとすれば、 別のスレッドを用意して、10秒くらい時間のかかる処理は、 その別スレッドにまかせてしまうという感じ。 SwingWorkerクラスとか色々あるので、まじおすすめ。
- 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でもまだまだ汚なさは残っているようだ。
|

|