1 :
デフォルトの名無しさん :
04/09/17 14:29:09
いらね。SwingはJavaスレで。SWTはSWTスレで。
私、人の話を聞かない
>>1 みたいな人って嫌いです。
Ruby <<<<<<<<>>>>>>>>>>>>>>>>>>>Swing
Ruby <<<<<<<< AWT >>>>>>>>>>>>>>>>>>> Swing
Ruby <<<<<<<< (^^) >>>>>>>>>>>>>>>>>>> Swing
StrutsもTomcatもSpringも、Javaスレで。 C#も起源はJavaなんだから、Javaスレで。 .NETもJavaのパクリなんだから、Javaスレで。 デザインパターンもJavaで広まったんだから、Javaスレで。 プロ野球の合併問題も、Javaなら解決してたんだからJavaスレで。
つーかjavaスレ多すぎ おまえらム板のjavaスレ数えたことあるか?
15 :
デフォルトの名無しさん :04/09/18 04:25:21
16 :
デフォルトの名無しさん :04/09/18 04:25:49
17 :
デフォルトの名無しさん :04/09/18 04:26:51
で?
結論 Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>..Jab d
乙。 同じように.NET系についてもまとめよろ。
21 :
デフォルトの名無しさん :04/09/18 04:51:10
だからなに?
どうせなら名メ本にしろよハゲ
このスレでは、 .NET や Ruby はスレ違いなんだが、それと同様に、 Java3D も JAI も JMF も同じくスレ違いなんだよなあ。 誰かついでに、 Java クライアントサイドスレッドもきぼんぬ。 立ててくれるんなら、関連サイトあつめてくるよー。
26 :
デフォルトの名無しさん :04/09/18 09:41:56
JMFなんて死んだシロモノ、使ってる香具師が居るのか?
ぅるるるるるるぅううぅうううううびぃいいぃぃぃぃぃぃぃぃぃぃ
28 :
デフォルトの名無しさん :04/09/18 11:56:37
JMFってWMVってよめる?
男はだまってQuickTime for Java。
JMFってCODECは固定なのだろうか…? 固定なんだろうなぁ…。
>>30 機構的には固定じゃない。
alphaworksあたりからMPEG4周りで出てた気もするが
それ以外codecを供給しているとこを見たことがない。
コーデックはライセンスで縛られるから難しいよなぁ mp2までは標準であるがmp3がないとか・・ まぁサンプリング系はOggが普及してくれればそれでいいか
プロパティーリストボックスってないでしょうか? IDE なんかでプロパティをいじったりするアレです。
それはどういう意味だ? あれはJTableで柔軟にやってるとおもうんだが?
JTable で作っているとしても、有能な Java屋さんだったら 再利用可能なクラスとして設計するんじゃないかなー、と思って。 beans をセットすると、そのプロパティが自動で列挙・編集できる。 プロパティの型はプリミティブ型とそのラッパークラスとStringを サポートしていれば十分です。 欲を言えばプロパティが Color, Font だったら、それぞれのチューザが出るとか。 Point, Dimension, Rect などもサポートしていると感動します。
ちょっとまった、まさにjava.beans.PropertyEditorを実装したクラスを欲しいのか、 それとも自分のGUIアプリでそれっぽいコンポーネントが使えればそれでいいのかどっち?
37 :
デフォルトの名無しさん :04/09/19 00:37:35
Jakarta Commons って便利なクラス集を提供しているけど、 GUI は含まれていないんですよね…。Commons みたいな感じで 汎用 Swing コンポーネントを作ってる集団とかないですかね? デートタイムピッカーとか、カレンダーコントロールとか。
Netbeans Platformにあるんじゃないか?
>>36 自分のGUIアプリケーションにペタッと貼り付けて使いたいです。
JComponent のサブクラスで、PropertyEditor インターフェイスを
実装しているのが理想です。
IDEくらいしかそういうのはやらんし、それ以外は個別にカスタマイズして作った方が楽だしなぁ
NetBeans って IDE だけじゃなくて、それに必要となるクラス群を 整備・公開しているんですね。知りませんでした。 NetBeans Platform に PropertyPanel というそのものズバリの 部品があるようです。情報ありがとうございまいした。
>>42 公開しているけどライセンス気をつけてね。結構きついよ。
44 :
デフォルトの名無しさん :04/09/19 02:30:35
46 :
デフォルトの名無しさん :04/09/19 14:32:29
むしろ言い出しっぺの法則で・・
そんな有害無意味な法則持ち出されても。
50 :
デフォルトの名無しさん :04/09/19 18:33:03
>>49 Demoみるとなにげにプロパティ画面もついてるみたいだな
TreeTableが欲しいぞな
GUIエディタ作りたい。すげーやつ。
54 :
デフォルトの名無しさん :04/09/21 01:18:16
違うねえ。
お前ら、ホントにSwing好きだな
>>56 好きじゃあ ないですヨ
ただ Write once, run anywhere が好きなだけで・・
SWTって低レベル過ぎるし。
Write once, run anywhere って
いつもの展開になってまいりました。
遅いTableをラッパーで包んでも速くは為らない罠。
結局SWTがSwingを置き換えるレベルの水準までいってないからな
64 :
デフォルトの名無しさん :04/09/21 23:39:55
漏れは Swing 好きだ。
API も LF も好きだ。
遅いのが、ちょっとだけ嫌いだけど、最近は許容範囲だと思っている。
>>54 GUIのテキストエディタですな。
なにより、ツールがないからな。 GUIを手書きで書くのはばからし。
ところで、J2SE5RCでNativeLAF使えるの?
今のプログラマはパフォーマンスにゃうるせーからナ 「遅いんですよ このプログラム」 きまってこのセリフだ 遅いのはてめーのコードがタコいからなんだよ なんてコタあいわねーよ・・客だからナ だから素人用に内部でバリバリに最適化したライブラリを作ってやる これが大ウケだ
よっぽど失望したみたいだナ このSwingに いえ・・失望したのは自分自身にですヨ・・・・ これほどのクラスライブラリを与えられて それをプロとしてキチンと使いこなせなかった自分自身に
おもしろくねーですよ。
そういやム板に湾岸スレってなかったな。
>>71 何かそれ作者がSwingの使い方間違ってるんだってさ。
悪い見本?だから、Swingの評判を落としてるって。
Swingスレじゃないっぽいけど、ム板かマ板に書いてあった。
ありゃりゃ残念
Java使いって、間違った人多いですね そもそもJavaを選んだその時から人生踏み外してるのかもしれませんね
>>75 知らない。「遅い」って俺が言ったら、「Swingが遅いんじゃなくて作者が悪い」って返ってきた。
速度が欲しかったらJComponent継承して直さ Swingのすばらしさ90%くらい捨てるけどな
J2SE5で実行するべきだ。
5?
ニヤニヤ
javaでguiなんかやるんじゃねーよこのバカチンが
J2SE5って、Swing速くなってるの? VMの起動は速くなってるみたいだけど。
84 :
デフォルトの名無しさん :04/09/23 07:14:13
わたしゃ常にJComponentとJava2Dで書いてますが何か? ボタンだろうがリストだろうがテーブルだろうがお手の物ですが何か?
おれはV2Cは速いと思うが.... Linuxで動かしたら結構サクサクだったのに、Winマシンで動かしたら遅かった、 とかいう話があったようだな。
そうやって、マイクソOSがJavaと名の付くアプリに高負荷を掛けてると 言いたいんですねあなたは
>>86 それをいいたいのはあんただろ。
おれは
>>71 のとこにそんなことが書いてあったので書いた
だけだ。
ただしいま読み返してみると、どうもLinuxマシンのほうに速い
マシンを使っていたのは事実のようだ。
いまいちあてにならん。なんで自分のWinに入れてみた。
Pentium 4 1.6GHz 512MBメモリでやってみたが、爆速だった。
これで遅いというやつっていったい何を考えてるのかと思うくら
い速い。
Linux(Fedora Core 2)の自作VIA C3 1GHzでもやっぱりかな
り速い。やっぱ速いだろ、このSwingアプリ。
>>87 遅いというやつは1.3以前で動かしてるというオチ
89 :
デフォルトの名無しさん :04/09/23 09:25:10
1.4以上じゃなかったっけ?
こういうのは主観だからな。 うちではPenIII750MHz・Java1.4.2でストレスなく使っているが、 これで遅すぎると言う者もいるだろう。
遅いといいたい人にとっては遅い。 残念ながら事実だ。 遅いといいたい人に遅くないと言わせるほどは速くない。
92 :
デフォルトの名無しさん :04/09/23 10:00:08
Ruby >>>>>>>>>>>>>>>>>>>>>
あっちのスレに出張した荒しがいるな
つーかランタイム別途用意する必要のある時点でこりゃつかえねーな、 と思うわけですよあなた
>>95 ランタイム同梱すればいいじゃない?
あとHPやDELLとか大手って意外と標準で1.4入ってる
ブラウザでアプレットが動くようにだろうね
>>95 Javaって、ネイティブアプリとは住み分けができてるものだと思ってた。
98 :
デフォルトの名無しさん :04/09/23 23:37:56
アプレットでSwing使ってる人いますか?
そりゃいっぱいいるがな。
CPUよりメモリがネックなんだよなぁ Javaアプリってかなりメモリ食うから、 128MBで2k動かしてると、どうしてもスワッピングが激しくなる それで遅くなっちゃうんだよね 一般のアプリがスワッピングしても、たいしてメモリ食わないからそんなに遅くはならんのだけども
2kなら512以上載せとけよ 常識だろ
>>101 最大256MBなんだ・・・どうせ年明けに買い換えるし、しばらくの辛抱だ
今のマシンはXPとはいえローエンドでも256M標準だから OSで192M喰ったとしてもそれなりに楽だな 他に立ち上げてるときついが、昔に比べればかなり余裕
>>72 俺はソース見てないからSwingがどう使われてるか知らないけど、
触ってみた感じかなり丁寧に造りこまれてるのはわかるし、
動作だって決して遅くないと思うんだが、どこが遅いと思ったんだ?
少なくともSwingの評判落すようなものには見えないぞ。
MMX233MHz64MBのマシンでも使ってるって言うならそりゃ遅いだろうが。
結論:SWT使っていればこんなことには…
106 :
デフォルトの名無しさん :04/09/25 11:30:43
質問です。 Swingのドラッグ&ドロップってカーソルの形状変えられないのでしょうか。
>>105 SWTだとすべて自前で作らないとだめで結局使い物にならない
Swingにしておけば・・・
ってのを一つ見たことある
109 :
デフォルトの名無しさん :04/09/25 18:14:23
>>106 swingのDnD=transferHandlerは、簡単で便利だがドラッグ中&ドロップ時の
マウスポインタが取得できなかったり、ドラッグ中にマウスカーソルを
自由に変更できないといった明らかに手抜きな部分がある。
自由に操作したいのなら、awtのdndパッケージを使うしかない。
TransferHandlerとawt.dndでは考え方が全く違うからなぁ awt.dndはドラッグ&ドロップそのものを実装、 TransferHandlerはコンポーネント間のデータ転送
JFace に日本語チュートリアルきぼんぬ
Rubyyyyyyyyyyyyyyyyyy >>>>>>>>>>>>>>>>>>> JFあcえ>>>>>>SWRT
114 :
デフォルトの名無しさん :04/09/26 10:51:14
>>112 そのリンク先を見ても「JFaceて何? 」とか言っているようでは…絶望的だな。
115 :
106 :04/09/26 11:43:02
>>109-110 なるほど。サンクスです。
これでawt.dndの方で実装する決心がつきました。
116 :
デフォルトの名無しさん :04/10/03 03:14:44
ところでSwing 3年以上使ってるヤツいるか? いくらなんでも2年使って見切りをつけれないやつは死んだほうがいいと思っているのだが、、
Swig(というかJava)でGUI作ったこと無いんだけど、 どんなのができるの? Swig製のスナップショットあるサイト知りませんか?
>>116 どういうところが?
っていうか、必死だね。
120 :
デフォルトの名無しさん :04/10/03 03:28:53
Swingの成りすましUIは在日的発想。プゲラ
>>120 プゲラも注目する新Swing、ってことだね。
V2C使ってみたけど、全く違和感がないね。 重いと思うこともないし。
124 :
デフォルトの名無しさん :04/10/03 07:37:00
looking glassが速くリリースされるといいね
正直、Swingが低速だったのは過去になっちゃったなぁ。 1.4でもだいぶ許せたけど、1.5は全然OK。かくいう俺もV2Cからの書き込みなんだが。
>>127 でも、スレの描画がおかしくなることない?
いままで使ってないからJ2SE5の影響か普通にバグかはしらないけど
んーとたぶん実装のせいだと思うけど、範囲選択はおかしいね。これはn|a氏の修正をマッタリまってまつ。 リフレッシュのタイミングもちょっと変かな?メール欄を中身表示と非表示切り替えたときのリフレッシュがなかったり、 PCがレジュームから帰ったときに再描画がなかったり(これはSwing側の問題かな?) まぁ、動作は完璧じゃないね。速度が速いから納得してるけど。漏れは。
131 :
デフォルトの名無しさん :04/10/08 19:37:21
結論:J2SE5のSwingはバギーで使い物にならない。
132 :
デフォルトの名無しさん :04/10/08 19:50:57
Ruby >>>>>>>>>>>>>>>>>>> Java Javaなんてうんこ。
Rubyは貧弱杉だろ…HSPと張り合ってるのがお似合い。
>>131 まじそうなのかも。だっておれもV2C使ってるけど、1.4.2(Mac OS X)では
>>130 の言っていることが一つも再現しない。
V2C良いんだけど、マック上のJavaでは重いんだよなあ、残念ながら。 しかし、マックでは他にまともな2chビューアがないので愛用しているのであった。
V2CのJavaWebStartはサンドボックスも糞もねぇな(w 「このアプリは全てのアクセスを要求?」 手抜きすぎ。
137 :
デフォルトの名無しさん :04/10/08 23:29:53
公開するJavaWebStartアプリとして、 jnlpで <security> <all-permissions/> </security> っていいんかな〜 って言いたかった。 せっかくJAVAのブラウザなんだからセキュリティー上クライアントのシステムリソースには触れて欲しくないのが心情。 アクセス履歴とかを残せなくなるのは仕方が無いが・・・。どうだろうか。 「アプリケーションは、あなたのローカルマシンおよびネットワークに対して無制限のアクセスを要求しています。」 ってきつくない?ブラクラだったら即死?
しかし全権限を要求しないJava WebStartアプリケーションというのを あんまり見ないのも事実。
そうだったのか。スマソ。じゃいいよ。
ばーーーーーーーーーーーーか
>>138 ダウンロード版があるんだから、あまり気にしてもしかたないよ。
ネイティブアプリなら承諾さえ求めないんだしね。 特定のフォルダだけアクセスできるモードがあれば便利かも。
秀和システムからVisualEditorの本が出ていたから早速試しているのだが これはかなりいいね。今までサーバサイドJavaの仕事ばかりやってたので Swingは敬遠していたのだが、これだけ簡単に作れるのなら面白そうだなと思った
VEで感動しているということはNetbeansではもっと感動するかもね 癖はあるけどまだまだこっちがいろんなところで強い
NetBeansの挙動は頭悪いけどな。 でも、NetBeans4.0でWebサービスが気軽に使えるようになるし、プロファイラも出るし、おもしろい状況になるかも。
おれはNetbeans 4.0beta2使ってパフォーマンスが格段に上がってて感動した。 これかなりいいよ。
このスレの名前どおりSwingを重視だとまだまだNetbeansだな J2se1.4.2までしか安定版はないのが欠点だが 4.0はあまりに3.6と違いすぎるのも問題が多そうだ
みんなEclipseばっかり使っててNetBeansなんか使ってないからモウマンタイ
もう少し太字の文字をきれいに表示してくれると良いのだけど。 アンチェリはぼやけるだけで余計見にくかったりする罠。
>>151 捩れる位に同意。
何とかしてくれ、Swing manども!
>>152 >154
J2SE5ってTrueTypeレンダラ改善されたの?
全然気づかなかったんだけど。
少なくとも、NetBeansの太字はかなり改善される。 アンチエイリアスもきれいになる。
J2SE5って遅くなってない?>Swing
むしろ、NetBeansが軽く動くようになった気がするのだけど。
確かに、5.0 付属の SwingSet2 デモの太字はかなりきれいになっていた
Swingでネイティヴハンドルを取得するのってANIを使わんとできない?
Swingはハンドル持ってるのはFrameだけだからな あとは自前ですべて処理 もし本当にいじりたいのならAWTのJNIサポートをみてみるといいよ レンダリングをJNIで処理とかできる
ずっといじってきたけどVMのコア自体は1.4から5.0で速度的に大きく変わった点はないかな 1.4.1ではもちろんShift_JIS方面の変更が大きいし、一部ハードウェアアクセラレーションを使った 機能が追加されて体感速度はあがったけどね。 1.4.2ではほんのすこしで5.0はコンパイルがききやすいヘビーな処理は1.4.2と変わらない感じ。 ただしgcの速度が大幅に改善されていることと、インクリメンタルが別物になったとか大きい変更点はある。 起動時間はWindows使ってる限り改善されているように感じないし。
コピペ楽しいか?
「Swingをテストしたけど、全然速さ変わってない」っていってるやつは、どういうテストしてんだかね。
>>166 JFrame一個上がってくるまでの時間(=ほとんどプロセス起動とクラスロードじゃん)
をはかっているんだろう。
Swingのもたつきを感じる部分はほとんどがその最初のクラスロード時だし SystemLAFしか俺は使ってないがたしかに体感速度的には変わってないよ JTableとか重そうなのをこれから調べてみるかな
まぁ、1.4.2から劇的に変わると思っていたJava2Dが Windowsではほとんど変わってないのにショック受けたしな OpenGLも手元の環境では有効にならないし・・・動いたという報告も聞いたことない BufferedImageのキャッシュはやり方知っていれば1.4.2でも適切に処理ができた それでも敷居が下がったのはいいだろうね
またコピペ厨か
マルチポストじゃないか?
ArithmetricExceptionたんハァハァ(*´Д`)
173 :
デフォルトの名無しさん :04/10/26 18:55:11
Swing アプレットで paint をオーバーライドすると 配置したボタンなどが消えてしまいますが、なぜでしょうか? 同じ事を awt ですると消えないです。
>>173 paintComponent(Graphics)をオーバーロードしたまい
Swingはフレームが自前で子ウィンドウの描画をしてるから。
176 :
デフォルトの名無しさん :04/10/26 21:10:44
ん?時代はSWTだってのに、まだSwingとか使ってる香具師がいるの?
ん?時代はRCPだってのに、まだ時代はSWTとか使ってる香具師がいるの?
SWTはEclipse専用 Swingとくらべて大幅に早いってわけでもないしな そもそもカスタマイズしたGUIを作るのが大変
そこでAWTですよ。
180 :
デフォルトの名無しさん :04/10/26 22:05:15
Java に wxWidgets を組み込むとか、 そういう計画ってないの?
>>181 ありがとう。はじめて知ったよ。
これがまともに使えるようになったら Swing も SWT もいらない
ってなことになったりするのかなぁ。
>>184 特に理由は無いよ。
続きはスレ違いだから他所でやってくれ。
>>185 キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
そういえばwxのスレ加速してるな
>>174 ありがとうございます。できました。
原因を聞いておきながら、実は解決策を望んでいたわけです。
しかし、また新たな問題が出ました。
JPanel のサブクラスの paintComponent(Graphics) で描画しようとしてますが
その上に乗っているラベルやボタンなどの上には描画できません。
どうすれば良いでしょうか?
ちなみに super.paintComponent() はやっています。
>>173 子コンポーネントが上に載ってるなら
そっちで上書きされるのがまともな挙動だと思うぞ
その上に描画したいのなら普通はGlassPaneとかでやるんじゃないかな
JFrame#setGlassPane(Component)ね
173はどうもGUIの考え方がおかしいな
>>190 すみません。やろうとしている事を言えば分かってもらえると思います。
今ゲームを作っています。そのゲームは 5*5 のマスがある盤が 2つあって
そこをそれぞれの戦車が自由に移動できます。
そして、相手の戦車に 2回弾を当てると勝ちです。
動作は 3つのコマンドを一気に入力して 2つの戦車を同時に動かします。
コマンドはガード、弱い弾、強い弾、移動があります。
ガードは弱い弾だけ跳ね返す事ができます。
コマンドは盤面の上にあるアイテムを取ると使えます。
あとの詳しい説明は GUI には関係ないので省略しますが、このゲームの構造から
盤をクラスにしました。しかし、弾を撃つアニメーションは 2つの盤をまたがって
しまいます。そこで、それらをパネルの上に置いてそのパネルに描画すれば良いのでは
ないかと考えました。
そういう用途なら、まさにGlassPaneが適している。 厳密に言うと、GlassPaneを使うよりは別のレイヤーに弾をおいた方が よさそうだが。 LayeredPane, GlassPaneなどのキーワードでAPIドキュメントを調べるのだ。
Swingでやるならレイヤー勉強すればいいね 俺ならJava2Dで描画部分はまとめるけどね
>>191 > あとの詳しい説明は GUI には関係ないので
そこにある詳しくない説明もGUIには関係ないと思うのだが・・・
ま、オレも普通に1枚のパネルに描画するけどね。
>>191 動きのあるヤツなら、LayeredPaneなどSwingに重なり計算を任せずに
自前で重なり管理してやったほうがよくないか?
# スプライトクラスって誰か作ってないのかねぇ?
>>195 一番作っていて楽しい部分だからみんな自分用にガリガリ書いていると思われ
つーか、Java2D機能豊富で透過指定も余裕だからなぁ
そこまでほしいクラスでもないと思われ
ハードウェアのスプライト機能が使えるなら、必要だね。
Java2Dってハードウェアアクセラレーションつかってるの知らないやついたのか
JOptionPaneのように、 ダイアログを開いて、ボタンを押したときに呼んだ箇所へ値を返す仕組みは、 どのように作ればよいのでしょうか?
201 :
デフォルトの名無しさん :04/10/29 11:26:57
>>199 難しく考えないで。
いろんなやり方がありますから。。。
Java初心者の質問スレにもポストしましたがスルーされてしまったのでこちらで質問させてください。 SwingでJProgressBarを使った開発を行っているのですが、 データ処理中にProgressBarを動作させる方法がわからず困っています。 JProgressBar1.setValue(JProgressBar1.getValue() + 1); こんなのをフツウの処理(Threadではない処理)の中でぐるぐる回すだけではダメなのでしょうか?
ちゃんとsetMinimumとsetMaximumしてるのか?
>>203 >>205 をよんでみましたが私がやろうとしている処理ではプログレスバーを動かすことができませんでした。
処理中に画面が固まる。。。
というわけで
Runnableなクラスの中でぐるぐる回しつつ
jProgressBar1.paintImmediately(rectangle);
とかで強引にコーディングして逃げることができますた。お騒がせしますた。
それでいいだろもしかしてイベント中にすべての処理やろうとしてたとか?
SwingのGUI絡みの設定を変える時はinvokeLater()経由しないと駄目だったんじゃ なかったっけ。 すみませんうろ覚えです。
202はまずスレッドから勉強するべし。
GUIをこれからやるならどの本がオススメでしょう
技術評論社のGUI徹底攻略とか?
213 :
デフォルトの名無しさん :04/11/21 03:40:40
>>211 Java GUIコンポーネント完全制覇
とか
あの萌え絵の本は評判が良いらしく、売り切れてるな。 まあでも地味に「Java GUIプログラミング」がいいと思う。
そこらへんの3冊が定番かね?
>>216 買ったけど、地の文、漢字の誤変換大杉。萎える。
少数派だろうが、こういうのが気になる人は止めとけ。
初版だけかな?とりあえず校正の人は責任をとって欲しい。
萌え絵の奴ってそんなに良いのか! CPUの創りかたも萌え絵だったけど良かったなぁ
何の本だったか忘れたが、導入部だけ萌え文で本文が目に悪い漢字専門用語のオンパレードの解説書に引っかかって、それ以外萌え本は眉唾
値段が安いからいいね Java GUIプログラミングと完全制覇のどちらも高いし でも量考えるとGUIプログラミングの方がイイのかな
萌え本は字が小さくて自分にはパッと調べにくいから買うの止めた。 三分冊の本も冗長すぎる気がする。 完全制覇のやつもいいとは思わなかった。AWT用のコードと説明が長すぎ。 いくらAwtがもとにあるとはいえ、不要に厚くなって使いづらいしSwingの深い情報ないし。 CoreJavaのGUIの説明みたいなのがいい。 レイアウトマネージャーに限ってはプロフェッショナルJavaがいい。
やっぱりCore JAVAに行き着くのかw
グラフィックJava2 Vol.1 AWT編 Vol.2 Swing編「上」 Vol.2 Swing編「下」 値段は高いし、量も多いから読むの大変だけど 図書館に置いてあったから借りて読んでる まぁ、俺は複数の本を少しづつ読みながら先に進んでるからお薦めという本はない
萌え絵の本って網羅してるのかな
萌え絵の本は網羅まではしてないらしいよ。 ただGUIプログラミング初心者のスタートラインとしては最適らしいぞ。 アマゾンの感想読んだだけだけど....
どれ読んだら良いんだよヽ(`Д´)ノウワァァン
表紙で選ぶと「萌え以外」になるなあ。
お持ち帰りまでが大変だ
232 :
デフォルトの名無しさん :04/11/22 09:26:00
萌え絵が表紙の本なんて日常的に買ってるだろ
Java関連萌え書籍スレはここですか?
萌え絵の本って何?
それだと >221 にも書いてある...
得ろげー勝ってるってことじゃないの
萌える法律読本は糞だった
みんな、けっこう萌えが好きみたいですねw
2次元好きばっかでしょ
最近は専ら一次元だな。 ただし挿絵は考慮しない。
>>236 その本さぁ…表紙やイラストが萌え絵なのは、まぁどうでもいいが、
WEBブラウザのサンプル動かすと、エロゲメーカーのページに飛ぶのは
止めて欲しいんだが…。
うげ……
245 :
デフォルトの名無しさん :04/11/23 12:31:57
1. 今度の仕事はSwingだ。Swing全然知らねーが、でもがんばるぜ!
2.
>>236 の本を購入。絵がアレだが判りやすいと評判だしな。
3. まずはサンプルをビルド、よし、実行だ。
4. 月猫揚頁猥褻画像
5. 「仕事中に何見取るんじゃゴルァ」
6. 解雇
∧||∧
( ⌒ ヽ
∪ ノ
∪∪
禿和良
ひでー本
あれじゃない? いい本を書いて、萌え系の表紙・萌え系のサンプルにして、萌え系の人じゃないと受け入れられないようにして、萌え系の人だけがSwingわかるようにするという。 そして、萌え系の人がそうじゃない人に対して能力をつけ、世の中を萌え系の人中心で動かす、という巨大なプロジェクト。 将来的には秋葉原に政治の中心を移そうという壮大な計画。
Java萌えヲタ晒しage
毎日コミュニケーションもさー、萌え絵のイラストレーターを一人に絞ってさ、 装丁も統一感だせばいいのにな。 で、本屋の一角に並べる訳よ。そりゃもうオライリーのごとく萌え絵がずらりと。
251 :
デフォルトの名無しさん :04/11/23 18:55:38
最悪な発想だな。萌え系とか言ってる奴等はみんな死ねよ。 本屋とかで買ってる奴を見かけると、マジで頭おかしいんじゃないかと思う。
レインタソを名乗ってコンピュータ本を出すとは大胆不敵だな。
>>250 のアイディアは普通にいいと思った
今の萌え技術書は微妙に萌えきれないイラスト
ばっかりで、なんか買うのが恥ずかしい。
エロ漫画コーナーと間違えられる罠
結局のところ出入りする人間は変わらない罠
日本の技術書は表紙がいまいちなのが多いなあ。
>>236 って内容は良いの?
いいなら普通に読むぞ
本屋のコンピュータコーナーでは、店が独自に萌え本を一カ所にまとめているので 既にコーナー化してるな。
>>263 横線引いて書き直しますわ
読み終わってもBOOKOFFに売るわけでもないし
>>262 会社で君望ページなど接続してクビにならんようにな。
最近はログ取ってるし。
>>265 なんでAgeのページ飛ぶんだ・・・・
ひょっとして提供とか?
作者の趣味だろ
Swingって、本や解説ページが多いのに使ってる人が少ないな あとサンプルとか公開したりしてるけど、サンプルしかなかったり…
そりゃもう、低速だからの一言に尽きる。 プログラムを組む側からすれば、すごく便利なんだけど。
浦島太郎キタ━━━━(゚∀゚)━━━━ッ!!
おれはいまや速度の問題はかなり小さくなったと思う。 むしろインターフェースが、ベースOSのものと異なっていたことのほうが大きいと思う。 J2SE 5.0でインターフェースがかなりネイティブ寄りになって良い感じ。
UIマネージャ変えろよw
↑インターフェイス=見た目 だと思ってるバカ
そういっていただけるとありがたいです。 今後の励みになります。
SwingとSWTはどっち勉強した方が役に立つ?
>>275 Swing。
SWTがEclipse以外の用途で生き残るとは思えない。
てゆーか、Eclipseが生き残ったとしても、いずれSWTは
捨てられると思う。
>>275 仕事で使う、または初心者ならSwing。
SWTを仕事で使ってるところは見たことが無いし(将来どうなるか知らんが)、
SWTは造りが非常にC的なんで、初心者には触らせたくない。
趣味でできる限り高速なアプリを作りたい、または既にオブジェクト指向を理解しているか
最初からC厨で影響受けることが無いならSWTでもいいと思う。
じゃあ、今、Java製クライアントを作成するのに使うならどっち。
間違いなくswing
プログラミングの使い勝手的に、SWTはあきらかにSwingに劣るからなあ。
あんなのJavaじゃねえ
AWTが最強
だってそんなこと言ったって、客がSWTがいいって言うんだから。
Swing on SWT
Swingはおくが深すぎる 慣れてくるとどんどん複雑なUIも作れるが・・・ 速度調整のほうが大事やね
>>278 仕事なら、RAD環境のあるSwing。
手書きでGUI書くのは、むなしい。
つうかSWT語るならJFaceを忘れるなw
288 :
デフォルトの名無しさん :04/11/27 04:57:33
swing使うときにどんなGUIエディタ使っています? 手討ち??
>>273 > インターフェイス=見た目 だと思ってるバカ
271がいってるインターフェースは話の流れから察するにLook&Feelの
ことみたいだから見た目であってると思う。
んで、272のいってるUIマネージャ変えるってのはUIManager使って
Look&Feelを変更しろってことだと思う。たぶん。
自作のアプリじゃない場合は、オプションなどでデフォルトのLook&Feel
を指定すればいい。
> java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel MyApp
290 :
デフォルトの名無しさん :04/11/27 11:26:49
SwingのJTableで、セルのデータ検証(バリデーション)を行う標準的な 仕組ってないのかしらん? 今自前のAbstractTableModelとTableModelListenerを使ってやってるんだけど、 セルにデータを保存するとき、選択行が変わろうとするとき で別々のリスナーを作らないと共通に使える仕組が作れないっぽい
まともにGUIやろうとしたらNetBeans以外ありえんね
eclipse + Visual Editor 見たいな、GUIプラグインの組み合わせは? Visual Editorはeclipseプロジェクト内の発足だし、Version1.0もリリースされたから、結構使えるんじゃないかと思ってたんだが。
VEは使い物にならん 1.0になったというのはSwingを改良したというよりはSWT対応という意味が大きい
>>294 なんで使い物にならないんだ?
逆に、SWTなら、使い物になるのか・・・?
SWTのほうが力はいってるとおもわれ
おれもNetbeans派なんだが、JBuilderはどうなんだろうと気になっている(使った事ないんで)。 使用者の感想はどうですか。
VE1.0.1.1でも使っててエラーログにどんどんぬるぽ溜まっていくとか ちょっと品質悪いよね。1.1の計画からもSpring layout 対応とか外れるみたいだし、Swingに力が入ってるとは 思えないな。かといってSWT対応も主担当はIBMじゃなくて ISCらしいし、どっちもIBMがまじめにやってる感じじゃなかったな。 まあVE1.0の見所を強いていうならEclipse3.0に対応し ましたってとこじゃないの? 来週RAD6発売だけどVE1.0 からどこまで枯れたか見もの。
JBuilder昔使っていたけど、悪くはない でもGUIエディタとしてNetBeansが細かいことができすぎる ウィザードやら親切なものがJBuilderのほうが満載なので 最初にIDEにふれるならEclipseやNetBenasよりは先にさわらせたいかなぁ 地味にDB管理ツールがらくだったり
SWTはSWTで問題も多いからなぁ SWTスレのぞいてみなされとしか
SWT はノキアやモトローラが味方について組み込み向け JFace とか 作るみたいだし、貧弱な実行環境向けでは残るんじゃないかな。 SwingもJ2ME向けにProfile作ればいいのにな。最近のPDAならそろそろ いい気がする。
テキストエディタでSwingを使うのはおかしいのか…
V2Cの作者はemacsで作ってるとのこと
テキストエディタでGridbag書くのは精神衛生上よろしくない
>>302 おかしいとはいわないけど、量産にはむかない。
>>303 ツールの場合はRADのうまみがあまりないので、問題ないと思う。
業務システムで年端もいかないプログラマにコーディングさせると問題。
画面数少なければ、そりゃ問題ないよな・・・。
>>307 それと、ツールの場合、画面の動的な制御が多いから、RADであらかじめ画面を作れてもおいしくない。
そこでSwiXmlですよ
http://www.swixml.org/samples/index.html SwiXml, is a small GUI generating engine for Java applications and applets. Graphical User Interfaces are described in XML documents that are parsed at runtime and rendered into javax.swing objects.
…いや、ThinletとかSwingMLでもいいかもしれないんだけどね
NetBeansのフォーム定義XMLからフォームが生成できるエンジンがあってもいいね。
>>309 すごいネーミングのセンスだな。
Xwingじゃだめだったのか?
>>311 Xwingは商標的な面倒に巻きこまれそうだ。
ある意味、宗教的
むしろ宗教そのもの
ちゃんとした現世利益があれば宗教だってかまわんだろ
実は、前から作りたいと思って探してたんだけど、みあたらない。 本気では探してないけど。 NetBeansのXML定義からSpringやSeasarのBean定義に変換するのもおいしそう。 そんなアイデアも、form定義の仕様を探さないことには。 実際には、イベントまわりの実装に腐心しそうだ。
XMLからフォーム作るのはいいんだけど、イベントとか動的な処理をどこで設定するの?
>>318 SwiXmlの場合、
SwingEngine#render("コンポーネントのViewの定義.xml")で、
コンポーネントのツリーを組み立ててから、
SwingEngine#find("コンポーネントの名前")で、
該当するオブジェクトの参照を取り出して、
そこにイベントハンドラをaddしてゆく、
…というのが基本的な使い方になります。
>>317 このSwiXmlみたいに、
「XMLはViewを定義するだけ。Model や Controller は、Javaでソースを書け!」
ってことにして、とりあえず切り放して考える、というのもアリだと思うよ。
>>319 うん、おれは話題からして、UIをXMLからロードして作れる程度のものを想像していた。
SwingUIMgr mgr = new SwingUIMgr( hoge.xml);
JFrame frame = mgr.getJFrame( "hoge");
てな感じで。あとはframeつかって好きにしろや、ってことでよろしく。
XMLで別定義とかしたいところだが、特に要望の強いであろう業務系では イベントとかの嵐だしプロパティをガンガンいじるからなぁ
NetBeansの.formファイルを、 XSLTでSwiXmlに変換して使えるとしたら、 実装はわりと簡単になるよな。
XMLもいいがGroovy(Groovy Markup)はどうかね。
>>318 現実的な話をすると、OGNLとか式言語を使えるようにして、リスナーを追加できるようにするのがいいのかと。
オススメのビルダー教えてください。 できれば無料ので
もっと勉強してからにしなさい
330 :
!= 328 :04/12/04 16:36:27
331 :
デフォルトの名無しさん :04/12/04 16:38:47
329のように電波ゆんゆんになるための勉強(というか修行)
332 :
名無し :04/12/04 16:43:37
せっかくWindowsのシステムクリップボードにファイルをコピーできるようになったと思ったら Linuxでは駄目なのね 悪いのは俺なのかJavaなのかLinuxなのか…
>>334 クリップボードはAWTだからスレ違いか
>>333 どっちかというと、「Linux」の名のもとにクリップボードの仕組みを統一できてないLinuxが悪いね。
337 :
デフォルトの名無しさん :04/12/05 02:00:53
現状LINUX上でCUIで動いているプログラムにできるだけ簡単に!、 GUIを実装したいのですが何を使ったらよいでしょうか? javaでswingを使うなど考えたんですが、CUIとのデータのやり取り が大変そう(自分の実力のなさから、、、)でどうしたものか悩んでるところです。 CUI側プログラムにwebサーバを実装して、GUI(javaが適当?)プログラムでは、 local接続して値をやりとりするってのはどうなんでしょか?
338 :
デフォルトの名無しさん :04/12/05 02:06:28
普通にファイル経由。これ。
>>337 CUI側のプログラムを別のマシンで動かそうという考えがなければ別にソケット使う必要はないよ
(別のマシンで動かす場合でもwebサーバー実装は大げさというか無意味)
わざわざアプリ鯖立ち上げて通信させるくらいならそのままスタンドアロンアプリつくればよかろう Swingってべつにそんなにたいへんなものではないし、レイアウトマネージャ理解してくれば別に問題なし とりあえずNetBeansいれてぺたぺた貼り付けてみて問題があったらまた質問するがよろし
とりあえず、そのCUIのプログラムって、どんなアプリなんだよ?
Netbeans 4.0正式版が出たぜ!
Netbeans 4.0をいじってて気がついたが、実行コマンドbin/netbeansにMac OS X用に unameが「Darwin」だったら、てなところがあるんだよな。 で試しにMac OS X独自のプロパティ「apple.laf.useScreenMenuBar」を追加して、trueに してみた。起動してみたらちゃんとMacのメニューバーになってやがる。 これNetbeans 3.6のころはちゃんと動かなかったんだよ。しかしDarwinだったら特殊な プロパティを設定するような起動ロジックを入れるんなら、はじめからこのプロパティも 設定しときゃいいのに....
ごめん、投げるところを間違えてるよな... Netbeansスレに逝ってくる...orz
347 :
デフォルトの名無しさん :05/01/02 06:18:04
tableで現在表示されている、可視領域の行のtopのINDEXを取得 する方法ってありますか?
348 :
デフォルトの名無しさん :05/01/02 12:58:20
>>347 スクロールバーの値を取得して
JTableのrowAtPointを使えばいいんじゃない?
349 :
デフォルトの名無しさん :05/01/03 05:51:39
JTableで、スクロールバーのイベントを捕まえる にはどうすればよいですか?
>>349 JTable自身はスクロールバーを持たない。
持つのは、JTableをviewに設定したJViewport。
あとはJViewportの持つJScrollBarを拾ってきてあれこれする。
>>347 atmarkit にも ほとんど同じ質問が出てるな。
そーいや Eclipse スレだったか SWT スレだったかで
JTable 使えねーとかわめいてる奴もいたな。
352 :
デフォルトの名無しさん :05/01/04 20:41:43
>>351 の2行目までと、3行目以降が繋がらないんだが、分裂病もとい統合失調症か何かですか?
質問ですが起動時に最大化するにはどうしたらよいでしょうか? それと起動時からルックフィールをWindowモードにするのも教えてください。
・起動時に最大化(JDK1.4以降限定) frame.setExtendedState(Frame.MAXIMIZED); setStateというメソッドもあるが、アイコン化と通常状態への戻ししかできない。 ・起動時にL&FをWindowsに。 ウィンドウを1つでも開く前に UIManager.setDefaultLookAndFeel(クラス名); クラス名は XP風なら "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" それ以前の(95以降XPより前)なら "com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel" 作ってしまったウィンドウのL&Fを変えるには、 そのあとで SwingUtilities.updateComponentTreeUI(最上位のComponent); する。invokeLaterから呼ばないとダメかも。
LAF設定はSystemLAFにしたほうがいいかと
>>356 御意。
もとの質問者の意図が、
「どんなプラットフォームで動かされたときでもWindows L&Fにしたい」
なら355の方法、354がたまたまWindowsを使っていて、
「動いているプラットフォームの標準L&Fにしたい」なら、クラス名の所は
UIManager.getSystemLookAndFeelClassName()
の返値を使ってくれ。
>>358 sunのWindowsLAFが用意されてる環境なら、どんなプラットフォームでも動くけど、デフォルトやライセンス的にはWindowsだけだな。
厳密にいえば、355は特別なことをしてなければWindows上のSunのVMでしか動かないね。
そういえばWindows以外でWindows Look and Feel使うと例外になるんだったな。
初カキコです。 Swing部品で、手入力可能な部品があるぢゃないですか? (例えば、JTextFieldやJComboBox) その部品で以下の現象が発生します。 IMEを起動し、よみ入力状態(未確定)中に Ctrl+V(ペースト)を押下するとExceptionが発生する。 ※JDK1.3でも1.4でも発生するようです。 この問題の回避方法を検討しているのですが、 良い方法が思いつきません。 過去に解決した方いらっしゃいましたらアドバイスおながいします。 あと、この問題を解決する上で一つ試してみたい方法があります。 「現在読み入力中である。」というのが分かれば その時だけCtrl+Vをconsumeしてやれば 回避できそうな気がしているのですが、 Javaで「現在読み入力中である。」というのは 判断可能なんでしたっけ??? 教えてくんですんませんが、よろしくです。
自己解決♪ 読み入力中かどうか判断できたので、 コピペのキーイベントを消費すれば 回避はできますたー。 でも、これってswingの 障害に見えるのですけど どーなんですかねぇ???(*´д`*)
>>361 Windows2000SP4 & j2sdk-1.4.2_06 の環境では発生しないんだけど、
そちらの環境はどんな?
環境と例外のスタックトレース晒してくんない? あと、IME に何をつかってるかにもよるのかも? WindowsXP + MS-IME java version "1.5.0_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_01-b08) Java HotSpot(TM) Client VM (build 1.5.0_01-b08, mixed mode, sharing) だと例外は出ない。
365 :
デフォルトの名無しさん :05/01/08 14:55:00
結論:MFC使え。
MFCって、広く使われてるクラスライブラリの中では最悪の部類に属するよね。
うん。MFC以下の商用ライブラリを知らない。
そこでAWTですよ。
ここはSwingスレだしAWTやMFCは・・・
当方では、1.3.1_01と1.4.1_03で現象が発生することを確認してますね。 1.3.1_01は、以下のVMです。 Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_01a) Java HotSpot(TM) Client VM (build 1.3.1_01, mixed mode) 1.4.1_03は失念です。。。…(;´Д`) 発生Exceptionはこんな感じ。 java.lang.IllegalArgumentException: Invalid substring range at java.text.AttributedString$AttributedStringIterator.<init>(Unknown Source) at java.text.AttributedString.getIterator(Unknown Source) at javax.swing.text.Utilities.drawComposedText(Unknown Source) at javax.swing.text.PlainView.drawElement(Unknown Source) at javax.swing.text.PlainView.drawLine(Unknown Source) at javax.swing.text.PlainView.paint(Unknown Source) at javax.swing.text.FieldView.paint(Unknown Source) at javax.swing.plaf.basic.BasicTextUI$RootView.paint(Unknown Source) at javax.swing.plaf.basic.BasicTextUI.paintSafely(Unknown Source) at javax.swing.plaf.basic.BasicTextUI.paint(Unknown Source) at javax.swing.plaf.basic.BasicTextUI.update(Unknown Source) at javax.swing.JComponent.paintComponent(Unknown Source) at javax.swing.JComponent.paint(Unknown Source) at javax.swing.JComponent.paintWithBuffer(Unknown Source) at javax.swing.JComponent._paintImmediately(Unknown Source) at javax.swing.JComponent.paintImmediately(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
ちなみに、OSは WindowsXP SP1 + MS-IME ですた。
1.4.2だけどそんなえらーでねぇよ
どっちにしてもバージョンが低すぎる 1.4.1だけみても_07までいってるわけだしな 1.3.1なんて_14だ
そうだね。 1.3.1の最新と1.4.1の最新で試してみたら?
demo/jfc/Notepad/Notepad.jar で試してみたけど、 1.3.1 も 1.4.1 も例外吐くね。素直に 1.4.2 を使えって事か。 java version "1.3.1_15" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_15-b01) Java HotSpot(TM) Client VM (build 1.3.1_15-b01, mixed mode) java version "1.4.1_07" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_07-b02) Java HotSpot(TM) Client VM (build 1.4.1_07-b02, mixed mode)
1.4.1は問題多かったし1.4.2へ移行できるからいいけど 1.3.1は1.3系最終だからきっついな どっちにしろ移行フェーズにはいってるVMだからなんとも
1.3でSwing使うな、っていう考え方だな。
>>377 1.3 で Swing 使うならその程度の不具合があっても我慢しろ、でなくて?
1.3のSwingには重いという最大の不具合が。
>>379 Swing が重いのは 1.3 に限った事ではない。
スレタイにも低速って書いてあるしな。
1.4.1以降でSwingさわってないやつまだいたのか
ダイヤログボックスのボタンが「了解」になってるんだけど変えることは出来ませんか?
384 :
デフォルトの名無しさん :05/01/12 16:57:09
>>383 UIManager.put("OptionPane.okButtonText", "表示させたい文字列");
>>384 ありがとうございます。
もひとつ、ウィンドウの大きさを固定するには(ウィンドウの角にマウスを合せても何もできない)
どうしたらいいでしょうか?
java.awt.Frame#setResizeable(boolean)
UIManagerはともかくResizeableはAPIみてればすぐにわかるような・・・
UIManagerの設定値ってどうやって知るものなんですか? ソースから見つけるとしても、ある程度アタリつけて探さないとだめだし。
タイトルバーを右クリックすると移動とか閉じるとかのメニューが出ますよね。 あそこにメニューを追加することできますか?
>>389 Mac OS X + Java 1.4.2_05ですが、そのメニュー出ないです。
JVMはちゃんと右クリックにも対応してるんですけど。
>>389 java.awt.Frame#setUndecorated(boolean) で
ネイティブのタイトルバーとか出ないようにした上で、
自力でタイトルバー表示して自力で右クリックメニュー表示するとか。
そうなるとウインドウの移動とか大変だな まぁWindowはライトウエイトじゃないからな
カキコ少ないぞ。 やはりSWTなのか
>>394 書き込みがないということは、
みんな問題なくSwingを使いこなせているということ。
素晴らしいことではないか。
普通に業務系ではSwingつかってるしなぁ SWTはユーザーの多いWindows等でしか安定動作してなかったとか 低機能がきつかったかと 業務系はテーブル使ってなんぼだからね
そうだなあ。SWTはWindowsアプリをJavaで書くためのライブラリって感じだな。 漏れも結局Swingしか使ってない。
>>394 Swingの方がいいな。
それにしてもこのスレ下がりすぎ。
400 :
デフォルトの名無しさん :05/02/04 00:32:30
>>400 100行ちょっとじゃん。全然大した事無いような……
コピペすれば5秒
1行でできないかなーって。 ゴメンネ。
JTextAreaのキーバインドをカスタマイズしようと思います。 InputMap inputMap = myTextArea.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW ); ActionMap actionMap = myTextArea.getActionMap(); inputMap.put( KeyStroke.getKeyStroke( "ctrl S" ) , actionMap.get("caret-begin-line")); とした場合、ctrl s に行頭まで移動を割り当てることができるのですが、 "ctrl S"の部分を"ctrl A"にするともとから定義されていた select-all が呼び出されてしまいます。 inputMapからremove、もしくは上書きしたいのですが誰かアドバイスをくださいませ。 removeというメソッドはあるのですが、そこに何を代入してよいのか分かりません。
>>404 input.remove(KeyStroke.getKeyStroke("ctrl A"));
でいいんじゃない?
>>405 いや、これがダメなんですよね。消えてくれない。
>>406 inputMap.remove(KeyStroke.getKeyStroke('A', 2));
変わってないけどためしに
>>404 ↓を使うんじゃないかな?
javax.swing.text.Keymap
JTextComponent.getKeymap()
>>410 KeyStroke ctrlA = KeyStroke.getKeyStroke("ctrl A");
inputMap = textArea.getInputMap(JComponent.WHEN_FOCUSED);
while (inputMap != null) {
inputMap.remove(ctrlA);
inputMap = inputMap.getParent();
}
JTextComponentの編集用キーバインディングは WHEN_FOCUSED のInputMap
に登録されているのでそれを再帰的に辿って消せば消せます.
でも削除しなくても上書きで問題ないはずです.
特定のテキストエリアについて編集用キーバインディングを上書きしたいなら
InputMap newMap = new InputMap();
newMap.setParent(textArea.getInputMap());
newMap.put(ctrlA, "hoge hoge");
textArea.setInputMap(JComponent.WHEN_FOCUSED, newMap);
と,新しいInputMapを作ってやるのがマナーかもしれません.
あとKeyMapで変更した場合は KeyMap keyMap = textArea.getKeyMap(); // keyMap の変更 textArea.setKeyMap(keyMap); と,setKeyMap()しないとダメだったと思います. (JTextComponent#setKeyMap() の内部でKeyMapを元にInputMapとActionMapを 更新していたと思います.
>>411 ありがとうございます!!
411の方法でバッチシ消せました。
そして412のKeymapの変更はどうやらいらないようです。
自分の方法がダメな原因がわかりました。
JComponent.WHEN_IN_FOCUSED_WINDOWとしていたからでした。
ここをJComponent.WHEN_FOCUSEDとしないと上書きが反映されないようです。
Swingも書籍はある程度出版されていて助かるのですが、
やはり細かいところになると情報がすくなくてつらいときあります。
ほんとにありがとうございました。
>>413 >>412 に書いたのはKeyMapを使ってキーバインディングを上書きする方法だから
InputMap を変更する場合に KeyMap を更新する必要はありません.
swing は jdk の src.zip にソースコードがあるので読んではいけない
理由(クリーンルーム実装する仕事があるとか)がないなら読んで調べる
のが一番確実です.最終手段ですけどね…
415 :
デフォルトの名無しさん :05/02/05 22:43:58
エクスプローラの詳細ファイルリストのようなリストを作りたいんだけど、なに使えばいい? JListだと列がないし、JTableだと行でなくフィールド一つ一つ選択できてしまう。
>>415 jtable.setRowSelectionAllowed(true);
418 :
デフォルトの名無しさん :05/02/07 13:23:48
SWTの時代で、もうSwingは要らない時代でつか?
Swingの時代でSWTが要らない時代になりますた。
SWTでお仕事はまずないな
421 :
デフォルトの名無しさん :05/02/08 02:02:32
Swingの仕事ももちろんないわな。
おいおい、Swingの仕事やってる俺はどうなるんだ。
某がSwing/SWTのクロスライブラリ出せばヨインダ ってもうある?
>>423 そんなん使うならSwingでよい。
SwingをSWTのインターフェイスで使うのはあほらしいし、わざわざSwingのインターフェイスでSWTを使うほどSwingとSWTの速さに差はない。
そんなん使うならSWTでよい。 とはならないわけ?
SWTは仕事で使う分には機能不足 Swingいまだに使えないと思っているやついるんか
あ、そうなの? Swingいまだに使えないと思ってたが、V2Cみたいなのは凄い。 ポトペタで作れる?
ポトペタがないと作れない奴は使いものにならない。
GUIで売れ行きや使われ具合が決まるんだから、 GUIはポトペタ、これ定番。
>>429 ポトペタで作ったら売れ行きが良くなったり使われ具合が良くなったりするのか?
逆に言うとポトペタ使えないと、売れない使われないGUIしか作れない、と。
それって
>>428 を肯定しているだけでは?
ポトペタがないと作れない奴はバカのは確かだが ポトペタがあるのに意地でも使わないのもバカ
バカ(良い意味で)
おまいヴぁか
>>431 DelphiのポトペタIDEはDelphiのポトペタで作られてる。
JBuilderのポトペタIDEは、、、知らん。
ぽとぺたは開発効率という点で重要だろう それはコストや出来具合にかかわってくる JavaのGUI]ツールとしてのできは NetBeans>JBuilder>JDev>EclipseVE ってところだろう
JDevとJBuilderって、同じものじゃないの? NetBeansも使いづらいと思ってるんだけど、JBuilderってそれより悪い? Delphiのアクションまとめるやつが、すげー使いやすかって忘れらんない。
ポトペタにはNetBeansが良いわけ? ランタイム用にインストールして起動もしなかったヨ。 大昔にJBuilder使って最近Eclipse触っただけだったんだが、商用が良い筈と脳内で勝手に思ってたよ。
>>436 昔は完全なOEMだった
だから今でも互換性のためにGUI部分はほぼおなじ
ただしバージョンは古いのかな
メニュー周りとかウィザードとかそういったところがJBuilderと比べて弱い
結果としてJBuilderのほうがいいというわけ
NetBeansは慣れるまで多少かかるが、慣れてくるとあふぉのようなつくり込みがイカス
ただし、Swingの仕組みをある程度知っている人向け
というか、JavaのGUIエディタすべてはSwingの最低限の知識ないときついけどな
>>437 ランタイム?JREじゃだめだよ、SDKいれないと
EclipseはJBuilder並みの親切さはないからその点はきついかな
というかJBuilderだけがとびぬけて親切度は高いと思う
初めてJavaのGUIいじるならJBuilderを進めたいけど、結局Swingを理解していないと
細かいところですぐに躓く
NetBeans以外はフレームとか地獄のサイズ指定になっているので
実際にアプリを組むときそのあたりで多少手がかかるかもしれない
JBuilder軽いな・・・Eclipse使ってる俺が馬鹿のようだ というか馬鹿だ
Eclipse自体重くはないがVEは重い JBuilderは6あたりからかな、軽く感じるようになって来たのは NetBeansも3.6からはLAFの影響か軽く感じやすい
ロジックをEclipseで書くからGUIもEclipseの方が楽なんだよね 確かに重いんだけど、GUIいじる時間もそんな長くないし
業務用アプリのような膨大な項目をパネル単位で管理とか そういったことしているとNetBeansじゃないと大変な希ガス そもそもsetSizeしている時点でだめすぎ>VE
444 :
デフォルトの名無しさん :05/02/09 08:39:48
じゃ、ポトペタでJavaアプリ作るんならお金出せるならJBuilderだね。 SwingとSWTのアドバンテージが?でつ。 上ではSWTが機能不足とあるけど、自分の認識ではSwingに対して後だしジャンケンのSWTが高速、だったんだけど違うの? EclipseとSWTがセットなんだっけ?
ポトペタ部分をJBuilder Personalで大雑把に作り、
あとはそれを継承したクラスのイベントロジックをEclipseで作るってのはどうでしょう?
>>443 >そもそもsetSizeしている時点でだめすぎ>VE
詳しく教えて。setSizeってどこでされるの?
自分でsetSizeする必要がるってことじゃないか?
pack()とかつかってないということだろう。 JBuilderもそうだけど、JFrameとかJDialogとかはタイトルバーや 四方のインセットも含めてのサイズ指定が必要。 インセットを取得してそれを計算してサイズ調整しないと 環境によって表示が崩れる。 Swingの基本は推奨サイズを指定していってその結果 ウインドウサイズが決まるというもの。 各コンポーネントも環境によって必要サイズが違うからね。 また、環境をWindowsに固定したとしてもXPと従来のクラシックスタイルとでも タイトルバーの太さとかかなり違うのは知っているだろう。
>>444 機能不足と高速と、違う次元で比べて矛盾だと思ってるようでは甘いな。
>>444 後出しじゃんけんというか、SWTがでたときはJ2SE1.3の時代。
このときのマシンパワーは低く、Pentium3/1GHzが比較的スペック高いほう。
メモリも今ほど贅沢にあったわけじゃないし、同じJREでアプリを動かしたとしても
今の環境とでは大きく差が出る。
そしてSwingも1.4になってから大幅に速度改善されて実用的になったのだが
ちょうどその直前あたりにでたのでSWTは当時としては軽かった。
ただし、どんどんSWTは重くなってるし逆にSwingはどんどん軽くなってきてる
また、ユーザーの多い環境であるWindowsは安定しているけどそれ以外が
わりと不安定だったりした。>SWT
そしてもっとも問題なのがSWTはあくまでもWindowsのアプリをJavaで
作ろうという程度のものであって作り方からまるで方向性が違う。
感覚的にはWin32APIで作ろうとするのに似ている。
業務系に多用されるであろうテーブル系の機能不足とかほかにもコンポーネントの
機能不足がかなりの問題になる場合もある。
マシンパワーの向上とVMの大幅なパワーアップが原因だな。
現状SWTのアプリがあまり作られていないことからSWT=Eclipse専用とおもっていい。
一応両方触ってみるといい。まったくべつものでびっくりするから。
>>447 なるほど、普段packつかってなかったから、知らんかった。
packして推奨サイズにされる事が、「あれ?なんでちっちゃくなったの?」って思ってた。
一つ一つ推奨サイズを指定しなきゃいけなかったのか。
>タイトルバーの太さとかかなり違うのは知っているだろう。
このあたりはちょっと余裕もってsetSizeしてた。
推奨サイズを指定してレイアウトマネージャに配置を任せてはいるけど、
ウィンドウサイズは自分で指定したかったのでそうしてた。
>>450 絶対的なサイズを扱いたいときはJFrameにJPanelをトップに貼り付ける
そのJPanelに推奨サイズを指定、JFrameにpack()をセット
あとはnullレイアウトだろうがご自由にどうぞ
余裕持ったサイズってのはWindowsだけならまだしも、Windows以外の環境を考慮すると
結構厳しいものがあったりする
Windowsでも年いった管理職の人とかタイトルバーとか外枠大きくしたりしている人も割といる
452 :
444 :05/02/09 13:53:35
Swing良くなってるんだー。 自分が使ってた頃は、レイアウトマネージャとかいうのが邪魔して、 仕方ないからグリッドレイアウトを見えないように使って自由にポトペタやったんだけど、 それは今も一緒?
Swingって遅いの?
>>451 >絶対的なサイズを扱いたいときはJFrameにJPanelをトップに貼り付ける
>そのJPanelに推奨サイズを指定、JFrameにpack()をセット
参考になりました。
ウィンドウサイズだけはキッチリ合わせられないもんだと思ってた。
>>452 >自分が使ってた頃は、レイアウトマネージャとかいうのが邪魔して、
>仕方ないからグリッドレイアウトを見えないように使って自由にポトペタやったんだけど、
今でもレイアウトマネージャは使うし、理解しなければGUIは面倒だよ。
VBみたいにやるのを想像しているならば、弊害も理解したうえでnullレイアウトでやればいいけど。
「グリッドレイアウトを見えないように」ってどんな使い方だ?
>nullレイアウト これって昔っからあったっけ? >弊害も理解したうえで 環境変わるとコントロールがはみ出る程度の弊害、と理解したけどおk?
>>455 nullレイアウトは昔からある。
Swingがでるまえから。
・絶対座標で扱うので文字のサイズとかちゃんとあわせないとダメ
・あわせたとしても特定環境でしかあわせられない
という点にきをつければいい。
VBやBCB、Delphiのように手軽に貼り付けれるし、これらもフォントサイズとか
環境をかえるとちゃんと動かないので、Windows専用とか割り切って作るなら
十分実用的。
特にWindowsとWindows以外ではOSのDPIの設定値が違うためにフォントは
問題になりやすい。
とはいえレイアウトなんて
・フロー
・ボックス
・ボーダー
の3種類の組み合わせだけで実現できるけどね。
これでできないようなのは通常の使用ではまずない。
>>453 Swingがでたときは1.1のオプショナルパッケージで環境的に非常に遅かった。
Swingでなくともインタプリタメインで一部JITがではじめたりしたがJITも
コンパイル速度が問題になったり万能ではなかった。
マシンも200MHz以下、32MBとかの時代で特にメモリが厳しかったと思われる。
メモリが少ないとGCも頻繁に入るし、世代別GC導入前なのでループ中に
GCいれたりとかあほな環境だった。
1.2で標準で取り込まれ、クロスプラットフォームな高精度なGUIがでたのはいいのだけれども
重さは1.1以上に悪化したり。
1.3でhotspot導入などで高速化、安定化されサーブレット/JSPが流行り始めて
業務で使えるVMになってきたが、クライアント分野でのパワーアップは誰も見向きもしなかった。
1.4でさらなるクライアント方面のパワーアップに加えて描画がアクセラレーションが
環境に合わせてきくようになってSwingがはじめて実用的になる。1.4.1や1.4.2と
マイナーバージョンアップするにつれて速度が向上。
サーバーVMを筆頭にVM自体がどんどん頭よくなってきたのもこのころ。
と、Swing自体の改良もあるけどVM自体の改良や1GHz超えてメモリ256M
のってるのがすでに標準とか、そういったことも影響している。
つーか、SWTをSwingの比較対象にもってくることが おかしいよね。IBMですらSWTを単体で使うような真似は ほとんどしていない。 例えばWMEではSWTの上をAWTで覆ってSWTを完全に隠蔽しているし、 SWTがメジャーになったきっかけのEclipseでもJFaceなどの ライブラリを併用している。 SWTの単独利用をIBMが正式に打ち出したのは唯一eSWTだけ だけど、これは組み込みのような貧弱な環境向け。 #しかしこれもモトローラなどと共同でeJFaceの開発が始まってるらしい。 要するにSWTは各ウィンドウシステムの差異を最小限の厚さの レイヤでおおうだけのライブラリ。Swingとくらべるようなもんじゃないよ。
比較する位地付けとしてはAWTピアのほうが近いのだろうか? となるとAWT-Swing, SWT-Swing, SWT-Jfaceといった使い分けになるのかな?
>>459 そんな感じかなあ。JFace付けてもまだSwingに比べて機能的に
足らない気がするけど。
現状ではRCPのようなアプリケーションフレームワークまで含めてアプリ
ケーション全体の構築コストを考えてどっちを選ぶかって感じだと思う。
ところで、SWTってあれだけデザインパターンが多用されているEclipse API
のなかで、ぽつんと異質なものが混じってる感じなんだよね。
あと継承不可とかコーディング規約とか。エリック ガンマの本でも
SWTのとこになるとちょっと調子狂うし。あの部分だけ、
IBMから組み込み処理系を請け負っていたOTIが組み込み用に
別途作っていたライブラリを使いまわしたんじゃないかって気がする。
ってSwingの話じゃなくてすまん。
じゃ、SWTは一時期薄いAWTのラッパとして存在したが、 異質でイビツなのでスルーでおk?
まぁスルーでOKでそ。
>>461 逆。IBMの一部処理系で、SWTをAWTで包んでいた。具体的には
Qt/motif/Win32/gtkをSWTでラップ、さらにその周りをAWTでラップ。
まぁSWTも当時の出たばかりの勢いはないのは確かだな Swingは立地クライアントで地味にのびてる アプレットでもアプリケーションでもWebStartでもいいわけで
1.4系統でJFrameの常に前面表示はできないでFA?
NetBeans4.0日本語版リリースされた模様 これでJ2SE5のさらによくなったGUI(Swing)が組めるよ 5.0のWindowsLAFの出来のよさもすばらしい・・・ 一番体感するところはJava2Dのアクセラレーションがきく描画かどうか 比較的意識しなくてもつかえるようになってるあたりか J2SE5はGC時間も早いのですんげーべんりだな
467 :
デフォルトの名無しさん :05/02/10 09:11:59
Swingが便利になったので、Javaでリッチクライアント作るのは楽勝でつか?
Swingでここ3年ほどリッチクライアントつかってますが? いまからなら1.4.2か5.0だと思うからデメリットはほとんどない 楽勝かどうかは腕次第だからなんとも
469 :
デフォルトの名無しさん :05/02/10 11:55:08
めちゃくちゃ簡単、とか、超楽勝とか逝って、Java開発者を増やしてよ。
SwingだろうがSWTだろうがDelphiだろうがVBだろうが、クライアントは楽勝じゃないなぁ。 細かい要望が多くて。 通信のタイミングとかも、考えるの大変だし。
ユーザーの直接触れる部分であるからこそしっかりつくりたいところ 見た目で張ったりかましていればなんとかなるという親父もわりといる 俺はずっとクライアントサイドかいていたから慣れてるけど、WEBアプリが 流行ったのだってここ4,5年程度だし、その前はみんなC/Sだったし 実際のところWEBアプリのほうがあらゆるユーザーの挙動を考えると大変だよ セッションなんてold世代にのこるから何も考えないとFullGC発生しやすいし
>Delphiだろうが >クライアントは楽勝じゃないなぁ。 これ恐ろしく楽勝だけど
>>472 自分で考えて作るならどれも楽勝だと思うが
>>471 そうそう、WEBアプリで良いものって面倒だよねー。
Javaで楽にC/Sなら、クライアントJDBC直接続?Java RMI?
XMLが無難なんだろうなー。
C/SならJDBC直かと 3層式ならXMLを使うけどC/Sで業務でXML直接受けるDBってあまりきかない希ガス
>3層式ならXMLを使うけど やっぱ、インターネッツに出ちゃう場合は3階層が安心? その場合はJavaにもXMLパーサーがあるからXMLが良いんだろうね。
>>465 JNI使えばWindowsでは比較的楽に出来るよ。
>>477 その状況で別OSでJNIのコール時点でエラーになるんだっけ?
それともJNI使うと、他OSで起動もしない?
>>478 たぶん
1.動的ライブラリ読み込もうとする際にリンクできねーってエラーが出る。
2.それ(1.)を無視して続けるとJNIコールの時点でネイティブメソッドが見つからねーってエラーが出る。
サンクス
>>479 なら、Win用にてきとーに作っといて、ライブラリのロード周りをきっちり作れば無問題だね。
で、ポトペタの動作はJavaとDelphiとどう?
D2005でかなり動作重くなったし、イイ勝負かな?
DLLやSOファイルは拡張子なしでロードするからそれぞれちゃんと用意していれば
まったく問題なく動く
また、ロードに失敗した場合の処理もトラップが必須になってるし
Windowsだけを考えてもそこの処理はちゃんとするものだろう
>>480 Delphiがいいというのは.NET前までだと思ってくれ
その後はもう別物
というかBCBやDelphiやってきた人にとってwindows.formsは操作感覚が非常に近い
Swingはまったく別物だけど、機能おっかけていけばこんなこともできるんだ、という感じで
機能の多さにびっくりするかもしれない
なんというかたとえるならオーナー描画の柔軟さがすべてのコントロールでできるとか
そういう感じ
> DLLやSOファイルは拡張子なしでロードするからそれぞれちゃんと用意していれば System.load(String) 使えばライブラリのフルパス指定もできるんだけどね。
>>481 やっぱ、ヘジがいたDelphiは良かったけどいなくなったDelphiはよくないってことだね。
そして、ヘジがいなかったMFCは良くなかったけど、ヘジが入ったwindows.formsはいいってことだな。
>>482 拡張しつきやフルパスだったらクロスプラットフォームが実現しにくいじゃないか
>>483 そろそろDelphiスレか.NETスレ行ってくれ。
Swingとは関係ない話題だし、暇人が宗教論争をしかけてるようにも見えるし。
Swingはヘジルスバーグのコンポーネントから非常に大きな影響受けてるわけだが。
でも結局SwingほどのGUIライブラリはないやね これ作ったやつ頭おかしーだろ(いい意味で)というくらいのライブラリだよな
>>486 ヘジルスバーグのスレでも作ってそこで雑談しろ。
ヘルシーハンバーグ
ヘルシーハンバーグ食べながら雑談か。素敵だな。
しーざーちゃんはいいものだが、そのCSクライアントという流れからは 必要性が感じられないぞ
SpringならSpringRCPかなんかが開発中だね。
レイアウトマネージャー、最初は 勝手に位置、サイズかえてんじゃねーとか 思ってたけど、わかると便利だね
>>494 だんだんJavaのGUIにはまってきてるわけですな
特にSwingのコンポーネントにはまると、もう抜け出せなくなるな
質問なんですが、 Webブラウジングクラスってどうなんでしょうか? ブラウザ作ろうかなって思ってるんですが…。 そこはSWTのBrowser クラス使うべきかな? SwingのWebブラウジングクラスの名前忘れた。 SWTのBrowser クラスの名前も違うかも…orz
498 :
デフォルトの名無しさん :05/02/14 08:42:59
>>494 それ、どう分かるのか教えてキボンヌ。だってここはSwingスレでそ。
>レイアウトマネージャー、最初は 勝手に位置、サイズかえてんじゃねーとか 思ってたけど、 これは分かる。 >わかると便利だね これ分からないから説明しる
>>500 レイアウトマネージャ(の使い方)が分かると、
(nullレイアウトで絶対位置を指定するよりも)便利だね
という意味では?
それともお前にレイアウトマネージャの分からない部分があるということか?
それなら何が分からないのか質問しろ。質問せずに「説明しろ」はこたえようがない。
>>500 >>494 じゃないが、Javaのレイアウトマネージャになれると便利だよ
ってことだろう、ウインドウの大きさを変えても自分で計算することなく
座標や大きさを勝手に計算してくれるし、プラットフォームを変えても
レイアウトが崩れにくいとかあるんじゃないのか?
>>500 つまり、お前の日本語を意訳すると、
レイアウトマネージャーは、勝手に位置、サイズかえて使いもんにならない。
レイアウトマネージャーは不要で、nullレイアウト最強。
はぁ?「わかると便利だね」?あんなもののどこが便利なのか教えてくれよ
ってことか?
みんなボンクラ杉。 レイアウトマネージャーウィザードが居るんなら、 Swingエバンジェリストとしてレスすれば良いだけ。 大騒ぎして叩くことが良いことだと思ってるだろ。 ふつーに、静かにレスしる!
>>504 他人に注意するなら自分も気をつけてもらいたいものだ
GUIえぢた使ってると、NetBeansでもJBuilderでもEclipseVEのどれでも、SplitPaneの左側が使いにくくなる。(最悪アクセスできなくなる) まぁGUIのほうでアクセスできなくても、ツリーのほうでPanel追加してサイズ指定してやればいいんだろうけど・・・ もう少しどうにかならんの?
>>506 dividerLocationを変えておけばいいんじゃない?
>>504 誰もたたいてないだろ。お前の質問の意図が分からないから
聞いているだけだろ。で分かったのか?
レイアウトマネージャを使うことで、修正が楽だったりすることもある。 FlowLayoutでコンポーネント並べて配置していたとする。 「この隙間にもう1つコンポーネント追加」って場合に、普通に追加することで 影響のあるコンポーネントも勝手にずれてくれる。 nullレイアウトで、自力でキッチリ配置してた場合には、 他のコンポーネントの配置も自分でずらしたりしなければならなくて大変。
>>509 あ、なるほどプログラムでレイアウト処理入れるの開発効率も仕上がりも落ちし、改善大変であきらめちゃったりするよね。
Delphiのコンポーネント形式の、Align=alNone/alTop/alBottom/alRight/alLeft/alClient/alCustomと、
AnchorsセットのakLeft/akTop/akRight/akBottom=true/falseのんが良くない?
うーん、それでJavaのレイアウトマネージャーと同じことができるとは思わんのだが。 それよりDelphiのActionListだったかなんだったかが欲しい。
>>510 >Delphiのコンポーネント形式の、Align=alNone/alTop/alBottom/alRight/alLeft/alClient/alCustomと、
>AnchorsセットのakLeft/akTop/akRight/akBottom=true/falseのんが良くない?
Delphi知らないんで教えて欲しいが、これはどういうレイアウトをしてくれるんだ?
上部とか下部にぴっちりおくというのであれば、BorderLayoutのNORTHとかSOUTHで指定する。
>それよりDelphiのActionListだったかなんだったかが欲しい。
これもなにをしてくれるもんなんだ?
>>511 よく知らんが、AbstractActionとjava.util.Listではだめ?
使い勝手はIDEの差によるものだと思うが。
>>511 いやいや、レイアウトマネージャで全体設定するよりも、
コントロール1個1個が空気嫁んで場所移動したり大きさ変えれば良いんでわないかと。
>>514 コントロール自身が、自らの配置を決めるような仕組みの場合、
他のコンポーネントの影響を考慮しづらいのでは?単純な配置しかできなくなりそう。
「コンポーネントAのサイズがでかくなったから、Bのコンポーネントの位置がずれる」とかは、
BがAのサイズ変更を受けて行なう仕組みではなく、
やっぱり全体管理するレイアウトマネージャーがやるべきだと思う。
面倒だけど、GridBagLayoutなんかは、コンポーネントそれぞれに
詳細なConstraintsを設定することで、意図を満たしているのでは?
詳細すぎて面倒くさいけど。
>他のコンポーネントの影響を考慮しづらいのでは?単純な配置しかできなくなりそう。 これが間違いであることをDelphiアプリが証明している。 Panelの上にPanel貼りまくりだけどね。 >やっぱり全体管理するレイアウトマネージャーがやるべきだと思う。 ”やっぱり”の結論しか出せないなんて頭カチカチだね。
>詳細すぎて面倒くさいけど。 これだと、 >プログラムでレイアウト処理入れるの開発効率も仕上がりも落ちるし、 >改善大変であきらめちゃったりするよね。 といった要求を満たさない。
>>516 単純な配置しかできなからPanelの上にPanelを貼りまくることになるのでは?
まぁ、それが悪いと言うわけではなく
>他のコンポーネントの影響を考慮しづらいのでは?単純な配置しかできなくなりそう。
が間違ってるかどうかというだけの話だけどね
>>517 テキストエディタを使ってる人はGridBagLayoutを使わずに
別のLayoutを使うだけの話では?
>テキストエディタを使ってる人は これダメダメじゃん。GUIはGUIでポトペタとエディタでの修正と両方出来ないと。
>>他のコンポーネントの影響を考慮しづらいのでは? >>単純な配置しかできなくなりそう。 >が間違ってるかどうかというだけの話だけどね 複雑なGUIの場合Del/VCLが最強。
>>520 ここで突っ込んでもしょうがない、その人に直接言わないと意味ないよ
>>521 なんか関係の無い引用してないか?
しかも、思いっきりスレ違いじゃないか
>>523 レスの流れなのにスレ違いと指摘とは、藻舞こそレス間違い。
何が優れてるかなどと言ってないのに最強だというのが レスの流れか いくらなんでもそんな釣りは無いだろう
Swing/レイアウトマネージャ vs VCL/Align & Anchors の流れだよ。
>>516 >>他のコンポーネントの影響を考慮しづらいのでは?単純な配置しかできなくなりそう。
>これが間違いであることをDelphiアプリが証明している。
>Panelの上にPanel貼りまくりだけどね。
「GUI全体で複雑に配置できない」という意味ではなく、レイアウトとして単純なものしか実現できないという意味でした。
複雑なレイアウトマネージャ使わずに、BorderLayoutみたいな
単純なレイアウトマネージャをPanel重ねまくってやるのはダメかい?
>>やっぱり全体管理するレイアウトマネージャーがやるべきだと思う。
>”やっぱり”の結論しか出せないなんて頭カチカチだね。
カチカチか。すまん。なぜ、”やっぱり”かと思ったかというと、
その前のほうに書いてあったように、あるコンポーネントのサイズが決まるのは、
他のコンポーネントの影響も受けるわけだ。
となると、影響を受けあうコンポーネント同士の配置を決めるのは、
コンポーネントを保持しているコンテナがその役割を担うべきで、
コンポーネントがする仕事ではないと思ったから。
考え方を変えれば、DelphiのPanelの場合は、
レイアウトマネージャに相当するものが1つだけあって、各コンポーネントに対して、
>>510 のようなConstraintsを設定可能なモノとも思えるのではないかと。
>>527 レイアウトマネージャはPanel(の拡張バージョン)として使える、という意味?
>>528 というかJPanelというのがSwingにある
>>529 自分が使ってたときはペイン(Pane?)てのしか無かった気がするが、Java2で増えた?
で、Delphi並みにポトペタできるようになった、と?
>>530 Delphiを使ったこと無いからわからんが、多分Delphiよりめんどいだろうね
このスレでポトペタを検索すれば、その感想とかでてるから見てみたら?
多少めんどくても良いけど、 レイアウトマネージャとJPanelを何層もネスト出来るんなら、 逝こうできそう。 (リッチクライアント作りたいので)
> 自分が使ってたときはペイン(Pane?)てのしか無かった気がするが、Java2で増えた? Java2になった後は触ってないのか……
つかパネルばっかりになって発狂しそうだよ('A`)
>Java2になった後は触ってないのか…… Java2でレイアウトマネージャが良くなったということ?
Javaのレイアウトマネージャは特定のコンテナ部品が提供する機能ではなくて、 コンテナごとに設定されているもの、だということを理解していない人がいる ように見える。
>>512 >>それよりDelphiのActionListだったかなんだったかが欲しい。
>これもなにをしてくれるもんなんだ?
ボタンとかメニューとかのテキスト・アイコン・使用不可・イベントをまとめてくれる。
ボタンとメインメニューとサブメニューで同じ項目があるときに、テキストとかイベントとか、まとめれて非常に便利。
Delphiが最強だろうがそうでなかろうがどっちでもいいんですが、 Delphiでの配置の仕方に似ているSpringLayoutというものもSwingには存在します。 新しめのレイアウトなんで知らない人も多いかと思いますが。
>>537 javax.swing.Actionと機能的に何が違うの?
>>539 >>513 の通り、ActionとListを組み合わせた不可視コンポーネントのようなもんだろうか。
ActionListをペタッと貼り付けて、ダブルクリックすると、Actionの一覧が表示された
ダイアログが出てきて、追加、編集、削除とかできると。
Delphi使ったこと無いから知らんけど。
いまどきJava2で・・・といわれてもな もうJava2がでて何年たってるとおもうんだよ 俺はBCBもDelphiもJavaもやってるからわかるが、 DelphiやBCBはやはり方向的にはVBのように絶対座標でナンボの世界だよ Windowsだけを意識していればいいので問題は少ないけど、DPIまわりでこけることも多少。 ただ、Swingに一番ほしかったのはDelphiやBCBのクライアントウインドウプロパティかと 特定のサイズにするのにJPanelをトップレベルに貼り付けてpack()とかinsets指定とか とっつきわざと悪くしているだろうと思われ デフォルトレイアウトもVBユーザー取り込むならNullでもよかったんじゃないかと 俺はnullレイアウトはもう5年ほどつかってねーけどな
なんかよく分かってない人がいるようなんで書いとくが、Swingのレイアウトは JPanelごとに指定できる(というかそうするもん)。一つ一つは単純なレイアウトだが、 JPanelを組み合わせて複雑なレイアウトを作る。 NORTHにJPanelはりつけて、そのJPanelにはFlowLayoutを適用すれば、画面上部に ボタンを並べる領域を作れる、とか。当然このJPanel内にさらにJPanelを組み込むこと もできる。 GridLayoutでまとめてやる手もあるが、まずはパネルの組み合わせで組み立てられな いか考えたほうが早いな。
GUIツールとか使ってみればすぐわかると思うが、 パネル(コンテナ)1つに対して、レイアウトマネージャを1つ設定できる。 #これってJava2以前から変わってないと思うが?? CotentPaneにBorderLayoutを設定して、 NORTH、CENTER、SOUTHにJPanelを1つずつ配置。 NORTHに配置したJPanelはFlowLayoutに設定して、横にボタンを並べて配置。 CENTERのJPanelは、またBorderLayoutを設定して...
レスが、かなりかぶってしまった。
面白いかぶり方だな
レイアウトマネージャわからんやつはとにかくNetBeansとかでぺたぺたはりつけて プロパティいじって挙動を把握してあらゆるGUIがこれだけで作れると確信するところまで いければ万々歳 理解できないならプログラマやめたほうがいいかも
NetBeansでNullLayoutでペタペタして、気が済むまでレイアウト調整したらGridBagLayoutに変更。 これ。
>>548 それってきっちりできるの?
微妙な1ピクセルのずれなんかを、内部余白使ってGridBagLayoutで正確に
再現されたらかえって面倒だと思う。
nullレイアウトのままではなく、そこからGridBagLayoutに変更することで、
どんな利点があるのか?また修正するときはnullレイアウトに戻さないとできないんじゃないの?
nullレイアウトを使わずに、レイアウトマネージャを使えばいいってもんではないと思う。
自分もNetBeansでレイアウトを考えるけど、 あるていどレイアウトのアイデアが固まったら、 GridBagLayoutを使って作り直す。 もしかしたら548が言いたかった事と同じことかも。
551 :
デフォルトの名無しさん :05/02/15 09:18:08
一旦GridBagLayoutになっちゃったら、もう手直しし難くなることない? 画面てドラスティックに変えたいじゃん。
>>551 初めからGridBagLayoutで作っておけば、
このコンポーネントは、gridx=1, gridy=2にあって gridwidth=2で...
ってある程度、ある程度見た目どおりに設定できるが、
nullレイアウトから、変換した場合、微妙なズレのせいで、x,yがずれてしまうしまい修正は難しいと思う。
JBuilderでやったときはそうだったけど、NetBeansはそうじゃないのか?
単にnullレイアウト使うのを避けてるだけで、
レイアウトマネージャーを使っている意味ないと思うが。
潔くnullレイアウトのままのほうが、まだ修正可能でよい気がする。
GridBagLayoutはNetBeansであっても後々の修正が面倒なので俺は使わない 組み合わせでやったほうがはるかに楽
554 :
デフォルトの名無しさん :05/02/15 10:02:06
じゃぁ、Swingがダメとは言わんが、レイアウトマネージャという代物はダメダメじゃん。
>>554 まぁ、GridBagLayoutをあまり使いたくないと言う人もいるわけですよ
GridBagLayoutを使いたくなかったらBorderLayout、FlowLayout
、GridLayoutを組み合わせればいいんです、多分。
ぼーだーとぼっくすとふろーの3つですべての画面つくってま
>>556 その辺が分かりやすくて妥当。1.4からになるけど、SpringLayoutも覚えて損はない。
ひょっとして、レイアウトマネージャを満足に使えない人って、 1つのコンテナの1つのGridBagLayoutで全体のレイアウトを やろうとしてるんじゃないだろうか……。
>>558 >レイアウトマネージャを満足に使えない人
は、GridBagLayoutの使い方すら知らんって。
デフォルトのレイアウト(FlowLayoutやBorderLayout)のまま使って、
「どうやってサイズ変えるんだよっ!使えねー!」
って思ってるのさ。
>1つのコンテナの1つのGridBagLayoutで全体のレイアウトを
それはそれで、そんなに間違ってないと思うけど。
それができるのがGridBagLayoutで、
単純にHTMLのTABLE程度の配置だったら、GridBagLayout1つで済ませちゃうよ。
Panelは少ないほうが軽くなる?
そりゃ、JavaVMが利用するウィンドウシステムに依るだろ。
GridBagLayoutが使えてレイアウトマネージャが満足に使えない人って、なかなか特異だな。
GridBagは修正が入ると目も当てられないので使わない方向で
GridBagLayoutって便利だと思うけどな。 GridBagで修正が大変ってレベルまで変更を強いられるのは クライアントと事前の打ち合わせができてないだけじゃないの?
俺は割とGridBagLayout好きだけど、コントロール1つ1つにgridx, gridYを指定していることが、 後の修正を困難にしていると思う。 RELATIVEとか、REMAINDERを使えばいいのか。(使ってなかった)
ところで、NetBeansじゃない人はGridBagLayout使うのにどうやってるの? JBuilderにはなんかいいツールついてる?
ソースコード手書きで・・・。
>>557 SpringLayoutが追加されていたの知らなかった・・・。
さらっとAPIを読んだだけだけど、
簡単なダイアログを作ったりするのには便利そう。
>>566 紙にレイアウトのイメージを書いて、それ見ながらテキストエディタのテンプレート
と入力補完つかってゴリゴリと。
>>566 eclipse+VE
地震で目が覚めたよ・・・(こんなこと書いてる場合じゃないが)
GridBagLayoutは手書きしたくないなぁ。
572 :
デフォルトの名無しさん :05/02/16 09:26:56
>>564 >GridBagで修正が大変ってレベルまで変更を強いられるのは
>クライアントと事前の打ち合わせができてないだけじゃないの?
こういう考え方ヤだな。
大幅に変更する必要があったら、スルんだよ。
クライアントがどうこうじゃなくて、
逆にパッケージだと先行開発であって承認クライアントが居ないわけだし。
だから、画面は大幅変更の可能性がある、という前提じゃないと。
逆に、データ構造は何があっても大幅変更が無いように設計しとく、と。
>>566 NetBeansの指定方法を知らないから、逆に教えて欲しいけど、
JBuilderは、普通に置く場所でgridx,gridyが決まったり、
つまんで伸ばしたりできる。あとConstraintsを設定するダイアログがある。
ダイアログで設定するのが、無難で確実なんで俺はそれを使っている。
Eclipseも似たような感じだった。
>>571 でも手書きでもあるi程度、楽できるようにはなっていると思う。
GridBagConstraintsは、1つ1つインスタンス生成しなくても、使いまわしできるし、
REMAINDER使って、改行しながら配置するってのも簡易的だ。
>>572 単に設計が甘いだけでしょ。
画面全体をひとつのGridBagLayoutにまとめるとか無謀なことしなければ
困ること無いでしょ。
それでも困るほどの修正なら作り直した方が早いんじゃないの?
>>574 実例を書いたんでなくて、上記の考え方を否定しただけなんだが。
冷静に読んで貰えば納得できるないようだと思うが。
GridBagLayoutの使い勝手の話をしてるんじゃないの? 画面の修正の是非なら、必要なら修正するに決まってるでしょうが。 修正が大変だから使いにくいという前に利用方法・範囲の見直しや 事前に設計をよく練るなど利用する側にも工夫が必要だと言ってるだけなんだが。 何か変なこと言ってるか?
修正が入るのを念頭において開発するという場合影響範囲を少なくするために パネルで区切るなら、最初からGridBagLayoutつかわないほうがいい 何か変なこと言ってるか?
>>577 >画面全体をひとつのGridBagLayoutにまとめるとか無謀なことしなければ
>困ること無いでしょ。
と、書いてあるんだが。意味が分からないの?
あんたの文章を読んで(あんたが)GridBagLayoutが使えない訳も
よく理解できた。まあ、好きにすればいいよ。
へんなのがわいてるな
RADとレイアウトマネージャやAlignとの相性とか考え方話してるのに、 GridBagLayoutを前提に、大騒ぎして叩くことに必死になる変なのがわいたなー。
大漁だな>>572 て書こうと思ったが,どうやら本気で書いてるのか... 572の勝手な想定と激しい思いこみなんて誰の参考にもならないので消えてよね。
>>581 大騒ぎして叩くのに必死な香具師は要らないというのが読めないのか?
クスクス
>>556 WMPのスキンのファイルとか見ると
レイアウトマネージャ自体が重量コンポーネント時代のなごりのようだな
じゃ、これからJavaの人はレイアウトマネージャ無視しておk?
>>581 改めて見直したら
>>574 がつりな様な気がしないでもない
でも、他のレイアウトは文句は出ないけど、Gridbagだけはまぁ昔からいろいろとあるな
>>584 レイアウトマネージャが必要な場合の用件とお手軽スキンで遊ぶ用件とでは求めるものが違う
OSによってDPIが違うし同じWindowsであっても絶対座標は危険
>>585 さすがに無視は無理
VBあがりでプラットフォームが開発OSと運用OSとまったく同じならいらないかもしれんが
XPと2000ですらかなり違うしなぁ
>564 は理想論。 >572 は経験から言っている実際論者。 どっちも正しいんだけど、自分的には >572 のほうが実社会に則したレスだと思う。
スレが伸びてると思ったら・・・orz コーダーとプログラマの視点の違いってやつか。 普段どういう相手と仕事してんだよw予算とかw まあそろそろスレ違いなんでこのへんで終わりって言うことで。
実は全然わからなくてみてたんだけど、
ごめんなさい、589の続きはコーダーとプログラマってどうちがうの?
コーダーは仕様どおり打ち込むだけ プログラマは創造するとでも言っておくか。
コーディングとプログラミングの違いだよね? コーディングはほんとに書くだけ。 プログラミングはクラス設計も含めて。 要するに使えないPGと使えるPGの違いってことか? 実は俺もよく知らんw 誰かまともなレスキボン
>>590 人に聞く前に調査する。
クライアントとはよく話し合う(顧客がDQNでも、短納期でも、低予算でもやりかたはある)。
きちんと設計してから開発に取り掛かる。
これを理想論とかいってる間はコーダー(=ソルジャー)から抜け出せないよ。
先ずはググってみ。
いやコーダーとプログラマというより、プログラマとSEなんじゃないか? XPなのかウォーターフォールなのかによっても違うし。いずれにしても 議論としては不毛だと思う。どういう仕事分担なのかによって違うことだし。 ただレイアウトを決める行程が現状あいまいだという問題意識は重要だと思う。 GUIアプリのGUIデザインとかWEBアプリのHTMLデザインって誰の仕事なのか わかりにくいことがある。WEBアプリだとWEBデザイナが入ってくることがある けど、GUIデザインはねぇ。
NetBeansのAbsoluteLayout最高!!
NetBeansの評判の良いGUI設計がどんなもんかと、インストールしてみた。 Forteの時に一度使って、速攻消した覚えが歩けど、 想像以上に軽くてびっくりしたよ。Eclipseばっかり流行っているけど、 NetBeansも捨てたもんじゃないとおもった。 GUI設計の部分もクセがなくて、気に入った。 コード記述する部分は、ダサい。 スレ違いすまん。しばらく使ってみます。
>>596 NetBeansでGUI作って、Eclipseでコーティングする人はうちにも結構いる。
NtBeansはJComponentsを継承したクラスをクリップボードにコピーして GUIエディット画面ではりつけれるのが便利
>>586 WMPよりお手軽じゃないあなたのソフトの用件が気になるが
もうSwingはSynthで敗北宣言したじゃないか
レイアウトマネージャは実装の詳細に使うものだ
ボックス以外はいらないよ
>ボックス以外はいらないよ 釣れますか? Synthも含めてSwingだし、レイアウトマネージャが要らないということとは別次元かと
Synthって何だ? それがあると、レイアウトマネージャレスで逝けるかい?
SynthってXMLでSwiingのL&F作れるやつじゃないの?
わかりやすくいえばスタイルシートのようなものだな
HTMLのtableタグが書かれたXMLファイルを元にGridBagLayoutを設定して レイアウトしてくれるパネルを作ったんだけど、自分で言うのもなんだけど便利です。 tdタグとGridBagConstraintsが対応して、こんなメリットがあります。 ・X, Y座標を直接書かなくていいんで、間にコンポーネント追加しても変更点が少なくて済む ・tableタグの入れ子構造に対応してるので一つの設定ファイルで細かいレイアウトまでできる ・コードとレイアウト情報を分離できる ・設定ファイルをHTMLとしてブラウザで表示するとレイアウトが見れてちょっと面白い GridBagLayoutを理解していて、直書き派の人には向いてるんじゃないかと。 ドキュメント書くの面倒で公開してなかったんですが、試してみたい人います?
>>603 それをいうならXAML,XULでしょ。
「スタイルシートのようなもの」ってのが誰でも理解しやすく一番手っ取り早い たとえばラベルのフォントとか色サイズなどをコードの中ではなくXMLの中にかいておくわけだから もちろん、コードの中にそのボタンとかラベルとかを今までどおりに配置していく あくまでも独自LAFを作るためのものだよ
>>606 マジで?スマン。XMLの例見て勘違いしてた。
XMLからGUIを生成するわけではないのね。。。
>>605 は無視してください。
レイアウトマネージャの話になぜSynthが出てくるのか分かっていない私。
すべては
>>599 が振った話
レイアウトマネージャとLAFは直接的には関係ないかな
611 :
デフォルトの名無しさん :05/02/18 00:18:02
WinXP上でのUIManagerのデフォルトってクラシックスタイル? なんか俺の目が悪いせいか、そう見えるんだが…。 まぁいいか。
1.5で使ってるがXPスタイルになってるよ。 1.4はワスレタ。
613 :
611 :05/02/18 00:24:39
>>612 即レスd。
じゃあ1.4なんでクラシックってことか。
なるほど。
ここでさらなる疑問。
NetBeans入れてるんだが、
なぜこいつは、
XP ス タ イ ル な ん だ ?
まぁ、いいか。
615 :
611 :05/02/18 01:20:47
>>614 d。
やっぱりSwingerに悪い香具師はいないな。
また何かあって解決できないときはヨロ。
616 :
デフォルトの名無しさん :05/02/21 10:36:26
色んな意見が出たところで、レイアウトマネージャとJPanelの使い方の必勝パターンを整理してWikiしる。
必勝パターンが存在すればいろんな意見がでることもないだろう
BorderLayout、FlowLayout、BoxLayoutの組合せでレイアウトすること。 以上
GridBagLayoutによる作り直しのメリットは軽いから? 最近のVM上でも重要なメリット?
粘着君がいんしたお。
いつものごとく618よりいいワザを誰も披露できないという
実際その組み合わせで不満ないからな
実際問題としてレイアウトを組み合わせるのが通常の使い方だろ。
GridLayoutを使ってた。
適材適所で使い分ければ良いだけ。 どういう画面を作りたいかも示さずにレイアウトマネージャの話をしても意味無し。
618のワザって、レイアウトマネージャの中にレイアウトマネージャとネスト?
>>628 技ってほどのことでないだろ。
パネル(コンテナ)とレイアウトマネージャは1:1
BorderLayoutのパネルを1枚。 この上に、
・NORTHの位置に、FLowLayoutのパネルを1枚。
・CENTERの位置に、BoxLayoutのパネルを1枚。
・SOUTHの位置に、FlowLayoutのパネルを一枚
レウアウトマネージャの中っていうかパネルを重ねるの
628みたいなのって、やっぱりレイアウトマネージャと コンポネントの区別が付いてない予感。
divとpanelって似てない? 似てないか。
JComponentを継承して新しいコンポーネントを作ってるんだけど JScrollPane(JViewport)での描画領域を自分で作ったコンポーネントで 知るにはどうしたらいいの? ChangeListenerを使って外部のJViewportから教えてもらうしかないの?
>>632 詳しい仕様が良く分からないけど、
その独自コンポーネントの仕様は、JScrollPaneに依存するという前提なの?
依存するという前提ならば、JScrollPaneの参照持つ(必要なときに取得する)とか、
Listener追加する(常にJScrollPaneから通知してもらう)とか、好きにして良いと思う。
そうでないとしたら、その独自コンポーネントの仕事じゃないと思う。
635 :
628 :05/02/23 11:16:39
わかりました。 レイアウトマネージャと言えどJPanel等と対であって、 JPanel貼ってその中にJPanel貼って、と等価と。 つまり、DelphiのAlignとPanelの方が最強。
はぁ? まあ自分が最強と思ってるんならそれでいいけど。
>>635 つまり、自分がDelphiしか使えないからDelphi最強と言って、
使いこなせないJavaを否定したいわけか
Swingは軽量コンポーネントだから、パネル何枚貼っても ネイティブウィジットを消費しないし、それでOKだと 思うんだが、なにが気に入らないんだろ。
Delphiなんかと同等だと思うけどな。 Delphiの場合 ・Alighなんかが指定できる唯一のレイアウトマネージャがある ・それしか選べないからレイアウトマネージャという概念は使わない Swing/AWTの場合 ・シンプルなレイアウトマネージャや、複雑なレイアウトマネージャが色々ある ・パネル(コンテナ)単位でどれを使うか選べる。 ・Delphiと同じようなレイアウトマネージャはない(作ることは可能)
632じゃないよ、名前欄間違えてるorz
>>632 Listenerでいいと思うんだが、何かだめなのか?
Delphiのalignって所詮ボーダーレイアウトと同じじゃないの?
>>641 > Delphiのalignって所詮ボーダーレイアウトと同じじゃないの?
俺も詳しく知らないんだけど、昔使ったときは、そんなもんだと思ってた。
実際のところ、Delphiのレイアウトはどんなもんなんだ?
643 :
632 :05/02/23 19:07:27
>>633 ,640さんありがとうございます
使い道が限られてるものなのでJScrollPaneに依存させて、Listenerで通知してもうらことにしました
644 :
デフォルトの名無しさん :05/02/23 19:37:46
>>644 スレ違いだが、まとめ役が妄想厨で
スタッフ集めて自分の欲しいものを作ってもらおうってやつか。
途中でアボンするのが目に見えてるな
646 :
デフォルトの名無しさん :05/02/24 14:24:24
Swing でMSNのようなメッセンジャー(家庭内LAN内オンリー)を作りたいのですが、 参考になるHPは無いでしょうか。浅煎り珈琲は読みました。
>>646 通信部分はSwingとは関係ないし、Swingを使ったGUIの知識はメッセンジャーに限定されない。
Javaで通信する方法と、Swing一般を調べればいいんじゃないかな?
>>647 ありがとうございます。Swing 一般は独自に勉強する事にします。
NetworkもCではSocketプログラミングは触っていたのでこれも独自に
勉強してみます。ただ、基本を学んでそれを応用に、という点で
不安が残ります。
HPももう少し自分で探してみます。
(もし)どこかご存知の方いらっしゃいましたら教えて下さい。
>>641 Delphiのレイアウトはalignじゃなくてanchorじゃないかな。
DelphiというかVCLにはalignもanchorもあるから強いんじゃない?
まぁ、Delphi自体が強いか弱いかという問題は別としてね。
盲目的に GridBagLayout でせっせと並べてたけど 確かに drastic な変更には対応しづらいものがありますね。 でもまぁ、その時はその時で、かな。どっちみち辛いし。
>>654 俺は、GridBagLayoutも便利だから、それじゃないと困るところでは使うべきだと思う。
ただ、GridBagLayoutがどんなレイアウトでも出来るからといって、これ1つで画面全体を
レイアウトしてしまうと、変更に弱いからしない。
GridBagLayoutで簡単にできることを、無理に使わずにやるのも無駄。
当たり前だけど、基本は、
>>618 の組合せで、
必要に応じてその中にGridBagLayout付のパネルも組み込まれるっていうのがいいと思う。
あなたの名前:[ ] email:[ ]
住所: [ ]
電話番号: [ ] Fax: [ ]
AAだとうまく表現できないけど、こういうレイアウトが、GridBagLayoutの得意分野と思う。
ようするに、HTMLのテーブル。
>>655 それって
>>618 の組み合わせでいいじゃない
boxで縦に並べて横方向へはflowやboxで
>657 力点置かれてるのは > GridBagLayoutで簡単にできることを、無理に使わずにやるのも無駄。 この部分だと思います。 GridBagLayout なら 1 Panel で出来るけれども 組み合わせ使うとその分複雑になると言うことで。 もちろん、使いやすいと思うほうを使えば良いわけですが。
これから swing はじめようと思っていたのだが、 AWT というやつはあらかじめ習得しておく必要があるのですか?
>>658 それ読み方違ってる。
GridBagLayoutが負けて、DelphiのVCL形式になった、と。
Delphi形式とはコンポとかコンポであるPanel張り合わせ、
その1つ1つがAlignとAnchorを持つ、と。
>>659 ない。ついででよい。
NetBeansあたり使って、ぼこぼこ置いてみて、どんな役目するのか知っとくだけでいい。
Swingも最初はNetBeansでぼこぼこ置いてみて、どんな役目するのか知っとくだけでいい気がする。
>>660 それは読み方どころか、結論の出し方自体が間違ってる気がする。
ていうか 660 の読み方を教えてください。 最近の Java GUI は Delphi/VCL 的な レイアウトの仕方をサポートするようになったんですか?
>>655 SpringLayoutの分野じゃない?
>>658 たとえばその中間に1行追加しようとする
ならばパネルの組み合わせのほうが楽ではないか?
ぽとぺたで作るならばNetBeansであろうともGridbagは多少コツがいる
>>665 それで、縦をそろえたければ?
Panelの組み合わせだと大変だと思うけど。
GridBagLayout使うべきだというわけでもなく、
「GridBagLayoutを使うととても楽な例もあるから、小さい範囲でくらい使ってもいいでしょ」
というのが俺の考え。
たとえGridBagLayoutの苦手なパターンの修正が発生しても、影響が小さい範囲で。
>>657 AAでキッチリ表現できていないんだけど
・あなたの名前、住所、電話番号のテキストボックス部分を、キッチリ縦でそろえる
・email、Faxのテキストボックスを縦でそろえる
ということを考えた場合に、PreferredSizeで、縦と合うように指定するの?
もちろん、そのやり方でもいいんだけど、GridBagLayoutを使う場合と比べて、
次のような修正があった場合に手間がかかると思っている。
「あなたのお父さんの名前」というような長いラベルの行が増えた場合、
「あなたの名前」、「住所」、「電話番号」、の3つラベルの幅を、
一番長い「あなたのお父さんの名前」にあわせなければならない。
>>655 ごめん、そうかもしれんけど、理解していなくて使ってない。
IDEもあんまり対応してないし。
勉強しときます。
>>665 その通りだと思う。だからあんまり大きい単位では使うべきではない。
>665 666氏の言うように縦をそろえたい様な場合は (追加される一行を含め、全体がゆるい格子状に配置されてるとみなせる場合) 迷わずそのまま同一パネルに乗っけてしまいます。 手書きだと Constraints の修正がしんどいですけど VisualEditor だとその辺りは勝手にやってくれるので、まぁ許容範囲です。 縦位置があからさまにズレるような場合は (ゆるい格子の一部とみなすことが出来ない場合) おっしゃる通り、間にパネル挟みます。 適材適所と言うことで。
>>666 縦は普通にそろえてるよ
推奨サイズ指定してればいいだけだし
要はどんな配置しても望むレイアウトが実現出来ていれば概ね問題ないって事だな。 どうしても必要ならレイアウトマネージャ作ったっていいわけだし好きにやればいいんじゃないの。 ところでlook&feelを自作したいんだが参考になりそうなサイトあったら教えて。
>>671-672 サンクス。やはりそのくらいしか情報ないのか。
仕方ないので自力でソース読みながら試行錯誤してみるよ。
LAF自作しなきゃならないってのがあんまりないからなぁ なんかあってもSynthいじる程度で大概済むしね
675 :
デフォルトの名無しさん :05/03/08 14:28:28
JComboBox の編集不可時の色を変えようとしているのですが、どうにも出来ません。 JComboBox#setUI() を使えば良いのかと考えたのですが、 最初に UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel")を設定しているので、 WindowsComboBoxUI を継承しただけでなにもいじってないクラスのオブジェクトを myComboBox.setUI(new MyWindowsComboBoxUI()); のように与えてみると、見た目が変わってしまいました。 おかしいと思い、 myComboBox.setUI(new WindowsComboBoxUI()); とやってみましたが、これも見た目が変わってしまいました。 Look&Feel を個別に変更する方法として、以上のようにするのは間違っているのでしょうか。 どのようにすれば変更できるのでしょうか。
>>675 > JComboBox の編集不可時の色を変えようとしているのですが、どうにも出来ません。
編集不可にする時に
myComboBox.getEditor().getEditorComponent().setBackgound(color);
とかで好みの色に変えるのではダメなん?
試してみましたが、 myComboBox.getEditor().getEditorComponent().setBackgound(color); myComboBox.getEditor().getEditorComponent().setForeground(color); による色指定では、編集不可時と編集可能時両方とも色を変えることは出来ませんでした。 myComboBox.setBackgound(color); は編集可能時デフォルトで白い箇所の色を変えてくれるのですが、 編集不可時は中の部分は色を変えず中途半端に色を変えるようになってしまいます。 myComboBox.setForeground(color); は編集可能時は機能しますが、編集不可時は全く機能しませんでした。 バージョンは 1.3.1 です。
JTextField field = (JTextField)combo.getEditor().getEditorComponent(); field.setOpaque(true); field.setBackground(new Color(225,255,225));
675氏の最初の段落で説明されている状況が いまひとつよく分からない。
>>679 俺も良く分からんのだけど、
--------------------
(WindowsLookAndFeel場合において)
JComboBoxは、WindowsComboBoxUIを使っていると思うので、
WindowsComboBoxUIを継承しただけのクラスを作り、JComboBoxにsetUIしたら
見た目が(WindowsLookAndFeelとは)違うものになった。
おかしいと思い、(継承せずに)myComboBox.setUI(new WindowsComboBoxUI());
としても、見た目が(WindowsLookAndFeelとは)違うものになった。
--------------------
ということだろうか?原因は俺も知らないけど。
>>675 「見た目が変わった」っていうのが、どうなったのか不明。
もうしわけございません。 WindowsLookAndFeel を設定したいたつもりが、MetalLookAndFeel になっていました。 MetalComboBoxUI のオブジェクトをそのまま JComboBox#setUI() に与えてみたところ、 とりあえず見た目はかわらなかったので、それからどうにか出来ないか模索中です。 ((JTextField)combo.getEditor().getEditorComponent()).setOpaque(true); では出来ないようでした。
>>681 setUIしたあと、SwingUtilities#updateComponentTreeUIしてみたら?
JComboBoxだけ変えても内部のEditorなんかのコンポーネントにも、
setUIを波及させないとだめなのかも
UIManager.getDefaults().put("ComboBox.disabledForeground", Color.red); UIManager.getDefaults().put("ComboBox.disabledBackground", Color.green); combo.updateUI();
combo1.setEditable(true); UIManager.getDefaults().put("TextField.inactiveForeground", Color.green); combo1.updateUI(); final JCheckBox c = new JCheckBox("aaaaaaaaaaa"); c.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { if(c.isSelected()) { combo1.setEnabled(false); UIManager.getDefaults().put("TextField.background", Color.red); }else{ combo1.setEnabled(true); UIManager.getDefaults().put("TextField.background", Color.white); } combo1.updateUI(); } }); } });
ありがとうございます。 UIManager.getDefaults().put("ComboBox.disabledForeground", Color.red); combo.updateUI(); で色を変えることができました。 DefaultMetalTheme#addCustomEntriesToTable(UIDefaults table) をオーバーライドして table.put("textInactiveText", new ColorUIResource(255, 0, 0)); というのを試していたのですが、それで出来ずに諦めようとしていたところでした。
UIManager.setLookAndFeel(lnf); for (Frame f: Frame.getFrames()) { SwingUtilities.updateComponentTreeUI(f); } とすると全てのフレームとその中の部品が再帰的にたどられて L&Fがlnfになりますが、そのあとおもむろにポップアップメニュー (setComponentPopupMenuで設定してあるもの)を開くと、L&Fが古い ままです。 理屈は分かるのですが、なんかアンバランスな結果になりますね。
JTableでTabキーとかでセルを移動した時、もとからの文字列をいつも自動的に選択状態にしたいのですがどうしたらいいのですか?
DefaultCellEditorを継承して、FocusListenerのfocusGained発生時に 全部をマークするようなセルエディターを作って、 テーブルにsetCellEditorメソッドで設定してやればいいよ。
DefaultCellEditorを使うのなら、DefaultCellEditorを継承しなくてもコンストラクタで、
>>689 の書いた機能をもったJTextFieldを作って渡せば良い。
もしくは、getTableCellEditorComponent()のメソッド内で、
selectAll()してからreturnするだけでもいいと思う。
691 :
688 :05/03/14 22:11:20
JEditorPaneでHTMLを表示したときに、hyperlinkUpdateイベントを処理してやればリンクの処理はできるんですけど、フォームに入力したときの処理ができません。 どうやったらいいのでしょうか?
httpclientとかでいいんじゃない
694 :
デフォルトの名無しさん :2005/03/21(月) 21:24:54
それは、どのリスナーのイベントになるのでしょうか?
いや、httpclientは、HTTPサーバへの接続を簡単にするための別フレームワークですから。(Apacheの提供) フォーム入力の送信時にhttpUnit使えってことでしょう。
696 :
695 :2005/03/21(月) 21:36:52
>入力の送信時にhttpUnit使えってことでしょう。 すまんhttpclientだった。
>>695 えっと、やりたいことはJEditorPaneでHTML表示したときのフォーム入力時の処理なんで。
接続が簡単になっても、イベントの処理ができないことにはどうにもならんっす。
698 :
デフォルトの名無しさん :2005/03/22(火) 22:20:50
JTableでセルをクリックしたときの セルエディターのフォーカス等のイベント は取得できるんですが、 キーを押して文字入力時のイベントが取得できません。 なにかコツでもあるんでしょうか?
>>697 その「フォームに入力した時の処理」ってのを簡単にでも説明した方がいいと思う。
もしかしたらイベントもいらんかもしれないしさ。
>>699 JEditorPaneで例えばGoogleのサイト表示したときに、検索フォームに入力してボタンを押したときの処理です。
>>700 どーにかすれば、検索ボタン(JButtonかな?)の参照にたどりつけるのでは?
>>698 まず、君がどうやってみて、ダメなのか書いてよ。
同じこと書いてかぶるかも知れないだろ?
以下がダメだった方法と同じかも知れないけど、俺が試すとしたら
>>690 と似たようなやり方で
文字入力を監視するDocumentListenerを作って、それをJTextFieldのDocumentにaddする。
(入力文字をいじるならDocumentFilterでもいいかも)
そのJTextFieldをコンストラクタの引数として、DefaultCellEditorを作って、
setCellEditorする。
>>701 GoogleのフォームじゃhyperlinkUpdate来ないけど、ほかのフォームでhyperlinkUpdateが来るものがあるんですよねぇ。
どうにかしてたどってフォーム入力データまで自分で取得する必要があるならめんどうですね。
HTMLEditorKit#setAutoFormSubmissionはみてみた?
URLを開くときに下のようなコード書いてみましたが、今までと変わりありませんでした。
JEditorPane ep;
ep.setPage("
http://www.google.co.jp/ ");
EditorKit ek = ep.getEditorKit();
if(ek instanceof HTMLEditorKit){
((HTMLEditorKit)ek).setAutoFormSubmission(true);
}
trueだったらかわらないかと
falseにしたらなんかイベントが発生しました。 でも、入力値の取得方法がわかんねぇっす。
APIマニュアル読めばわかるが System.out.println(evt.getURL()); if(evt instanceof FormSubmitEvent){ System.out.println("ふぉーむ:"+((FormSubmitEvent)evt).getMethod() ); }else{ System.out.println("LINK"); } をハイパーリンクイベントにかきこんでみそ このソースには全角空白はいってるので注意な ここまで手取り足取りとはやさしいな俺
709 :
デフォルトの名無しさん :2005/03/24(木) 01:07:43
>702 レスありがとう。 たしかに説明不足ですみません。 カラムモデル.setCellEditor(new DefaultCellEditor(リスナをaddしたJTextField); みたいな感じで色々なイベントを取得してみたんですが、 どうしてもF2とマウスクリック時みたいにテキストフィールドが編集状態にならなんですよね、、、 編集状態になればフォーカスが失ったタイミングで編集停止にしたりできるんですけども。(Excelみたいに) JTableを継承したクラス作るしかないんですかね、、、
403エラーだから、googleにはじかれてるだけなんだろうか。 JSPでテストフォーム作ったら、うまくいった。 日本語がだめなんかな。 本気でやるならJDIC使えってことか。
しらべてみたらクエリー文字列でqがひっかかってるな qqとかqpとかqパラメータ自体なくすと通る デモエラーが403ってのが俺も不思議に思った いまのところGoogle以外は大丈夫な模様だが・・・
もともと「ほ〜らブラウザがこんなに簡単に!」ってやりたかっただけだから、サブミットなしにするよ。 Googleだめだと嬉しくないしね。
715 :
702 :2005/03/24(木) 11:07:25
>>709 なにがしたいのか、分からなくなった。
元々
>>698 では、
>キーを押して文字入力時のイベントが取得できません。
文字入力時のイベントっていうから、文字1文字でも入力したときの
イベントを拾いたいのかと思ったけど、
>どうしてもF2とマウスクリック時みたいにテキストフィールドが編集状態にならなんですよね、、、
>編集状態になればフォーカスが失ったタイミングで編集停止にしたりできるんですけども。(Excelみたいに)
なにをしたいの??
JTableの編集開始・編集停止をプログラム側から行いたいってこと?
>>714 ああ、そういや昔ウイルス防ぐためにそんな実装したのを思い出した
たしかにいじったらサブミット含めてすべてうまくいった
人によっては5.0へ移行するメリットだろうね、フォームが動く
717 :
709 :2005/03/25(金) 01:03:38
>715 日本語を勉強しなくちゃいけないですね、、、すみません。 元々、なにをしたいのかというと、 他のコンポーネントにフォーカスが移動したときにも編集状態のセルの値を 確定させると言うことです。 で、JDK1.5でsetSurrendersFocusOnKeystrokeというメソッドが追加されたのを 今日初めて知ってイベント取得については解決しました。 ただ目的の編集状態の確定については focusLost時にstopCellEditingとか色々やったけど無理でした。。。
>>717 編集状態の確定って? InputMethodの話か?
>>717 >他のコンポーネントにフォーカスが移動したときにも編集状態のセルの値を
>確定させると言うことです。
普通は確定(もしくは取消)するんでないの?
と思って試してみて、やっと状況が分かった。
・JTableのセルの編集を開始する。
・セル編集中に、他のコンポーネントにフォーカスを移す
(JTable内の他のセルではなく、JTable外の別のコンポーネント)
・さっきまで編集中だったセルは、自動的に編集が完了すると思いきや、
編集中のままになっている。
・ちなみにセルの移動では編集は確定する
コンポーネントの移動で、編集を確定させるには、
>focusLost時にstopCellEditingとか色々やったけど無理でした。。。
これでいいと思うけど。
>>718 >編集状態の確定って?
JTable内のセルの編集状態のことだと思う。
>>719 > JTable内のセルの編集状態のことだと思う。
focusLostしてんのにセルが編集状態であり続ける、と?
721 :
719 :2005/03/25(金) 10:43:05
>>717 >focusLost時にstopCellEditingとか色々やったけど無理でした。。。
focusLost時っていうのは、JTableのロスト時ではなく、Editorのフォーカスロスト時じゃないとだめだから。
(編集開始しただけで、JTableのfocusLostになってしまうから)
全部のEditorを変えたければ、getDefaultEditorで取得したTableCellEditorを
DefaultCellEditorにキャストして、getComponentしたものにFocusListenerをaddすればOKでした。
(将来もDefaultCellEditorでキャストできる保証がないので、怪しいけど)
試したソースを書いてみる。
>>708 に習って、このソースには全角空白はいってるので注意な
JTextField textEditor = new JTextField();
textEditor.addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent e) {
TableCellEditor cellEditor = table.getCellEditor();
if (cellEditor != null){ //nullである可能性があるか分からないけど一応
cellEditor.stopCellEditing();
}
}
});
//2列目のCellEditorだけ変えてみる
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(textEditor));
722 :
720 :2005/03/25(金) 10:48:57
>>720 おれも、そんなはずはと思って試した。
やればわかるけど、JTableは編集状態のまま、他のコンポーネントにフォーカスは移ってしまう。
編集状態ではあるが、編集は出来ないけど。
なんというか、TableCellEditorが起動したまま、他にフォーカスが移る感じ。
で、この状態のまま、getValuAtで、セルの値を取得すると、編集前の値が取れてしまうから
困るということだと。
試したソース(このソースには全角空白はいってるので注意な)
public class TestJTable extends JFrame {
JTable table = new JTable(3, 2);
public static void main(String[] args) {
TestJTable frame = new TestJTable();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public TestJTable() {
Container cp = this.getContentPane();
cp.add(new JTextField("text field"), BorderLayout.NORTH);
JScrollPane sp = new JScrollPane(table);
cp.add(sp, BorderLayout.CENTER);
}
}
723 :
719 :2005/03/25(金) 10:49:35
725 :
719 :2005/03/25(金) 12:06:15
>>724 バグとするかというと、微妙な気がする。
編集確定せずに、他コンポーネントに移動できるから。
セルの移動や、テーブルヘッダはで終わるのと矛盾する気もするけど。
でもデフォルトは、編集終了して欲しいものだ。
>>725 あ、URI挙げた奴は Evaluation に This RFE って書いてあるから
bug じゃなくて request for enhancement なんだと思う。
こんなのはコンポーネントが多いと面倒かな。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TestJTable extends JFrame { public static void main(String[] args) { TestJTable frame = new TestJTable(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } final JTable table = new JTable(3, 2); final JTextField field = new JTextField("text field"); public TestJTable() { field.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { if(table.isEditing()) { table.getCellEditor().stopCellEditing(); } } }); Container cp = this.getContentPane(); cp.add(field, BorderLayout.NORTH); cp.add(new JScrollPane(table), BorderLayout.CENTER); } }
>>727 何のソース?
>>721 でOKじゃないの?
focusGained時にstopCellEditingしているし、
setCellEditorもしていないけど。
729 :
728 :2005/03/25(金) 19:11:47
>>727 > 何のソース?
>>721 でOKじゃないの?
> focusGained時にstopCellEditingしているし、
setCellEditorしなくても721と同じことができると。
ま、こんな方法もあるよってことだね。
730 :
デフォルトの名無しさん :2005/03/25(金) 21:11:31
JTableで質問した者ですが レスくれた皆様ありがとうございます 元々のフォーカスロスト時に stopEditingなんとかを呼ぶ方法 で合ってたようです。 テスト用にテーブルのヘダーをクリック してたので気付きませんでした すみませんでした
731 :
デフォルトの名無しさん :2005/03/26(土) 01:26:36
結論:Swingは糞。
糞の目をもっていたら、すべてが糞に見えるということがいいたいのか。
妖精を見るには、妖精の目が要る。
SWTには妖精が見えるよ。
SWTまじめに使えばいろいろと不便なところがでてくるよ・・・ Swingは覚えれば覚えるほど加速していく感じが強い
SWTつかってるとJavaを使ってる意味を見失ってくるな。 JNIかっての。
結局どっちなんよ…
>>736 なに言ってるんだ、あれはJNIだよ。
SWTは使えば使うほど限界が見えてくるが、Swingは真逆。
SWT使う位なら、素直にMFCなりATL使った方が…。
>>737 SWTは見える人にしか見えない幻だった。
741 :
デフォルトの名無しさん :2005/03/28(月) 10:59:34
JFormattedTextFieldでFloat型のみ受け付けるようにするにはどうしたらいいの?
JNIのラッパーってある?
744 :
:2005/03/29(火) 14:14:28
C#のGUIってのはSwingみたいな感じ?それともSWTみたいなの?
VCLみたい
たしかにDelphiとBCBもさわった俺にはVCLに近いと感じてる SWTはやっぱりWin32をラッピングしている感が強すぎる そしてSwingだけは別物というか別格というか オブジェクト指向でどこまでいけるかという基地外(この場合ほめ言葉)が作ったものだから
>>741 NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMinimumFractionDigits(5);
jFormattedTextField1 = new JFormattedTextField(nf);
jFormattedTextField1.setValue(new Float(0));
NetBeansから取り出した感じではこんな感じだな
・コンストラクタの引数にいじったナンバーフォーマットを入れる
・Valueにクラスごとぶちこむ
細かくカスタマイズした入力をするのなら
JFormattedTextField#setFormatterFactoryからドキュメント眺めるといい
わかりやすくいえばAccessの書式みたいなのが作れるというわけだ
まあC#とVCLは作者が同じなんで当然といえば当然だわな。
Swingプログラミングで、既存のクラスを継承してあれやこれやする事がありますが、 NetBeansでGUIデザインしてそのワザを使うにはどうすればいいんでしょうか? JPanelを継承して描画するように死体けど、JPanel貼っ付けてもextendsとか書けんし
750 :
741 :2005/03/29(火) 22:19:29
>>749 ・JPanel継承した自作クラスを作る
・そのクラスファイルをコピー
・貼り付けたいJFらめを継承したクラスにペースト
これでインスタンス生成とかぜんぶやってくれる
>>749 いろいろ手はある。
たとえば、メニューから「Tools -> Palette Manager」を選択すると、Jarとかクラスファイルを
選択して特定クラスをパレットに追加できる。
プロジェクトにJPanelなりなんなりのサブクラスを作成して、該当ソースファイルを右クリックして
「Tools -> add to Palette...」を選択すれば、プロジェクト内のソースファイルからパレットに追加
できる。
パレットに入れてしまえば、あとは普通のクラスと同じように使える。
新入社員です。 配属先でswingを使うそうです・・・ 自分はサーバサイドJAVAしか勉強して来なかったので必死こいて勉強してます・・・
がんがります
JFormattedTextField型の日付入力欄でフォーカスアウト時に入力チェックを行い、 不正ならばダイアログを出力してフォーカスを元に戻す処理を作成したいと思っております。 初めに、focusLostイベント処理で作成したのですがフォーカスを戻すことができないので諦めました。 次にInputVerifierを継承した日付チェッククラスを作成し、その中でJOptionPaneの呼び出しを試みたところ 暫く固まった後StackOverflowErrorを吐くので諦めました。 最後に以下のような物を作りました。 InputVerifier dateVerifier = new InputVerifier(){ public boolean verify(JComponent input){ boolean bool = true; 日付チェック処理(省略) if(!bool) { Runnable runnable = new Runnable() { public void run() { JOptionPane.showMessageDialog(省略); } }; SwingUtilities.invokeLater(runnable); } return bool; } }; これを使用するとダイアログが出力されフォーカスも元に戻るのですが 何故かダイアログが3つ出てしまいます。 他に何か良い方法は無いでしょうか?
>>756 >次にInputVerifierを継承した日付チェッククラスを作成し、その中でJOptionPaneの呼び出しを試みたところ
>暫く固まった後StackOverflowErrorを吐くので諦めました。
無限再帰呼び出しになってるんだろ、バカ。
Kaffe1.1.5がリリースされてNIOやらJAWTやらSwing(gnu classpath)やらいろいろ追加された模様 これでようやっとKaffeもJava2レベルに
自力描画なSwingはインタプリタとさほど代わらないKaffeには荷が重いだろうなぁ Javaがサポートされていない環境以外では存在意義はないなぁ
JFileChooserのshowSaveDialogでユーザーが架空のファイル名を拡張子なしで入力した場合、getSelectedFileで返されるファイルにデフォルトの拡張子を設定したいんですけど、メソッドとかありますか。
SingingSwinging
763 :
デフォルトの名無しさん :2005/04/15(金) 22:08:07
時間の掛かる処理を、画面描画を止めずに行なう方法について SwingチュートリアルのSwingWorkerを参考にしたら実現できました。 ところが、この処理中は、ユーザーの操作を受け付けないようにしたいです。 【考えた方法】 1)イベントスレッドでやってしまう →描画がとまってしまうから困る。 2)処理中にJDialogをモーダルで出して、終わったら閉じる →目的は達せられたが、ダイアログの表示・非表示がちょっとウザイ。 3)操作されたくないコンポーネントを、enable=falseにする →大量にある場合に、false/trueの切替が大変。 一発でユーザーの操作を受け付けなくする簡単な方法があったら教えて下さい。
javax.swing.JComponent[] comps = new javax.swing.JComponent[n]; //nは任意の数 comps[0] = jButton1; comps[1] = jButton2; ... private void ComponetEnableChanger(bool flg) { for(int i = 0; i < comps.length; i++) { comp[i].enable=flg; } } みたいな感じはどうよ。
パネルのEnabledをいじると下のコンポーネントも同じようになってくれるといいのにねぇ 俺はテキスト系はEnabledではなくEditableプロパティいじってるので多少めんどい
766 :
763 :2005/04/15(金) 22:27:47
>>764 返答ありがとうございます。3)の方法を楽にするってことですよね。
その方向も考えていて、JFrame内のコンポーネントを全部列挙するのは、
画面ごとに大変なので、コンテナを探っていって、setEnabledしていこうかと
思いました。関係ないものまで、falseになりそうです。
また、処理実行前のコンポーネントがすべてenabled=trueなわけでなく、
falseのものもあります。処理が終わったからといって、すべてtrueに戻せないので、
元々falseのものを記録しておきながら、やらないとだめでした。
他に方法がなければ、この方法でやろうと思いますが、
ひとつひとつenalbleをfalseに設定していくしかないんですかねぇ。
>>766 実際に試してないのでうまくいくかどうかわからないけど、
setUndecorated(true)&setSize(1,1)したJDialogを使うと
見た目のウザさが軽減されるかも?
>>765 ならばそういうパネルを自分で作ればいいのでは?
766がいうように処理前の状態に完全に戻せるようになっているとなおよい。
769 :
763 :2005/04/15(金) 23:11:24
>>767 いい感じでした! setSize(0, 0)でもOKでした。1,1の場合は左上に
白い点が見えるだけなので、ウザないです。
欲を言えば、モーダルなので
下のウィンドウの移動ができなくなってしまう。
のが残念です。
でも、他に方法がなければ、これを使おうと思います。
今は、CardLayoutとかOverlayLayoutとか調べて、
JFrameの上に透明なパネルみたいなのを重ねて、
ユーザーの操作をさえぎったりできないものかと調べてました。
CardLayoutは見えなくなってしまうので、だめでした。
まぁ処理に時間かからないのならそれでいいね 時間がかかるのならダイアログ出したほうがいい フリーズしてるのかどうかわかるというか、なんらか動いてるのが見えたほうがいいからね
771 :
763 :2005/04/16(土) 01:48:47
>>770 言葉が足りませんでしたが、処理中はプログレスバーを表示しています。
最初はダイアログ上にプログレスバーを表示していたのですが、
思ったよりも処理時間が短いと、ダイアログが一瞬で消えてウザかったわけです。
>>771 以前、類似の問題があったときに営業さんと相談して、
あえて数秒間はダイアログを表示させる、という方法をとったことがある
ユーザから見れば0.5秒よりは1秒の方が処理してるって雰囲気出るし
(まぁ処理頻度等にもよるだろうけど)
>>772 そんなふうに考えるのは作ってる人だけ。
っつか、0.5秒ぐらいダイアログ出さない時間を作っておいて、 その0.5秒ぐらいの間に progress が n%未満ならダイアログ表示とかすれば良いのでは?
JFrameあたりでGlassPaneをかぶせてイベントを全部遮って しまうという手はあるね。
>>775 その方法はタブキーで遷移できちゃうからアウト。
荒技だけど、CellRendererで使われてるコンポーネント(CellRendererPaneだっけ?)を使って、
描画だけさせるっていう方法があるね。
778 :
763 :2005/04/17(日) 20:33:31
Dialogを使わない方法として、
JPanel内のコンポーネントを再帰的に走査して、JComponentにsetEnabled(false)をする事を調べてみました。
・もともとfalseのものはSetで保持しておいて、戻すときにtrueにしないようにした。
・EditableなJComboBoxなどは、中のComboBoxEditorまでsetEnabledされたりしたので、
再帰的に走査する場合は、JPanelのみ対象にした。(javax.swing.Boxも対象にした方がよい?)
ComboBoxEditorに対してsetEnabledしても別に悪くないかも知れませんが、
普通はJComboBox本体にだけしか、setEnabledしないと思うのでしないようにした。
・フォーカスがあったコンポーネントにsetEnabled(false)を行うと、フォーカスが失われてしまいました。
これも、フォーカスがあるコンポーネントを記憶しておいて、
trueに戻したときに、requestFocusするようにした。
>>768 のいうように、こういうJPanelを作ってもいいと思います。(私の場合は手遅れですが)
GlassPaneはよく分かりませんでした。。。誰か簡単なサンプル作って
例を教えてもらえれば、調べてみます。お願いします。
>>778 777のGlassPaneのサンプルじゃ駄目なの?
780 :
763 :2005/04/19(火) 00:24:07
>>779 あれ?確かに。寝ぼけていたのかも。。。
試してみます。(というかそのサンプルのまんまだと思う。)
関係ないけど、
>>777 のサイトを見ると、4/18に、FocusTraversalPolicyでnullを返すサンプルが追加っ!!
もしかして、terai氏光臨ですか?たくさんのSwingサンプル大変参考になります。
781 :
:2005/04/19(火) 00:31:05
JTableでIMEを日本語入力にしているとTabキーでフォーカスを移動しても次のセルでは入力できない(編集状態になってない)。IMEが日本語じゃなくて直接モードなら文字を入力したら編集状態になって入力できるのですが。 どうしたらIMEを日本語入力のままTabキーでセルを移動しながら入力できるのでしょうか。
>>777 みてみたが
意味も無くFinal連発してるのをやめて
処理スレッドからSwingコンポーネントいじるとき同期化、もしくは
AWTスレッドからやらせるといいね
意味のないfinalなんてあるか?
>>783 なんか、昔の風習というか迷信で、メソッドはfinalをつけたほうが速くなるとか言われてた。
他にも全部publicにするとかstaticにするとか。 酷い場合、入門書でそういう記述を見たことがある。
>>777 の例では2つしかfinalないし連発というほどでは。
2つ目のfinalは外せないと思う
最近ローカル変数(メソッドの仮引数も)には理由がない限り finalを付けるのを俺ルールにしている。
788 :
728 :2005/04/19(火) 14:09:03
>>782 > AWTスレッドからやらせるといいね
777の場合、AWTイベントディスパッチスレッド(SwingUtilities.invokeLater)を
使うと、JTextFieldなどのクリックで状態遷移が起こり?カーソルが変更されて
しまう模様。
Java魂とかだと特別な理由がない限りfinalにしとけって感じだった。 むしろデフォルトfinalで、なんか特別な指定をしない限り 変更不可な仕様にして欲しかったような。
>>789 むぅ、777を以下のようにいじって、1.5.0_02で実行すると、漏れのとこじゃ
カーソルが砂時計じゃなくなるんだけどなぁ。なんか勘違いしてる?
//Thread t = new Thread(
Runnable doRun = new Runnable() {
public void run() {
longTask();
frame.getGlassPane().setVisible(false);
button.setEnabled(true);
frame.setFocusTraversalPolicy(ftp);
}
};
//t.start();
SwingUtilities.invokeLater(doRun);
抜き出したやつだけど、普通はこう考えるだろ
Thread t = new Thread(new Runnable() {
public void run() {
longTask();
try{
SwingUtilities.invokeAndWait(new Runnable(){
public void run(){
frame.getGlassPane().setVisible(false);
button.setEnabled(true);
frame.setFocusTraversalPolicy(ftp);
}
});
}catch(Exception ex){}
}
});
ちなみにキー入力は動くまま
これは
>>777 の時点でも同じ
多少いじらんとね
>>793 あ、そっか。うまくいったよ。
キー入力(キャレットの点滅?)は、まぁどうでもいいや。thx
キー入力は簡単だよ グラスペインが表示されてないのにフォーカスのリクエスト出してるのが原因 button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { button.setEnabled(false); frame.setFocusTraversalPolicy(policy); frame.getGlassPane().setVisible(true); frame.getGlassPane().requestFocus(); Thread t = new Thread(new Runnable() { ・ ・ ・ これでおけ 最後戻すときにボタンにフォーカスをもどせばいい
>>781 ttp://forum.java.sun.com/thread.jspa?forumID=57&threadID=509913 を使ってeditCellAtするというのはどうでしょうか?
一応日本語入力のままTabキーでセル移動できているようです
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
final Action oldTabAction = table.getActionMap().get(im.get(tab));
Action tabAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
(改行多いと言われたので中略)
table.changeSelection(row, column, false, false);
//ここから
table.editCellAt(row, column);
table.getEditorComponent().requestFocus();
//ここまでを追加
}
};
table.getActionMap().put(im.get(tab), tabAction);
797 :
781 :2005/04/19(火) 19:28:20
>>796 おお、どうもありがとう。InputMapとActionMapをいじくれば特定のタイプのセルをSkipさせたり何でもできるんですね。
ただ自分の場合はそこまで特殊な判定とか必要ないので、あれから調べた結果、別の方法もありました。
http://java-house.jp/ml/archive/j-h-b/051951.html この人のもちょっと自分には必要ないこともしてるので簡単にいうと
JTableから独自のクラスを派生させてcolumnSelectionChangedとvalueChangedをオーバーライドすればいいみたいです。
public void columnSelectionChanged(ListSelectionEvent e) {
super.columnSelectionChanged(e);
int r = getSelectedRow();
int c = getSelectedColumn();
editCellAt(r,c,e);
Component comp = getEditorComponent();
if(comp != null) comp.requestFocus();
}
valueChangedにも同じ内容。
ただしこの方法だと最後の列からTabキーで次の行に移るとき、間違った行情報でcolumnSelectionChangedが呼ばれてしまうんです。でもまあ、最終的にはvalueChangedによって正しいセルにフォーカスが設定されるからいいんですけど。
でも、いつおかしい挙動するか不安があるのであなたの教えてくれたほうがいいかもしればせんね。 どうもありがとうございました。
798 :
781 :2005/04/19(火) 19:41:33
やっぱし上の方法だと、マウスクリック一回で強制的に編集モードに入ってしまうからそれが嫌なら使えないかな。まあ自分はそれでもいいけど。
TableCellRenderer インターフェースの public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) メソッドあるじゃん? あれの Object value ってなんであるのかな。 value が必要なら table.getValuat(row, column) で取得できるし わざわざインターフェースの引数増やした意図が知りたい。 (boolean isSelected もだが。)
楽になるからいいんじゃね? あとセルレンダラの表示とモデルの内容のObjectは一致しないこともあるだろうからとか
キャンセルボタンを押すとそのウィンドウをだけを破棄する方法を教えてください・・・
802 :
801 :2005/04/25(月) 12:57:50
スレ違いですかな?すんません
JFrame や JDialog に対して dispose() を呼び出したり WindowEvent を送れば良いのではないかと。 50秒で答えが返るほど人に溢れてるわけでもなく。
>>803 これでやってみたんですけどいきませんでした・・・
public void actionPerformed(ActionEvent e) {
//呼び出し元がOKボタン
if (e.getSource().equals(jButton_OK)) {
}
//呼び出し元がキャンセルボタン
else if (e.getSource().equals(jButton_Cancel)) {
((Frame) e.getSource()).dispose();
}
}
>>804 if文ではgetSourceがjButton_Cancelという判断をしているのに、
Frameでキャストしているではないか。
Frameのインスタンスに対して、disposeを呼ぶ
public void actionPerformed(ActionEvent e) { //呼び出し元がOKボタン if (e.getSource().equals(jButton_OK)) { } //呼び出し元がキャンセルボタン else if (e.getSource().equals(jButton_Cancel)) { Frame f = new Frame(); f.dispose(); } } でも上手くいきません・・・(泣)
なんでFrameを生成してるんだ?
GUI以前にJavaの勉強しなおしたほうがいいんじゃないか?
マルチなので放置することに決定
こういうコード見てると、よくこうやってわざわざ動かないコード作れるなぁと感心する
>>810 まぁ、最初はそんなもの
大昔の自分のソースみるとorz
キーイベントの無効化 KeyboardFocusManager defaultKFM = KeyboardFocusManager.getCurrentKeyboardFocusManager(); KeyboardFocusManager.setCurrentKeyboardFocusManager(new DefaultKeyboardFocusManager() { public boolean dispatchKeyEvent(KeyEvent e) { return true; } }); // 何か処理する foo(); // 元に戻す KeyboardFocusManager.setCurrentKeyboardFocusManager(defaultKFM); こんなんじゃだめ?(マウスイベントは受け付けるが・・・)
ウインドウ全体に対しての処理はグラスペインというのが用意されているんだから それを使ったほうがすっきりする ほとんどの人はコンテントペインしかさわらんか それも5.0では直接触ることはないがな
今日初めてWin/Linuxどっちでも動くアプリを完成させた。なんかうれしい。
Windowsのタスクマネージャみたいに他のアプリよりも 常に最上位にWindowが表示されるようにできますか?
java.awt.Window#setAlwaysOnTop(true)が効く範囲でなら可能なんじゃない? JFrameもWindowのサブクラスね。
Java質問スレで質問したのですが、回答が無いままdat落ちしてしまったのでここで質問させてください。 この場合はマルチでは無いですよね? JButtonのactionPerformedを取得してJTextAreaに処理開始メッセージを出力し、 処理中のログを出力して、処理終了後に終了メッセージを出力したいのですが、 処理終了後に全部まとめて出力されてしまいます。 どのようにすればログを逐次出力することができるのでしょうか?
イベント処理のなかですべてしょりしたら イベント終了後に更新されるのは当たり前かと Javaに限った話でもないし
>>818 >>819 が書いてるけど、actionPerformedが終わるまで、Swingに画面更新のタイミングが
来ないからじゃないの? Swingはすべての描画をシングルスレッドで行なってるからね。
Swingはシングルスレッドモデルで動いているので、長い処理は別スレッドで行なって、
Swingコンポーネントのプロパティ変更はinvokeLater()経由で行なうのが鉄則。
invokeLater()しとけば、Swingのイベントディスパッチャが適当なタイミングで画面に
反映する。
ここでいうプロパティ変更って、setEnabledみたいなメソッドのことですか?
>>822 いや、setXXXX()なんかはほとんど当てはまると思った方がいい。どれが安全でどれが安全でないかは
APIリファレンスに書いてあるけど(setText()は安全)、ややこしければinvokeLater()が基本だと思っとけば
いいんじゃないかな。
ちなみに更新が行われない事と、スレッド安全性とは関連があるけど別の話なんで注意。
更新を行なっても、actionPerformedが終わるまで画面が更新されないのは、Swingの
イベントディスパッチャが更新処理を行なうまでは反映されないから。actionPerformed()が
終わるまでは次のイベント処理が行われないので、画面に反映されない。
だから更新を行なう処理はSwingのイベント処理スレッドとは別に行なうようにすることになる
んだけど、別スレッドからSwingコンポーネントの更新を行なう場合に、invokeLater()が絡んで
くる。
824 :
818 :2005/05/02(月) 00:04:37
SwingUtilities.invokeLater(new Runnable(){ public void run(){ jTextArea.append("aaa\n"); } }); SwingUtilities.invokeLater(new Runnable(){ public void run(){ Thread.sleep(500); jTextArea.append("bbb\n"); } }); こんな感じでactionPerformedの中に記述してみたのですが、 終了後に纏めて出力されます。 どこか間違っていますか?
>>824 ええと、よくわからんけどちょっと違うように思う。
invokeLater()は、SwingのイベントディスパッチスレッドのキューにRunnableを突っ込む機能
なんで、それだと、
actionPerformed() -> 一つ目のRunnableが突っ込まれる --> 二つ目のRunnableが突っ込まれる
-->actionPerformed()が終わる --> 一つ目のRunnableが処理される --> 二つ目のRunnableが処理される
-->次のイベントが処理される。たぶんここでrepaintが行なわれる。
ということじゃないかな。
当初の要件で言えば、
・actionPerformed()起動
・開始メッセージをJTextAreaにセット
・処理用スレッドを起動
・actionPerformedは処理終わり
で起動した処理用スレッドは、
・とりあえずループする。
・ループの中で一回処理が終わるたびに、invokeLater()でJTextAreaに処理中ログ出力
・スレッド切替を確実にするためにsleep(1)くらいしとく。
・ループ脱出したら終了メッセージをJTextAreaにセット
てな感じでは。ともかく、actionPerformed()はスレッドを起動したらさっさと終了しないと、
イベントディスパッチャが次のイベントを処理できない。
ここほんとにSwingスレか?
828 :
818 :2005/05/02(月) 01:08:31
>>826 低レベルな質問で申し訳ありません。
>>819 ,820,821,823,825,827
レス有難うございました。
>>825 殿の説明でやっと理解できて、希望通りの処理を行うことができました。
こんなくだらない質問に、これだけの人に教えてもらえるとは思いませんでした。
もっと勉強して人に教えることができるようになりたいです。
>>828 >低レベルな質問で申し訳ありません。
ここはSwingスレだからレベルにかかわらずSwingに関連した質問をするのは
全然問題ないんじゃないの? どちらかというと問題なのは、
>・スレッド切替を確実にするためにsleep(1)くらいしとく。
みたいなことを平気で教えるほうだと思う。
まぁ解決したのでいいとするが、俺も今見てひどいなと思ったり あとはあまり美しくはないが、repaintイベントとばすのではなく イミディエイトを使うという手もある やっつけしごとにどうぞ
ん?
>>818 あたりからざっと読んでたんだけど、
>>825 もなんの疑問を抱かずに
>>829 まで来てしまった。
すべてのJavaスレッドがプリエンプティブであることが保証されてるならともかく、その保証がない以上、
スレッドは長い処理中に定期的に自ら優先権を放棄して、他スレッドが実行されるチャンスを与えるように
することは必要なんじゃなかったっけ?
yield()については無視するJVMがあることは有名だけど、sleep()についてはどんなJVMでも必ず一旦
スレッドを停止して、スレッドスケジューリングを実行するってことだったと思うけど。
まあいまどきはほとんどがプリエンプティブなネイティブスレッド使ってるんだろうけど、Sunのリファレンス
実装がGreen Threadモデル使ってたって例もあるし、他社製JVMにはGreen Threadなのもあるらしいし。
スレッドを切り替えるために スリープを意識的に入れるコードは設計がおかしいのでは?
は?
実装の事を言い出したらSleepでかならずスレッド切り替えが入るとは限らない。
で、それと設計がおかしいこととどうつながるの?
スレッド切り替えを期待してsleepをいれるなということだろう。
現実的な話でいえば、sleepでスレッド切り替わるんだろ。 sleep使わずスレッド切り替えしようと思うとめんどうなコーディングしないといけないんだろ。 設計がおかしいといえるもんでもないと思うが。
838 :
831 :2005/05/02(月) 14:14:40
sleepを使うとカレントスレッドは止まらないといけない。 止まると次のスレッドを決めないといけないので、スケジューリングが走る。 むろんsleepの用途はカレントスレッドを止めることであってスレッドスケジューリングを行なう ことではないけど、カレントスレッドが止まれば当然スケジューリングも走る。 オライリーがどのくらい信用できるかわからんけど、「Javaネットワークプログラミング」には スレッドの実行権譲渡について詳しく説明があって、やっぱり長い処理中には明示的に実行権を 放棄すべきと書かれていて、sleep()は最も強力な実行権譲渡方法として紹介されてる。 (もっともこの本は、yieldは無視されることがあるといいつつ、ループ内ではyieldを使えと 書いてあるけど) 要はスレッド実行中の実行権譲渡方法ってIO待ちとかを除けば、synchronizedによる待機、 wait、join、yield、sleepくらいしかなくて、前の三つはループ内でただ実行権を一時的に放棄 するためには使えず、一番的確なyieldは、JVMによっては無視してもいいとかいう言語既定 になってるもんだから、現実的にごく短いsleep()が使われるってことじゃないの。 現実解としてはsleep()使うんじゃないかな。
スレッド切り替えにsleepはいいのだが、上記の例でやるべきことか? それに複数のスレッドがある場合1msでAWTスレッドに代わるのを期待できるのか?
840 :
460 :2005/05/02(月) 15:12:03
とっくに終わった話題だけどSWT本読んだらすっきりしたから書いとく。 エリックガンマは最初Eclipseの前身のVisualAge for Java for MicroEdition をSwingで作ってそれに満足してたけど、最初に使った連中から速度と見た目について 文句を言われたらしい。それでVisualAge for SmalltalkやVisualAge for Javaを つくるときに使ったSmalltalk用GUIレイヤをJavaに移植したのがSWTとのこと。 確かにこれじゃ他のライブラリと違和感あるよなあ。 エリックガンマ自身はSwingの速度自体は問題にならないと当時も 思っていたらしい。さすがにわかってるね。
841 :
831 :2005/05/02(月) 16:27:54
>>839 まあsleep(1)ってのは、要件が実行権放棄だけなんで、単に一番短い数値を指定したんだろうなと
思ってたよ。
しかしなるほど、たしかにスレッドが一杯あったら、sleep()でスレッドが止まるにしても、
次にいつ画面更新が行われるかはいつかよくわからんね。結局まとめてログ出力されてしまう
可能性がある。
じゃあSwingだとどうするんだろう、と思って
>>827 で紹介されてたリンクを辿って見てたんだけど、
このSwingWorkerの例って
・SwingWorkerは一生懸命処理する。
・SwingのTimerがSwingWorkerに現在値を問い合わせて、プログレスを更新
となっているような感じなんだけど、これだとやっぱりSwingWorkerは定期的に自分から
実行権を放棄しないとイベントディスパッチャに制御が戻らん可能性があるよね。
例ではたまたまsleep(1000)が入ってるんで問題なさそうだけど。
この場合もスレッドが多いといつ更新されるのかは不明になってしまう。
当初の要件のように、確実に、「処理1回終わり-->ログをJTextAreaに表示」サイクルを繰り
返そうと思ったら、Swing TimerのactionPerformed()にサイクル1回分を書いて、繰り返し実行
するようにTimerを設定する、ということになるんですかね。
いや、ふつうにやればいい。 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Thread t = new Thread(){ public void run(){ for(int i=0;i<10;i++){ //何らかの処理 try{ SwingUtilities.invokeAndWait(new Runnable(){ public void run(){ jTextArea1.append("AAA\n"); } }); }catch(Exception ex){} } } }; t.start(); } これでまったく問題ないだろうに。
いやもう、ほんとなんかゴメンってかんじで。 invokeAndWait()か。そりゃそうだよな.... ありがと。
invokeLaterとinvokeAndWaitの違いを簡単におながいします?
Swingのスレッド周りが分からない人はイベントキューの図をかいてみればわかるよ
頭に毛が三本
>>844 invokeLater→メッセージキューに入れたらすぐに制御が戻る
invokeAndWait→実行が終わるまで制御が戻らない
849 :
デフォルトの名無しさん : :2005/05/08(日) 21:04:15
別スレでも書きこみしましたが、教えてください。 JTableの任意のセルにフォーカスを移動するにはどうすればいいんですか? DefaultTableModel使ってコーディングしてます。
JTextField と JButton を使っています。 JTextField には InputVerifier を付けていて正しい入力を行うまで 他にフォーカスが移動しないようにしています。なので、JButton には フォーカスは移らないのですが、マウスをクリックするとボタンがへこみ actionPerformed() が呼ばれてしまいます。 InputVerifier でフォーカス移動が禁止されている間は、 JButton 自体を機能させたくないのですが何か方法はないでしょうか? 一応、actionPerformed() 内で isFocusOwner() で JButton 自身が フォーカスを取得できていない場合は、何もしないようにコーディング しています。可能ならボタンをへこまないようにもしたいのです。
>>849 選択させたいってことか?
JTableにそれらしいメソッドがみえるが
>>850 入力確定時の完全なフォーカスのロックは便利そうで不便なことも引き起こす
ボタン完全に押せないと入力途中でやっぱりやめたとキャンセルボタン押しても
「不正です」とでたりして押せないとかな
853 :
デフォルトの名無しさん : :2005/05/08(日) 22:10:14
選択するだけならば、JTable の void setRowSelectionInterval(int index0, int index1) void setColumnSelectionInterval(int index0, int index1) あたり。 ただし、これでフォーカスがあたるかどうかはわかんないが。
855 :
デフォルトの名無しさん : :2005/05/08(日) 22:16:55
>>851 選択というか、フォーカス持ってくる。
同じこと?どのメソッド?
boolean editCellAt(int, int)
858 :
デフォルトの名無しさん :2005/05/08(日) 22:25:26
バグなのか あれは5年以上放置だから仕様かとおもってたが
>>849 ttp://terai.xrea.jp/Swing/AnchorSelection.html //0行0列のセルにフォーカス
table.getSelectionModel().setAnchorSelectionIndex(0);
table.getSelectionModel().setLeadSelectionIndex(0);
table.getColumnModel().getSelectionModel().setAnchorSelectionIndex(0);
table.getColumnModel().getSelectionModel().setLeadSelectionIndex(0);
table.changeSelection()でもできるかもしれない
JScrollPane と連動させている場合は Viewport を再設定する必要もあり。>選択範囲
質問スレで放置されました・・・すいませんがこっちにもマルチさせてもらいます jTableで列名の長さに応じてセルの幅を調節したいんですが jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF ); TableColumn column=jTable1.getColumn("カラム1"); column.setWidth(15); jTable1.doLayout(); これでもサイズが変更されません。お助けください・・・
>>862 apiには以下のように書かれているが
>public void setWidth(int width)
>このメソッドを使用して JTable の列の幅を設定しないでください。代わりに setPreferredWidth を使用します。
864 :
デフォルトの名無しさん : :2005/05/10(火) 22:59:53
865 :
デフォルトの名無しさん : :2005/05/12(木) 00:41:02
JTreeについて教えてください。 ノードによって選択可能不可能の設定ってできるんですか? できるなら教えてください。
867 :
デフォルトの名無しさん :2005/05/16(月) 22:50:15
Synthってどうですかね? かっちょいいスキンとか出回るようになるのでしょうか。
SynthはCSSのようなもの 使ってみればどういうもんかわかるよ
869 :
デフォルトの名無しさん :2005/05/17(火) 00:29:18
Swingってさ なんで デフォルトで日本語ラベル表示すると 昔のLinuxの日本語表示みたいにギザギザなんだろう? このSynthつかうと そういう心配なし?
べつにギザギザではないが
>>869 ひょっとして、1.4 使ってるのか?
だとするとボールド使うと日本語汚くなるかも。
Windows だったら、起動オプションに
-Dsun.awt.UseAltWin32FontApi=(fontname,unicode_start,unicode_end,size_start,size_end)
付ければネイティブのフォントAPI使ってくれたはず。
1.4.1 までだったかもしらんけど。
SystemLAF使え
873 :
デフォルトの名無しさん :2005/05/20(金) 23:45:26
>>871 >>872 としたとしても、MS系で作ったアプリと微妙にフォント違うよね
なんかこうインチキ臭いフォントって言うか・・・
Delphiで書いたアプリもそうだけど
怪しさはSwingのほうがあやしい
↓お前が怪しい という初級つっこみ人
上向きの矢印出す初級つっこみ↓
>>873 フォント殿変が違う?
MSなフォント指定すれば同じになるが
いやいや、微妙にちがうんすよ う〜ん わかりやすく言うと、 たとえば、UTF-8で書かれた(ファイルの保存もcharsetもUTF-8)Webページ見たときのようなへんな感じ・・・ってわかります?
ファイルダイアログの文字とかもおかしいもんね
>>873 > としたとしても、MS系で作ったアプリと微妙にフォント違うよね
>>871 は有効になってれば、MSのフォント使って、
Windowsネイティブのフォントレンダラ使うはずなので違わんはずだが。
違うってのは有効になってないか、単なる思い込みなんじゃね?
スクリーンショット取って比較してみれば?
>>877 UTF8もSJISも見た目はまったくかわらんだろ
UTF-8とSJISでフォント(とかフォントサイズとか)が切り替わってるのでは?
ま、ええわ 俺の勘違いだな そういうことで
フォントの周りのデザインが変わってるのでフォントが変わったと思い込んでる882がお送りしました。
884 :
デフォルトの名無しさん : :2005/05/21(土) 12:00:49
教えてください。 JTableのヘッダー部にマウスが来るとマウスの形状を変えたいのですが、 マウスがヘッダー部に来たってことをどのようにすれば知ることができるのでしょうか?
>>884 ヘッダー部全体なら、JTable#getTableHeader() でヘッダー部のコンポーネント取ってきて、
addMouseListener() で mouseEntered と mouseExited 実装した MouseListener 渡せば取れると思われ。
変わったのはデザインじゃなくてレンダリング。 ボールド処理が糞だと前々からBugParadeで言われてきたのがようやく改修されただけ。
>>886 >ボールド処理が糞だと前々からBugParadeで言われてきたのが
じゃ、言ってることは合ってんじゃんか
BOLDは英語は問題なかったし、バージョンによって細かくBOLDの挙動が違う でもメタルのLAFデフォのまま使ってるところってそんなにないよね
>>871 1.3.1 では有効になった。
1.4 では有効にならんみたい。orz
>>888 > BOLDは英語は問題なかったし
JDKが標準でフォント持ってるからね。
英語の部分にMSゴシックとか使った場合は同様の問題出るよ。
個人的には1.5の品質なら許容範囲内なんだけど。
>>890 1.1時代は綺麗だったような
1.2もバージョンいにょって細かく違ってたし
1.3になってひどいのがちらほらと
1.4も0.0.1違うだけでどんどんかわっていった
何をしたいんだ>Sun
まぁ5.0は1.3以降の中では綺麗
1.2以前はOSのまんま使ってたんだっけかな
Swingは1.1からあったよ 標準APIではなかったが
JFC自分でいれなきゃだめだったよ。 少なくとも正式リリースじゃなかった記憶があるんだけど
1.4は、バージョンあがるごとにSwingの実装が変わっていってるからね。 1.4.1と1.4.2でスピードが全然違う
1.4はJava2D進化の歴史だからな おかげでSwingが快適になった 5.0になってどれだけ変わるかと期待したが1.4.2と速度的にかわらんのがなぁ VolatileImageも多少は扱いやすくなったが、あいかわらず使いにくいし そろそろ拡大縮小くらいはアクセラレーションきくようになってほしいな
えええええ? 速度、5.0の方が速いでしょー? 誰に聞いてもそう返って来てたのに・・・。 あ、Java2D生でガリゴリしてるひとじゃなくてGUI部品単位で Swing使ってる人に対してだけど。 Mustangも微妙に速くなってきてると思う。今、1.6.0-b37上で動いてるv2cから..._〆(゚▽゚*)。
>>897 アクセラレーションがきくようにコードを書いてる人は5.0になってもまったくかわらんよ
ただ、GCの速度とかアップしてるし総合的には上がってるのはわかる
>>891 > 何をしたいんだ>Sun
awt にフォントの情報取れるインターフェイス持ってるの気付かなかった?
プラットフォーム依存をより少なくするために自前でフォント描画してんのよ。
>>899 そんなのは誰でもわかってることだろ。
描画結果が何回もころころ変わるから問題になるのだ。
>>900 よくしようと変わってんだからいいじゃん。
フォントの描画方法変わっても別にアプリに影響ないでしょ?Swingなら。
# そんなのに依存するんだったら、アプリの書き方にちょっと問題が・・・
描画結果が常によくなるような改良だったらいいのだが そもそもBOLDの問題はSwing特有のものだっけ? AWTの話だと思うんだが それに見た目がころころ変わるってのは アプリの動作はまったくかわらんが結構影響大きいぞ
なんで AWT で描画するんだろう。 フォントなんてプリミティブな要素、 AWT では抽象化されてるべきだと思うんだが。
J2MEのPersonal Profileだったりして
>>903 で、抽象化したとしてだれが実装すんの?
つか、グラフィックまわりは過度に抽象化すべきじゃないね。 速度の影響が大きいからね。
実際のところ基本DPIがWindowsとWindows以外とで大きく違うから 結構おかしいことになったりする
>>906 そうやっていきなりあきらめるんじゃなく、Swingは理想的に作って
できるところから最適化(ネイティブ利用など)してきてるから偉いんだって。
Swingでアニメーション(JPG,GIFなどを使って)作ろう と思ったのですが Swingはデフォルトでダブルバッファリングだから オフスクリーン用のImgeは生成しなくても いいんですよね? 一応JComponentを継承したのを JFrameに貼ろうというふうにやっているのですが
やってみればいいかと 実際のところアクセラレーションをきくようにとか細かいことやり始めると 自分でバッファを作ったほうが小回りが利いていいと思われ repaintのたびに描画がはいると重いからね たとえばスプライトを1万個描画するのをイベント発行時で処理するのと 画像が変わったときに処理、paint時には出来上がった画像を表示するだけでは大きく変わる
911 :
909 :2005/06/05(日) 16:25:59
実際に作ってみたところ GIF画像取得のでgetClass()で Nullが発生している模様 スレ違いの部分でつまづいたorz
>>911 せめて、その画像を取得してる部分のソースを出すべきだと思う
913 :
909 :2005/06/05(日) 20:43:32
スレ違いだからだすのは気が引けるのですが Image[] diz; URL[] di; コンストラクタ(){ for(int i=0;i<2;i++){ di[i] = getClass().getResource("dizzy"+i+".gif"); diz[i] = Toolkit.getDefaultToolkit().createImage(di[i]); } あと、NullpointerExceptionが発生しているのは getClassではなくgetResourceの部分でした。
ぬるぽ
パスみすっただけかい Swing使ってるならImageIO使ってもいいんじゃないか?
916 :
909 :2005/06/06(月) 06:38:24
ImageIOですか、勉強してみます。 パスミスっただけ? ファイルはクラスと同じ場所にあるのに スレ違い過ぎるのでここに質問するのは もうよしときます。
>>913 >>916 こういうときはJava初心者スレにでも書いておいて、そこへのポインタを貼るといいよ。
ファイルの場所とクラスの場所には何の関連性もない。
クラスパスで考えれば関連性がないとはいえんが 環境しだいだな
それはリソースの場所とクラスの場所の話だろう<クラスパス
getResourceというコード使ってるからリソースの話だろう
922 :
デフォルトの名無しさん :2005/06/10(金) 21:09:58
>>923 なんつうか、このスレの存在価値が無くなりそうだな。
おまえらいままでSUNが作ってきたIDEちゃんと見てるか?
そこまでかわるなら4.xというマイナーバージョンアップでなくてもいい気がするが
4.0から4.1も激変ですよ。EJB2とか、いまさら使わないけど。
やっと、VC++ 2.0レベルになったか…。
Delphiレベルになってほしいね。
>>930 たしかにイベントに関しては多少増やしてほしいところだが
Delphiとどっちが上かと聞かれるとまたベクトルが違うからねぇ
Swingであるために楽な場面とかは割と多いし
JScrollPane でスクロールバーが表示されているかどうか知る方法ってありますか? VERTICAL_SCROLLBAR_AS_NEEDED を指定しているので、内部の コンポーネントのサイズによって自動的にスクロールバーが表示されたり消えたりしますが、 その表示状態を取得したいのです。
>>934 scroll.getVerticalScrollBar().isVisible();
とか?
936 :
934 :2005/06/13(月) 21:30:20
isVisible() は常に true を返すようです。類似したメソッドで、 scroll.getVerticalScrollBar().isShowing() というものがあり、 これを使うとうまくいきました。
gui4jは確かに便利そうではあるんだけど、これってi18nはどうやって使うの? XML定義ファイルをロケールごとに切り替えろってこと?
GUIつーのは初期配置だけじゃなくてその後の動的動作がポイントだと思うんだけど そのへんどーなんかね やりやすいようにはみえんが
このスレの前の方(
>>211 - )で絶賛されてた萌えSwing本買いました。
本屋には無かったんで Amazon で買ったんだけど、いいね、これ
まず意外と厚くてびっくり。
CDROMとか無駄がないし、文字も適度に小さくてなかなか好感触。
こういう良書は長く売れてほしいよ。表紙がネコミミだけど
もう買ったのですね 私は買っていなかったりしますが…… その人のWebページにはいろいろな言語(JavaSwing他含む)の解説が載っています。 まだ買ってない人はそこをみて、購入するか決めるのがよろしいかと。 どれも非常に分かりやすくかかれているのでよさげです。
ただのリファレンス本を何でそんなに有難がるんだ?
gui4jなんか糞。 SwiXml/SwiXAT最高。
943 :
937 :2005/06/15(水) 16:55:33
>942 ほほう、i18nも考慮されてるし、素直な設計で使いやすそう。紹介サンクス。
実際のところビジュアルに開発できないのなら 実行してテストを繰り返すのか? 効率悪いなぁ
945 :
デフォルトの名無しさん :2005/06/24(金) 15:27:49
> 新しいデスクトップJava機能 ってのがJDICだけだったら(´・ω・`) かも
LookingGlass…は去年の話だしなぁ。
おそらく、世界中の衛星写真が見れる機能が搭載される。
Sunには全く期待していません
>>950 デモはJEditorPaneはりつけてGoogle Map表示するだけ
つまりJEditorPaneがJavaScriptを解釈してAJAXだな?
AJAXとFlashのXMLSocketってどっちがパクリ?
Ajaxは、既存技術の集まりに名前をつけただけだから、ぱくったりぱくられたりしない
単なるJavaScriptだしな。
956 :
デフォルトの名無しさん :2005/07/09(土) 22:09:56
これからJavaのGUIアプリを作ろうと思っています。 Swingベースでソースコードが公開されているアプリケーション って何かありますでしょうか。
>>957 ありがとうございます。
これは既に見ています。
実際に利用されているアプリケーションのサンプルがあると
良いのですが。
>>958 ありがとうございます。
NetBeansの存在は知っていますが、多分巨大すぎて参考に
ならないかと。
フリーウェア等でGUIインターフェースに凝ったようなものを
ご存じでしたらお願いします。
>>959 つうか、NetBeansつかうだけでいいんじゃねぇの?
>>959 具体的にはどういうアプリを作りたいの?
GUIの程度によっては
>>960 の言うようにNetBeans使ってSunのサンプル
見れば十分だろ?
Swingはサンプルなくても普通に作れるよなぁ ってSWTスレに出没してたやつか
>>959 @あいてぃー会議室の有望新人いっさみたいなやつだな。
・・・ちょっと言い過ぎた。
いっさわらた
ナイスレスれす。
久しぶりにMFC使うとSwingの良さが分かると言うか MFCのひどさに泣きそうになる。 せめて.NETで作りたかった。
俺もWin専用GUIアプリはMFC捨てて.NETで作りたいな あれはDelphiとかBCBやってきた身としてはとっつきやすい Swingは次元が違いすぎる(この場合ほめ言葉)のでアレだ
やってみればわかるかと
それまだきてないだろ ただ、さりげなくSwingの特徴であるhtmlつかってるのわらた ラベルで複数行表示とか便利だもんね
いや、そういうのだったら3からおいかけてるからあれだが さすがにIDEで未完成のバージョンが「現状できる」とは俺はいえん
GUIのライブラリの出来とIDEは切り離して考えた方が良くない? まあ、生産性の部分ではIDEを抜きには考えられないと思うが。
【ちょっといいですか?】 コマンド処理というか、メニューの処理ってどうしてます? カットやコピーみたいに複数のコンポーネントで共有してる場合とか。 いろいろググってみたけど見つからないのでCommandManagerなんてのを 自作してやってますが、いい感じのフレームワークとかあるんでしょうか?
コマンドパターンそのの
そのものだった
>>977 つ javax.swing.Action
981 :
977 :2005/07/16(土) 13:37:37
コマンドパターンと言えばいいんですね。 例えば複数のイメージを開いて編集できるアプリケーションの場合、 「終了」コマンドはアプリケーションで、 「保存」コマンドはアクティブなドキュメントで、 「コピー」コマンドはアクティブなイメージのビューで ハンドリングしたいのですが、普通はどうやって処理するのか知りたくて、 この辺を解説してるところを探しているのですが、なかなか見つかりません。
全部アプリケーションで受けてその後呼び出し。
>>972 すげーのは分かったけど、FlashPlayerで解説すんなとも思った。
なぜ?
JavaのツールなのにAppletじゃないって悲しいことって他にあるかい?
アプレットだとVMは言ってないと見てもらえないし広く知ってもらいたいためでは? それにアプレットではなんでもできるけど、ナビゲーションツールとして 便利というわけではないし、あくまでも3層式アプリ用とわりきってるのだろう
こういうプレゼンテーションはFlashの方がよさそうな気もするJava技術者
AppletはもうやめてFlexと仲良くやっていこう
Flexは細かいGUIとか作るとちと厄介だしなぁ 金もかかるし
991 :
デフォルトの名無しさん :
2005/07/18(月) 10:21:13 金槌をもった人間には、あらゆる物が釘に見える。