Java低速GUI Swing 8at TECH
Java低速GUI Swing 8 - 暇つぶし2ch150:デフォルトの名無しさん
08/12/27 16:56:28
最初に>>149と同じようにrevalidateを試しましたが、他には
初めからsetVisible(false)でpanelにaddしておいて
スレッドでsetVisible(true)にするのもうまくいきました。

151:148
08/12/27 18:44:27
>>149
>>150
返事ありがとうございます。

revalidateについて調べてみますね。
もし自分が理解できなかったら、>>150 さんの言う方向でやってみたいと思います。

ありがとうございましたorz

152:デフォルトの名無しさん
08/12/27 18:48:32
JComponent#setVisible()を呼ぶともれなくrevalidateが呼ばれる件について

153:デフォルトの名無しさん
09/01/07 15:45:53
Swingでインクリメンタルサーチを実現したいのですが、
便利なクラス(インクリメンタル用)みたいのものはあるでしょうか?
自力で実装しなければならないとき、ヒントになる手法があれば教えていただけないでしょうか?

154:デフォルトの名無しさん
09/01/07 16:15:20
Swing Hacks

155:デフォルトの名無しさん
09/01/07 22:57:10
どのコンポーネントでインクリメンタルサーチするの?

156:デフォルトの名無しさん
09/01/08 00:23:41
JFrame#setLocation()が効かないんだけど、同じ現象遭遇してる人いる?
JFrame#setVisibe(true)の前でも後でも全然きかない。

JFrame#setLocationByPlatform()もだめ。。

157:デフォルトの名無しさん
09/01/08 05:15:38
使用環境も書かず、どう効かないか、最初からなのか何かのきっかけでそうなったのかも書かず。
ウインドウマネージャ次第では強制的に再配置している可能性も。

158:デフォルトの名無しさん
09/01/08 12:51:45
>>153
>Swingでインクリメンタルサーチ

Googleのクエリ候補表示みたいな事を
コンボボックスでやりたいのかな?

それともいわゆるEmacsみたいなインクリメンタルサーチ
をJTextComponentで実現したいのかしら?

159:156
09/01/08 19:25:06
>>157
すまん、
実行環境はWinXP、
開発環境はEclipse3.4
ビルドはJDK1.6.0_03、
実行JREは1.6.0_07に設定
現象は、どこにsetLocation()してsetVisible(true)しても画面左上にJFrameが表示されてしまう。
最初からです。

いかがなもんでしょう!?

160:デフォルトの名無しさん
09/01/08 19:39:57
>>159

ComponentListenerを使って、
いつ誰が左上に動かしてるのか見張ってみるのはどうでしょう。

161:デフォルトの名無しさん
09/01/08 21:26:46
レイアウトマネージャがよしなに配置してるだけじゃないの?
ソース晒せ。


ふるいやつだと、わざわざgetContentPane().setLayout()するのが面倒だなあ。
ヲレクラスで更にラップするのがめんどくさがりにはよさそうだ。

162:デフォルトの名無しさん
09/01/09 08:09:06
update 7ってバグ多くなかったっけ?

163:デフォルトの名無しさん
09/01/09 08:39:20
>>159
import javax.swing.*;
public class Foo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
//f.setLocation(300, 300);//どちらか
f.setLocationByPlatform(true);//どちらか
f.setVisible(true);
}
});
}
}
みたいに単純化したものでも同じ現象になる?
うちはWinXP+1.6.0_11だけど、setLocationでもsetLocationByPlatformでもきちんと機能する。
Windowsの標準シェルならウインドウマネージャが強制再配置するようなことはなさそうだし…

164:デフォルトの名無しさん
09/01/09 09:02:45
そこでHashMapを使うんだ!

165:デフォルトの名無しさん
09/01/10 06:09:58
>>163
JFrameのコンテンツペインには何も追加しないの?
コンテンツペインに追加したコンポーネントのpreferredSizeに
スクリーンをはみ出さない程度のDimensionを設定したら、
setLocationがちゃんと効いた記憶があるんだけど。
違ってたらごめん。

166:デフォルトの名無しさん
09/01/10 16:08:05
コンポーネントなしのタイトルバーだけのJFrameでもsetLocationは効くのが普通だけど
>>159のソースが分からないことには何とも言えんから問題の切り分けってことなら
>>163のようなものでも動作がおかしいのならJava環境かWin環境自体が変な可能性大だし
削ぎ落としたものは大丈夫なんだったら
JFrame自身の位置情報に影響を与えるようなコンテンツが入れられているか
自分でも知らないうちに別の場所で位置を書き換えているようなコードを入れているかなので
差し支えない範囲でソースを出してもらわないと他の人間には判断のしようがないと思う

167:デフォルトの名無しさん
09/01/10 19:00:09
とりあえずソースを晒せ。それからだ。

168:デフォルトの名無しさん
09/01/11 18:31:55
JFrame でアプリを作り、Mac で起動し、
Mac の上部から 「~~を終了」 を選んで終了した際に
ドキュメントが保存されていない場合には保存確認をとり、
キャンセルされたらアプリケーションの終了をキャンセルしたいのですが、
こういうことはどのようにすればいいのでしょうか?

169:デフォルトの名無しさん
09/01/11 18:44:18
JFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)
とかじゃなかったっけ?
で、WindowListenerで閉じるときの処理を書く。

170:デフォルトの名無しさん
09/01/11 20:09:41
それが、ウィンドウを閉じた時はそこにくるんですが、
「~~を終了」 の時はそこに来ないようなんです。

addShutdownHook なら一応保存確認することはできますが、
アプリケーションの終了をキャンセルすることまではできなくて、
どうしたものかと思っています。

171:デフォルトの名無しさん
09/01/11 21:00:30
>>168
URLリンク(developer.apple.com)

172:デフォルトの名無しさん
09/01/11 21:13:21
>>171
ありがとうございます。できました!

173:デフォルトの名無しさん
09/01/12 20:20:49
高橋麻奈の優しいJAVAで一通り覚えた。けどこれから何をすればいいのか分からん。
あれ。なんでJAVAを勉強しようと思ったんだっけwwwwwwww

174:デフォルトの名無しさん
09/01/12 22:07:56
やさしいJavaとか書いたらまあ湧いてくるじゃないか…

175:デフォルトの名無しさん
09/01/12 22:33:09
やさしいJavaと聞いてとんできました

176:デフォルトの名無しさん
09/01/12 22:35:42
やらしいJavaですか?(*ノノ*)キャー

177:デフォルトの名無しさん
09/01/13 08:44:10
エロく無いと学習意欲がわかない訳ですね。

マナタソに飽きたのなら他の娘に乗り換えてみるのも一つの選択肢。浮気性は嫌われるかもだが。
はじめてのJavaとか童貞が飛びつきそうなマヌアル本も必要な時期だなwww

178:デフォルトの名無しさん
09/01/13 21:43:44
もうすこしスレッドの扱いを楽に出来ないかね?

179:デフォルトの名無しさん
09/01/13 21:47:46
楽になったじゃないか

180:デフォルトの名無しさん
09/01/14 04:50:22
スレッドのどの部分が楽じゃないか書かないと分からないよ。
単に一般的でない変な使い方しようとしてるだけとか?

181:デフォルトの名無しさん
09/01/14 12:26:18
個人的には ThreadLocal と ThreadPool あたりが導入された時点で割りと満足だなー

182:デフォルトの名無しさん
09/01/14 13:01:59
ThreadPool ??

183:デフォルトの名無しさん
09/01/14 15:46:13
>>182
java.util.concurret.ThreadPoolExecutor とその関連

184:デフォルトの名無しさん
09/01/14 16:22:01
スレッドの仕組み的な話じゃないのか
描画スレッドとかさ

185:デフォルトの名無しさん
09/01/14 22:19:39
ここでSwingWorkerが出てこないのがこのスレのレベルの低さ

186:デフォルトの名無しさん
09/01/15 02:39:01
土方生活が長いとそんなものでも楽だと思うものなんでしょうか?

187:デフォルトの名無しさん
09/01/15 03:34:36
SwingWorker最低限絞ったAPIだからな。
使うっちゃ使うが小規模なアプリだな。

188:デフォルトの名無しさん
09/01/16 01:08:24
JavaFXのスレが立たないのは、なぜなんでしょ?

189:デフォルトの名無しさん
09/01/16 03:34:42
誰も使ってないからに決まってるじゃないか。


描画スレッドで特殊な用途?
サブミリナルでも埋め込みたいとか? ちらつき程度ならダブルバッファ使って描画してれば充分だろうし。

190:デフォルトの名無しさん
09/01/16 23:59:30
>>189
誰も使いたがらない理由は、たとえば何なんでしょ?

191:デフォルトの名無しさん
09/01/17 00:33:53
・重い
・配布サイズでかい
・ツールが弱い

192:デフォルトの名無しさん
09/01/17 00:57:37
>>191
なるほど。
逆に軽くて、配布サイズ小さくて、ツールがよければ使うってことですかなぁ。

193:デフォルトの名無しさん
09/01/17 09:15:20
名前が今一ってのもあるな。
FXよりはFAとかDXとかのほうがよかった感じ。

194:デフォルトの名無しさん
09/01/17 10:16:23
FXとかFAとかDXとか言われると、PC98を思い出してしまうぜー。
PC98だと終わってしまうから、JavaNXでどーよ。

195:デフォルトの名無しさん
09/01/17 10:17:53
FXって投機臭がする名前だ

196:デフォルトの名無しさん
09/01/17 10:25:10
>>193
ぶっちゃけJavaがついてる時点で

197:デフォルトの名無しさん
09/01/17 11:56:13
>>193
頓挫した「winFX」への当てつけじゃないの?

198:デフォルトの名無しさん
09/01/17 16:27:39
>>191
URLリンク(www.google.co.jp)

重くて、配布サイズでかくて、ツールがいまいち分かりにくいSilverlightが人気なのは、なんなんですかねえ。

199:デフォルトの名無しさん
09/01/17 16:30:15
人気・・・・・あるのか・・・・?

200:デフォルトの名無しさん
09/01/17 16:42:49
JavaFXと比べれば

201:デフォルトの名無しさん
09/01/17 16:47:23
選択肢がなければ使わざるを得ない

202:デフォルトの名無しさん
09/01/17 17:12:54
>>199
あ、失礼、人気じゃないすね。Googleトレンドとかで、比較してみてということ

>>200
そいうことす

203:デフォルトの名無しさん
09/01/17 17:30:37
Flexでいいじゃん。

204:デフォルトの名無しさん
09/01/17 19:28:05
>>203
%%
%%


205:デフォルトの名無しさん
09/01/17 22:51:56
配布サイズって関係あるのか?毎日ダウンロードを繰り返すわけでもあるまいに。

206:デフォルトの名無しさん
09/01/18 19:03:45
【初心者】Java質問・相談スレッド122【歓迎】
スレリンク(tech板)

次スレが無い

207:デフォルトの名無しさん
09/01/18 19:18:03
>>206
気にするな

208:デフォルトの名無しさん
09/01/19 22:19:16
本屋にjRubyの本有ったので眺めてみたら、rubyからswing呼べるのな。楽しそうだわwww

209:デフォルトの名無しさん
09/01/19 22:32:49
JavaScriptからでも何でも呼べるじゃん・・・

210:デフォルトの名無しさん
09/01/20 02:05:44
groovyからry

211:デフォルトの名無しさん
09/01/20 02:45:10
PHPか(ry

212:デフォルトの名無しさん
09/01/20 02:46:24
マジレスすると、言語を生かしたSwing呼び出しという点では、Groovyだな。
SwingBuilderはなかなかいい。

213:デフォルトの名無しさん
09/01/20 04:39:31
Cからswing使ってる漏れはどうやら勝ち組(ry

214:デフォルトの名無しさん
09/01/25 06:39:50
JTreeでソートしたくて

((DefaultTreeModel)getModel()).removeNodeFromParent(node);

これでノードを外して

parent.add(node);

これでノードを追加してソートしてたんよ

でも、これだと開いてるツリーが閉じてしまうんだ。
開いてるツリーそのままでソートする方法しらない?

215:214
09/01/25 23:43:39
とりあえず、自己解決。

用意されてるメソッドでそれっぽいの見つけられなかったから、
現在展開してるパスを全部しらべて、ソートが終わってから開きなおすようにしたぜ。

216:デフォルトの名無しさん
09/01/26 01:38:21
久々にSwing使ってみたけど、相変わらず酷いなぁと思う

ここのスレの人はなぜSwingを使うのだろう
C#やVB.NETじゃダメなの?
LinuxやMacで動かしたいわけじゃあるまいし。

217:デフォルトの名無しさん
09/01/26 02:09:41
>>216
いや、Linuxでも動かしたい。

218:デフォルトの名無しさん
09/01/26 02:49:22
>>216
いや、Solarisでも動かしたい。

219:デフォルトの名無しさん
09/01/26 05:32:01
マクで動かそうと思うと大変だから止めとけ。あれは異世界。存在しない物として扱ったほうが平和。


swing程度で十分というのが大きい。awtでもむしろ十分だが。
まあvs使えないだけとも言うが。コントロールをちまちまマウスで配置するくらいならコードで記述したい訳だ。

220:デフォルトの名無しさん
09/01/26 19:21:07
ポトペタなしのswingいじるのって、html手打ちするようなもんですよね

ポトペタありでswingいじったことないんですけど

221:デフォルトの名無しさん
09/01/27 03:35:16
HTMLもアドビのソフトでちまちま設定するより、メモ帳で書いたほうが速いしなあ。

222:デフォルトの名無しさん
09/01/27 11:30:33
HTMLは手打ち以外の選択肢はないな
大昔は必要がなかったし、今はカススタイラーゆえ意味がない

223:デフォルトの名無しさん
09/01/27 13:32:51
ポトペタありのSwingってのもキモそうだな。
なんか、モデルやコントローラまわりで歪なコード吐きそうだ。

224:名無しさんに接続中…
09/01/27 16:31:56
SwingはなぜVBのようなデザイナーがないのだ?


225:デフォルトの名無しさん
09/01/27 16:54:49
おまえらNetBeansを無視するなよ。
Swing+JSR295+JSR296と組み合わせてポトペタできるくらいにまでなってるんだぞ。
URLリンク(builder.japan.zdnet.com)

226:デフォルトの名無しさん
09/01/28 14:06:14
HTMLも、業務アプリならポトペタがいいよなあ。

227:デフォルトの名無しさん
09/01/28 16:28:16
まあそういうときはAdobe Dreamweaverが最低ラインだな。

228:デフォルトの名無しさん
09/01/29 06:43:53
swingはなぜ流行らないんだ?

229:デフォルトの名無しさん
09/01/29 08:25:30
デカくて重いからでないかい

230:デフォルトの名無しさん
09/01/29 08:54:08
>>228
GUIフレームワークで流行ってるのってなに?

231:デフォルトの名無しさん
09/01/29 08:59:55
MFC、VB


232:デフォルトの名無しさん
09/01/29 09:01:37
そこらへんは他に選択肢ないから使われてるだけじゃ

233:デフォルトの名無しさん
09/01/29 09:18:38
そのとおりだと思うけど、
Swingはなぜそれらの代替になりえないのか・・・

速度か?やはり速度なのか?

234:デフォルトの名無しさん
09/01/29 09:20:45
Mac版のリリースが遅すぎる!

235:デフォルトの名無しさん
09/01/29 09:21:56
先に普及したものが圧倒的に強いし。
単にSwingに既存のものを置き換えるほどの魅力がなかったってだけでしょ。

236:デフォルトの名無しさん
09/01/29 09:31:29
>>233
自分は長いことWindowsアプリケーションを作ってきたんでつが、V2Cという2chビューワを使い始めてSwingアプリの軽快さにびっくりしたです。
V2Cが純Swingじゃなかったらスミマセン

237:デフォルトの名無しさん
09/01/29 09:37:22
いや、純だよ。
やっぱJavaはもうちょいデスクトップアプリケーション強化して、それと速度に関してもどうにかアピールしないとなぁ

238:デフォルトの名無しさん
09/01/29 13:26:10
javaはもっさりってのが一般的な常識だからかもしれんね
あと、表示が微妙にださかったり

俺はjavaしかまともに使えないから、swingをやってみた。
swingでダメだったらMS製品買えばいいかなーって感じで。

java以外も使えるようになりたいから、MS製品で遊んでもいいと思うんだけどね

239:デフォルトの名無しさん
09/01/29 14:11:25
>>238
> java以外も使えるようになりたいから、MS製品で遊んでもいいと思うんだけどね
じゃあ Express Editions でも入れて C# とかやればいいと思うよまじめな話


240:デフォルトの名無しさん
09/01/29 15:46:58
Linux系のGUIをJavaでSwingでってわけにはいかんのか?
用途としてはもうそっちしかなかろう

241:デフォルトの名無しさん
09/01/29 16:03:25
Hashtableが保持している値をJTableに表示させていて、
Hashtableの内容が変更されたら、それと連動してJTableの表示も変更されるようにしたいのですが
何か常套手段みたいなのが有るんでしょうか?


242:デフォルトの名無しさん
09/01/29 16:55:15
>>241
レンダラーやエディターで意図したものにあってるかな?

243:デフォルトの名無しさん
09/01/29 19:24:19
>>241
10msおきにHashtableを監視してJTableにイベントディスパッチジョブ投げるスレッドを常駐させる。

Hashtable派生させたりMapやTableModelでラップしてもいいなら、他にも手はある。

244:デフォルトの名無しさん
09/01/29 19:25:19
BeansBindingとかでなんとかならんの?
使ったことないけど

245:デフォルトの名無しさん
09/01/29 20:25:16
>>243
あ、言われちゃった。
手抜き実装だけどこんな感じ。2秒ごとにMap操作して、JTableが更新される。
URLリンク(bucyou.mydns.jp)
>>244
ならんはず。

246:デフォルトの名無しさん
09/01/29 21:17:11
Hashtable使うのをやめる

247:デフォルトの名無しさん
09/01/30 04:09:12
10msおきに監視ってコスト高そうだ。負荷凄いだろwww
変更する処理にトリガ噛ませてイベント受け取るようにしたほうがよく無いか?


ウェブ系とかjava前提の製品とかだとインストーラからjava GUIだったりはするね。
インストーラ作成用との便利なフレームワークとかあるんだっけか?


表示が微妙にださいってのは人それぞれだからなあ。窓すらださいって言い出すマカみたいな変人も居るし。マルチモニタとかにすら対応できてないマクのほうがださいだろって感じだが。


GCがアレなのか、使ってるともっさり感が増すし、メモリも喰いまくってるのが駄目だな。
それ故、MFC, VBにすら負けてしまう。java使いが作る側には不満無いけどね。純粋にアプリユーザの側にはjavaじゃないほうが快適。


248:デフォルトの名無しさん
09/01/30 07:39:08
>>247
>変更する処理にトリガ噛ませて
それが243の言ってる”Hashtable派生させたりMapやTableModelでラップ”で、
その実装が、244のソースだろ。

MFC、VBには負けるかもしれないけど.NetのWinFormsとはいい勝負だと思う。
場合によってはSwingのほうが速いし。軽い。

249:デフォルトの名無しさん
09/01/30 10:30:43
>>247
スレチだがマルチモニタ環境ってのはMacのほうが歴史がずっと長いんだけどな…
Windows XPじゃマルチモニタでカラープロファイルを別のをあてる、とかはできないしね。Vistaは知らん。
まー最近はWinのドライバのほうがマルチモニタでできること多いけれどもw

250:デフォルトの名無しさん
09/01/30 10:38:42
winのマルチモニタはMEからだっけ?98からだっけ?

個人的に、Macが先でMSがそれを追いかけたってのは、MSが先行するより信憑性がたかいw

251:デフォルトの名無しさん
09/01/30 10:52:35
ちょっと調べてみたが、
win98からマルチモニタ対応、しかしMacの対応時期がわからんかったw

252:デフォルトの名無しさん
09/01/30 13:35:57
助けて下さい。

画像を拡大表示しているのですが、アニメーションGIFの拡大表示で困っています。

JLabelのアイコンにアニメーションGIFを設定すると、
フレーム切り替えのたびに以下のメソッドが実行されます。

public void paint(Graphics g)
public boolean imageUpdate(....

この時、毎回アニメーションGIFの画像を拡大してると表示がもっさりしてしまいます。
だから、一度拡大表示したフレームは拡大したイメージを保存しておいて、再利用したいのです。

そこで問題になるのは「表示しようとしてるのは何フレーム目なのか?」
これが分からないことなんです。

何か分かる方法しってる人いませんかorz

253:デフォルトの名無しさん
09/01/30 16:59:16
カラープロファイルなんて印刷屋でもない限りどうでもいいだろ。

問題なのはメニューとか操作GUIの設計。
マクの実装だと、メニューはメインモニターにしか表示されないはず。
窓や犬は、メインウィンドウ自体にメニュー付いてるから、メインモニターとかサブモニターとか関係無く自由に使える。

254:デフォルトの名無しさん
09/01/30 17:45:12
winも結構トンチンカンな動きするソフトいたよな

サブモニタで右クリックしたら、メインモニタにメニューが出たり、
サブモニタで最大化したら、メインモニタで最大化したりw

サブモニタで最大化したら、メインモニタの解像度に広がった時は非常に困ったw

255:デフォルトの名無しさん
09/01/30 20:29:06
サブモニタから起動したJARアプリのスプラッシュは、
やっぱりサブモニタに出て欲しいなあ。アプリはちゃんとサブ側に出る。
あ、当方WinXP+Sunの1.6系Java。

そのへん、Macはどうなんでしょ。

256:デフォルトの名無しさん
09/01/30 20:39:50
サブモニタから起動したかってどうやって判断するんだろ?

257:デフォルトの名無しさん
09/01/30 20:48:28
> アプリはちゃんとサブ側に出る。
前回終了時の表示位置覚えてるだけじゃなくて?

258:デフォルトの名無しさん
09/01/30 22:00:26
サブモニタから。。。起動?

俺のwinはタスクバーがサブモニタにあるんだが、これだと全部サブモニタに出ないとおかしくなるぜ

>>257でいいと思う

259:デフォルトの名無しさん
09/01/30 22:37:13
Windowsの流儀は知らないけどタスクバーがある方を
プライマリモニターと呼ぶわけじゃないんだ?

260:デフォルトの名無しさん
09/01/30 22:52:01
winのタスクバーはメインもサブも移動可能
てなわけで、俺のタスクバーはサブモニタに配置してあります

メインかサブかは、画面の解像度とか設定する画面で設定できるっす

261:255
09/01/30 22:56:24
・サブモニタのデスクトップ上のJARファイルをダブルクリック
・サブモニタに移動したエクスプローラからJARファイルをダブルクリック

いずれもサブモニタにアプリが出る。
ジオメトリ関連でやってることはsetLocationByPlatform(true)のみ。
これを外してもやはりサブモニタに出る。

サブモニタのコマンドプロンプトからjava.exe経由で起動すると
さすがにメインモニタにアプリが出た。
サブモニタのNetBeansから起動してもやっぱりメインモニタ。

262:デフォルトの名無しさん
09/01/30 23:03:33
>>261
おもすれー

ちょっと試しになんか作ってみよう

263:デフォルトの名無しさん
09/01/30 23:09:57
皆さんに聞きたいのですが、javaでどんなデスクトップアプリつくってますか?

今自分はタスク管理系アプリを作成しています。
メモ帳でいいじゃんはいいこなしでw

264:デフォルトの名無しさん
09/01/30 23:22:40
>>263
社内用にファイル処理系のアプリ。

265:デフォルトの名無しさん
09/01/30 23:33:15
>>263
エロ画像を楽しく閲覧するためのツール

266:デフォルトの名無しさん
09/01/31 00:11:06
>>263
2chのスレッド監視してエロ画像勝手に収集するツール

267:デフォルトの名無しさん
09/01/31 00:30:01
>>263
携帯電話とmacとwinでスケジュールを一元管理するソフト

268:デフォルトの名無しさん
09/01/31 00:50:08
ADVエンジン

269:デフォルトの名無しさん
09/01/31 01:01:11
>>263
無駄にリッチなUIをもつ画像ビューワー

をJavaFXでつくりたい。

270:デフォルトの名無しさん
09/01/31 21:00:02
Swing学習中なんだけど、ドローツールみたいなのを作るとき、以下のどれがいい?
1) Canvasみたいなコンポーネントを作って、図形を全部自前で管理する。
2) 図形の種類毎にコンポーネントを作って、Panelとかに貼り付ける。
3) それ以外。思い付かないけど。


271:デフォルトの名無しさん
09/01/31 22:29:30
1かな。
ありがちなパターンだとShapeクラスを作ってそのクラスを継承したクラスを作る。
でJPanelを継承したShape描画用のコンポーネントを作って、paintComponentですべてのShpaeを描画する。

272:デフォルトの名無しさん
09/01/31 23:16:09
>>270
ネットワーク・グラフ描画用のライブラリをいくつか使ったことがあるんだけど、
そのどちらでもない設計が多かった。>>271が近い。

図形の管理はドロー用コンポーネントが行い、
実際の描画は図形オブジェクトに委譲している、と言えばいいかな。

図形の種類ごとにクラスを作るのは2と一緒だけど、
これらのクラスは独自のクラス階層を構成していて、
つまりJComponentのサブクラスではないので、そのままではSwingに乗っからない。
代わりに、図形を載せて描画する専用のSwingコンポーネントがある。
このドロー用コンポーネントは、paintComponentをオーバライドしていて、
addされた図形オブジェクトすべてに対して、paint系メソッドを呼ぶようになっている。
これらの図形クラスのpaint系メソッドは、各図形のための適切な描画を行うことになっている。

図形の追加の度にドロー用コンポーネントを変更しなくていいので、すっきりする。
Open-Closed Principleに合致しているね。

ライブラリによっては、図形クラスのpaint系メソッドがさらに別のオブジェクトに委譲可能で
ここがAdaptableだったり(JListのレンダラみたいなの)、
図形クラスを、Swing非依存のモデルクラスと、Swing依存のビュークラスに分けて設計していたり、
さまざまだった。
この手のライブラリはいろいろあるので、見てみるといい刺激になると思う。
挙げるなら、OpenJGraphとかJGraphとかJungとかかな。

273:デフォルトの名無しさん
09/01/31 23:59:22
「もしやJComponentを再発明しているのでは?」と思ったら、
思い切って資産捨てて透過JComponentベースで作り直す勇気も必要かも。

ドローツールとのことなので、まずは
・位置サイズのgetset、
・可視性のgetset、
・クリップしたGraphicsを渡すpaint
ぐらいの軽い独自インタフェースで十分だと思うけど。

274:デフォルトの名無しさん
09/02/01 00:07:19
>>271-272
thx! 「グラフィックJava2」とか「Filthy Rich Clients」とか
引っくり返しながらいじってるんですが、既存コンポーネント以外
の話になると極めてプリミティブな部分しか載ってなくて、
どういう風に設計すればよいか、という部分については頭を
かかえてたので参考になります。

275:デフォルトの名無しさん
09/02/01 00:16:38
>>273
や、今のところ、「JComponentのサブクラス作って、その上にマウスで
Rectangleが描けるようにナッター\(゚∀゚)/」というレベルなので……。

その先に進もうとして、「これをつかんで移動させたり変形させたりしよう
と思ったら、図形もJComponentのサブクラスにした方がええんちゃうか?」
というのが質問の発端です。

276:デフォルトの名無しさん
09/02/01 00:37:47
JDrafterを参考にするといいかも

277:デフォルトの名無しさん
09/02/01 01:09:59
>>276
宣伝乙。

278:デフォルトの名無しさん
09/02/01 01:36:34
いや、宣伝じゃないよ
あれは素直にすごいだろ
jadで十分読めるから読んでごらん

279:デフォルトの名無しさん
09/02/01 02:05:58
スプラッシュなんてちゃんと見ないからどうでも良いな。
むしろ消せるオプションを標準実装にして欲しいくらいだ。気持ち程度、余計な事をしない分、起動が速く成るだろうし。


窓は融通が利くけど、マクはマクらしいとアポーが決めてるアプリの使い方しか出来ないように強制されてるのが嫌。
俺が買ったものくらい自由に使わせろって。

280:デフォルトの名無しさん
09/02/02 00:12:19
>>240
既存のフロントエンドをSwingに移行させるんなら
そこそこ市民権を得そう。

281:デフォルトの名無しさん
09/02/02 05:31:37
>>279
JavaSE6の機能でスプラッシュ出してるなら、起動速度は変わらない

282:デフォルトの名無しさん
09/02/02 12:00:55
つかスプラッシュ消えるの速すぎてタイトル嫁ねえw
一定以上の時間指定したい

283:デフォルトの名無しさん
09/02/02 12:12:28
起動をもっさり遅くすればいいんじゃね?

起動すればソフトのタイトル見えるんだし、わざわざ邪魔なスプラッシュ表示しとく意味ねえよ

284:デフォルトの名無しさん
09/02/02 13:38:01
java6のスプラッシュはVM起動時に表示されるんであってアプリ起動時に表示される訳じゃないからアプリをもっさりさせても意味ないよ。

285:デフォルトの名無しさん
09/02/02 13:40:56
まじかよw

スプラッシュって起動中だからちょっとまっててな。ってニュアンスが一番よさげなのにw

286:デフォルトの名無しさん
09/02/02 13:44:23
きっとスレ違いでは無いはず・・・。

#include<gcj/cni.h>
#include<javax/swing/JFrame.h>
#include<javax/swing/JButton.h>
#define JS(str) ::JvNewStringUTF(str)
int main(void)
{
 ::JvCreateJavaVM(NULL);
 ::JvAttachCurrentThread(NULL,NULL);
 {
  JFrame *frame=new JFrame(msg);

  frame->add(new JButton(JS("Okey")));
  frame->setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE);
  frame->pack();
  frame->setVisible(true);
 }
 ::JvDetachCurrentThread();
 return 0;
}

JFrameが表示された後、即main関数を脱出してしまう。
当然といえば当然だが、これを上手いこと防ぐ方法は無いか?

287:デフォルトの名無しさん
09/02/02 15:02:38
frame->setVisible(true);の後ろに↓を足したらいいんじゃね?

try {
while (frame->isVisible()) {
Thread->sleep(1000);
}
} catch (InterruptedException e) {
// 華麗にスルー
}


288:デフォルトの名無しさん
09/02/02 20:39:52
>>282
Frameの表示を遅らせれば?

289:デフォルトの名無しさん
09/02/02 22:08:46
>>287
スレッドで分離する方法とかもあるんだけど、
定石的な方法は無いだろうか?

>>288
どういう事?いまいち想像が付かないが。

290:デフォルトの名無しさん
09/02/02 22:24:38
>>289
普通にjavaだけでやる分には、main抜けても問題ないからわかんないっす。

そして、俺も助けて欲しいことが。

URLリンク(sandalman-no-blog2.blogspot.com)
ここのソースなんだけど。

JTree内でDnDすると、ツリーが閉じてしまうんだ。
JTreeの以外からドラッグしたのをJTreeにドロップする分には閉じない。

JTreeからJTreeにDnDするとドロップされた側が閉じてしまう。
わけわかんねーっす、誰か助けて。

291:290
09/02/02 22:39:56
自己解決したっす。

// node.removeFromParent();
((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node);
// ((DefaultTreeModel) tree.getModel()).reload();

292:290
09/02/02 22:41:26
途中送信orz

node.removeFromParent();
((DefaultTreeModel) tree.getModel()).reload();



// node.removeFromParent();
((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node);
// ((DefaultTreeModel) tree.getModel()).reload();

こうしたら閉じなくなったっす。

node.removeFromParent();ってなんか使いにくいんですかね?

293:デフォルトの名無しさん
09/02/03 04:35:28
ほんとに助けてほしいなら、わかんねーすっとかムカつく言葉遣いやめておいたほうがいいな。

294:デフォルトの名無しさん
09/02/03 09:55:01
別スレの空気嫁とかいいながら煽る人よりは

295:288
09/02/03 14:44:18
>>289
スプラッシュが消えるのはFrame等が表示されるまでだから。
下のを-splash:temp.pngとかで適当にスプラッシュ表示させてみ。

import javax.swing.*;
public class SplashTest {
public static void main(String[] args) throws Exception {
Thread.sleep(5000);

SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.add(new JLabel("てすと"));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}

296:デフォルトの名無しさん
09/02/05 19:47:24
というか、スプラッシュの表示時に表示したい時間分、sleepすれば
いいだけなんだけどな。

297:デフォルトの名無しさん
09/02/05 21:28:43
そのスプラッシュ超いlらないなw

298:デフォルトの名無しさん
09/02/05 21:36:09
5分ぐらいスリープしとくとちょうどいいんじゃないかな

299:デフォルトの名無しさん
09/02/05 23:08:46
どん兵食うのにか?

300:デフォルトの名無しさん
09/02/05 23:20:25
それだ!
スプラッシュにラーメンタイマー機能をつければいい!!

で、何の話だっけ?

301:デフォルトの名無しさん
09/02/06 02:12:04
どんべえも最近は3分じゃねぇの?ってとこまでは読んだ。

302:デフォルトの名無しさん
09/02/06 02:15:24
5分か3分か選べるオプションをつければ完璧という事は魂で理解できた

303:デフォルトの名無しさん
09/02/06 02:18:00
ていうか、スプラッシュに「閉じる」ボタンがあれば誰も困らないのに…

304:デフォルトの名無しさん
09/02/06 04:22:44
スプラッシュが閉じるときに、音を鳴らす必要があるな。

305:デフォルトの名無しさん
09/02/06 20:05:07
蓋を閉めてジャヴァアプリを起動する必要があるけどな。

306:デフォルトの名無しさん
09/02/06 23:02:17
4分を舐めると火傷するぜ・・・

307:デフォルトの名無しさん
09/02/06 23:04:42
>>306
頭使えよ

5分設定で起動してから1分後にお湯を入れればいいんだ

308:デフォルトの名無しさん
09/02/06 23:19:52
じゃあ1分くらい用意してくれよ

309:デフォルトの名無しさん
09/02/07 18:06:37
URLリンク(www.cupnoodle.jp)
もうお前らこれ使えよ…

310:デフォルトの名無しさん
09/02/07 18:27:57
これじゃスプラッシュでないじゃん

311:デフォルトの名無しさん
09/02/07 19:01:30
すみませんが、質問させてください。
Swing Application Frameworkをバリバリ使ってます、方ってこのスレでいますでしょうか?

創るJavaでJavaを再学習しているのですが、実際のアプリSwingだといろいろ管理が面倒だな、と思っていたときに
上記のフレームワーク見つけたのですが、1.03になってもあまり流行っている感じがなかったので
問題があったのかぁ、と思ったので・・・・

使っている方で、「この辺が便利だよ」、とか「これが使えない」とかありましたら教えていただけないでしょうか?

312:デフォルトの名無しさん
09/02/07 19:57:39
>>311
使ってないけど、J2SE7に含まれるらしいよ
けど誰か忘れてたけどアプリケーションクラスがシングルトンになってる時点でだめだとか書いてたような・・・

313:デフォルトの名無しさん
09/02/07 23:27:34
ポップアップメニューのsetLightWeightPopupEnabledに相当するメソッドは
JMenuにはないでしょうか?

ポップアップメニューにJMenu追加して分岐させたら、
分岐させたメニューが表示できませんでしたw

setLightWeightPopupEnabled使わないとポップアップメニューを出せないような作りが悪いのかもしれませんが。
もしあったら教えてください。

314:デフォルトの名無しさん
09/02/07 23:41:38
>>313
JMenu#getPopupMenu() で取ってきたポップアップメニューに setLightWeightPopupEnabled

315:デフォルトの名無しさん
09/02/07 23:47:57
>>313
どう考えてもSwingの描画ぶっ壊してるから他の部分でも見えてないだけで問題があるかと。

316:デフォルトの名無しさん
09/02/08 00:01:10
>>315
はい、継承してコネコネしてるJLabelの上だとポップアップメニューがでないんです。
いつか直さないと。

>>314
ありがとうございます。
JMenuの中にpopupMenuがあって気になってましたが、それでいけそうな気がします。

317:デフォルトの名無しさん
09/02/08 00:35:27
>>314
めでたく上手くいきました。
ありがとうございました。

318:デフォルトの名無しさん
09/02/09 17:16:44
アプリケーション終了時に、ウィンドウの位置とサイズを記憶したいです。(次の起動時に復元するため)

この時、最大化した状態で終了すると、元に戻すボタンを押した時のサイズを取得できません。
この元の位置(できればサイズも)を最大化してる状態で取得する方法はないでしょうか?

※自分でやった事
ComponentAdapter#componentMovedを使って、
getExtendedState() == NORMALの時に位置を記憶させてみたものの、
最大化した時にgetExtendedStateがNORMALの状態で動いてしまい、
位置を-4,-4で記憶してしまいます。

マルチモニタでも動かしたいため、0以下の値を弾くわけに行かなくて困っています。

componentResizedが動く時はgetExtendedState() == MAXIMIZED_BOTHになっているため、
サイズはなんとか記憶させることができました。

319:デフォルトの名無しさん
09/02/09 18:12:18
EDTの簡単な取得方法はありませんでしょうか?

320:デフォルトの名無しさん
09/02/09 20:23:34
6u12でAWTとSwingの限定的な混在がサポートされたな。

321:デフォルトの名無しさん
09/02/09 21:02:12
>>319
EDTを取得して何すんの?
↓でできるけど

import javax.swing.SwingUtilities;

public class GetEDT {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//↓こいつがEDT
Thread edt = Thread.currentThread();
System.out.println(edt);
}
});
}
}


322:デフォルトの名無しさん
09/02/09 21:27:51
>>321
それは分かりますが、単純にEDTが走ってればそれを返して、動いてなければnullみたいなのがありそうだなーと思っただけです。
確かに用途は少ないですね。
Thread#setUncaughtExceptionHandler()をEDTに設定したかったのですが、すでに取得する方法があればそれを使用しようと質問しました。
わざわざくだらない質問に答えていただきありがとうございました。

323:デフォルトの名無しさん
09/02/09 23:04:02
>>322
URLリンク(java.sun.com)()
URLリンク(java.sun.com)()


324:デフォルトの名無しさん
09/02/10 00:58:11
>>312
OpenSwingはどうなん?


325:デフォルトの名無しさん
09/02/10 14:02:26
>>323
それAWTのシステムキューだろ。

326:デフォルトの名無しさん
09/02/10 18:23:34
JTextComponent でスペースバーが押されたらアクションを実行し、
その際空白文字は入力されないようにしたいのですが、
以下のようなやり方(いちおう動く)でよいのでしょうか?
もっと一般的な方法はあるでしょうか?

Keymap keymap = textComponent.getKeymap();

// スペースバーにアクションをマッピング
KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0);
keymap.addActionForKeyStroke(stroke, action);

// スペースバーが押されても空白文字が入力されないようにする
keymap.setDefaultAction(new DefaultEditorKit.DefaultKeyTypedAction() {
    @Override public void actionPerformed(ActionEvent ae) {
      String cmd = ae.getActionCommand();
      if (!cmd.equals(" ")) {
        super.actionPerformed(ae);
      }
    }
  } );


327:デフォルトの名無しさん
09/02/10 20:08:46
>>326

コピペでスペースが入ってきてもやっぱり弾くのかな。
ならばjavax.swing.text.DocumentFilterで弾くのが楽じゃない?

328:sage
09/02/10 21:13:11
>>326
Documentに、特定の文字列が挿入されるのを防ぐ場合には、通常DocumentFilterを使う。

Documentにスペースが挿入されても構わなくて、キーボードからの入力のみフィルタするなら、
KeyListenerを使ったり、processKeyEvent(),processKeyBinding()等をオーバーライドして
実装することもできるけど、いずれもコードが汚くなるから、326の処理でいいと思う。

あとは、瑣末な問題だけど、個人的には、ActionEvent#getActionCommand()の戻り値が
nullでないとは規定されてないから、if (!cmd.equals(" ")) を!" ".equals(cmd)にするか、
if (cmd != null && !cmd.equals(" "))に変更するぐらいかな。

329:デフォルトの名無しさん
09/02/10 23:12:34
>>326
おれが作るならばDefaultKeyTypedActionの継承はしないで
keymap.getDefaultAction()して保存おいてスペース以外ときは
そっちに移譲するようなActionにするかもしれない。なんとなく。

330:デフォルトの名無しさん
09/02/10 23:25:06
>>325
URLリンク(java.sun.com)()
> 現在のスレッドが AWT イベントディスパッチスレッドの場合に true を
> 返します。JDK Version 1.3 以降、このメソッドは
> java.awt.EventQueue.isDispatchThread() を呼び出すだけです。

なので、EDTの判定に用いるのは間違いじゃない。

331:326
09/02/11 00:24:39
>> 327
今回はキーが押された場合のみを処理したいので
DocumentFilter は使えないのですが、
回答ありがとうございます。

>>328 >>329 を参考にして
こんな感じにしてみました。

final Action defaultAction = keymap.getDefaultAction();
keymap.setDefaultAction(new AbstractAction() {
    @Override public void actionPerformed(ActionEvent ae) {
      String cmd = ae.getActionCommand();
      if (!" ".equals(cmd)) {
        defaultAction.actionPerformed(ae);
      }
    }
  } );

UIによって独自のデフォルトアクションが
セットされるかもしれない(?)ので、
>>329 の案のほうがよいかと。


332:デフォルトの名無しさん
09/02/11 00:30:05
まずEDTといってもシステムキューの方かSwingEDTの方なのかはっきりしてもらわんとなぁ。
単にEDTと言ったらjavaの場合SwingEDTの方を指す場合が多いからややこしい。

333:デフォルトの名無しさん
09/02/11 01:47:13
>>332
システムキューって何ぞ?
用語が一般的過ぎて、ぐぐってもそれらしきものが引っかからん。
説明資料へのリンク希望。
AWTイベントキューとは違うもんなんだよね?

334:sage
09/02/11 10:31:21
>>331
Actionに委譲するのは良いんだけど、
>UIによって独自のデフォルトアクションがセットされるかもしれない
ということを考慮するなら、委譲するActionの参照を保存してたらダメでしょ。
UI変更時に、上記のコード自体が再実行されるなら、アリだけど。

335:デフォルトの名無しさん
09/02/11 17:23:09
>>333
同じ、AWTのEDTの事をAWT event queues systemと表記する場合とSystem Queueと表記する場合がある。
今はどうなってるが知らんが。


336:デフォルトの名無しさん
09/02/11 19:36:49
>>335
んー、そうすると、昔は知らんが、今はシステムキュー==AWTのEDT==SwingのEDTなんじゃ?
>>330に書いたように、Java1.3 以降は
javax.swing.SwingUtilities.isEventDispatchThread() == java.awt.EventQueue.isDispatchThread()
なんだし。

337:326
09/02/11 23:57:03
>>334
説明不足でしたが
updateUI() をオーバーライドして
super.updateUI() の後に処理を書いているので
たぶん大丈夫だと思います。


338:デフォルトの名無しさん
09/02/19 21:59:44
こういうタイポとかでdeprecatedなメソッドはさすがに廃止してもいんじゃなかろうか。
URLリンク(java.sun.com)()

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


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

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


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

343:デフォルトの名無しさん
09/02/23 09:18:34
JDKのライセンス違反になるからダメ。

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

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

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

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

346:デフォルトの名無しさん
09/02/24 19:42:27
>>345
ありがとう!
これから試してみる。

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

348:デフォルトの名無しさん
09/02/24 22:28:04
うふっ

349:
09/02/26 20:25:14
JLabelがクリックされたとき、JLabelではなく親のコンポーネントがクリックされたことにしたいのですが
どういしたらいいでしょうか。

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

351:デフォルトの名無しさん
09/02/26 22:34:16
俺なら親のaddMouseListenerをオーバーライドしたいな

352:デフォルトの名無しさん
09/02/26 22:48:15
俺俺なら親にディスパッチする

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



354:デフォルトの名無しさん
09/02/26 22:57:08
まぁ俺の方がディスパッチするけどね。

355:デフォルトの名無しさん
09/02/26 23:07:01
ディスパッチってどうやってするねん?

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

356:sage
09/02/26 23:17:41
>>355
java.awt.Component#dispatchEvent(AWTEvent)嫁。

357:349
09/02/27 00:35:17
getParent().dispatchEvent(event);が一番短くかけるみたいですね。

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

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


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

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

360:デフォルトの名無しさん
09/02/27 01:54:28
それいけるんだ
Iteratorのループで出来ないかと思ってた~

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

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

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

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

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

364:デフォルトの名無しさん
09/03/01 17:39:46
>>363
LANケーブルを抜いてクビをククルのが最速

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

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

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

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

368:デフォルトの名無しさん
09/03/01 20:00:47
つ jigloo

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

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

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

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

373:デフォルトの名無しさん
09/03/03 08:18:06
>>372
アンチエイリアスかければ?

374:デフォルトの名無しさん
09/03/03 23:11:33
>>370
余裕で俺、とウチの社内全員。

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

376:デフォルトの名無しさん
09/03/04 00:27:24
大技見つけたぜぃ。

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

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

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

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

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

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

377:デフォルトの名無しさん
09/03/04 01:39:21
URLリンク(space.geocities.jp)

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

378:デフォルトの名無しさん
09/03/04 01:53:06
なんだか麻布の臭いがする。。。

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

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

381:デフォルトの名無しさん
09/03/04 20:24:28
ネタ・・・じゃ・・・ないの・・・・か?

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

383:デフォルトの名無しさん
09/03/05 09:36:17
作れば良いんじゃないの

384:sage
09/03/06 00:33:36
以下のバグが1.4でも6.0でも再現するんだけど、JTextField#setTextはスレッドセーフじゃないの?
それとも検証方法自体が間違ってるの?
URLリンク(bugs.sun.com)

385:デフォルトの名無しさん
09/03/06 00:42:39
swing自体スレッドセーフじゃなかったと思う

386:デフォルトの名無しさん
09/03/06 00:44:55
1.4.2で直ってないって書いてあるし、放置されてるんじゃね?

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

388:デフォルトの名無しさん
09/03/06 00:50:16
>>385
↓スレッドセーフだと書いてあるんだが・・・
URLリンク(sdc.sun.co.jp)(java.lang.String)

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

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

390:389
09/03/06 01:15:33
ソースは Java 6 しかみてない。すまん

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

402:デフォルトの名無しさん
09/03/10 20:24:14
逆に何を懸念しているのかがわからない

403:デフォルトの名無しさん
09/03/14 13:39:14
Swingを勉強するのにお勧めの書籍とかある?

404:デフォルトの名無しさん
09/03/15 01:06:20
どのレベルか、どんな記述が読み易いか示さないと何とも。

405:デフォルトの名無しさん
09/03/15 01:15:03
>>404

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

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

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

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

406:デフォルトの名無しさん
09/03/15 02:16:03
swinglabs.orgがもう一週間近く死んでる。

407:デフォルトの名無しさん
09/03/15 06:07:53
頭いい人は本から入るのかね?

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

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

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

410:デフォルトの名無しさん
09/03/15 19:03:06
>>409
Swing本当に関係ないなww
Swingの本を薦めてくれ。

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

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

412:デフォルトの名無しさん
09/03/15 19:27:20
>>411
気持ちはありがたいが、既に本棚にあるのだww

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

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

414:デフォルトの名無しさん
09/03/16 00:31:16
本ではないが、URLリンク(java.sun.com)

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

416:デフォルトの名無しさん
09/03/16 02:46:43
そんなの見た事無いや。orz
解説頼む。

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

418:デフォルトの名無しさん
09/03/16 03:23:09
>>416
スレッドセーフじゃないんだってさ。

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

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

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

422:デフォルトの名無しさん
09/03/18 02:58:11
あ、すま
>>414で紹介されてるね。

423:デフォルトの名無しさん
09/03/18 03:06:57
英語を読むのは面倒くさい
いや読むけどさ(ブツブツ

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

425:デフォルトの名無しさん
09/03/18 20:45:24
>>424
ありがとう!やってみる。

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

427:デフォルトの名無しさん
09/03/19 01:06:24
>>426
???

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

429:デフォルトの名無しさん
09/03/19 08:22:29
できると思う

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

430:デフォルトの名無しさん
09/03/19 11:23:07
>>428
そういうことです.わかりにくい文ですみません.
>>492
ぐぐってみました.URLリンク(terai.xrea.jp)

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

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

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

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

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

433:430
09/03/20 00:09:49
>>432
なるほど HierarchyListener は思いつきませんでした。これなら動きそうですね。

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

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

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

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

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

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

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

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

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

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

440:デフォルトの名無しさん
09/03/21 19:57:58
えーと、よくSFとかでありますね
上から1行ずつアニメーションしてさらさらと出てくるような表や
項目を追加したらふわっと最終行が浮かんでくる
といったような描画をどうやってやるかということに悩んでいます
Timer自体はいくらでも使えるのですが

441:デフォルトの名無しさん
09/03/21 20:18:33
JTableはセルそれぞれがコンポーネントというわけではないので、あまりスマートにはできません。
上げられた二つの例に限ってですが、代替策として、glasspaneでだますというのはどうでしょう?
それがいやなのであれば、Timerかなにかでアニメーションさせてください。

442:デフォルトの名無しさん
09/03/21 22:18:49
>>440
JXLayer使えばいいと思うよ。

443:デフォルトの名無しさん
09/03/21 23:44:17
JTreeでツールチップ表示中にホイールスクロールするとやたら重いんだが

どうにか、普通にスクロールさせる方法はないかね

444:デフォルトの名無しさん
09/03/22 04:22:23
ツールチップが重い処理だからそんなもの。
無効にするしか。

445:デフォルトの名無しさん
09/03/22 13:51:40
>>443
ツールチップを常に重量コンポーネントとして表示すればよいと思う。

普通 JScrollPane でコンポーネントがスクロールされるときは、
現在表示されているビューポートの外観を少しずつずらしてコピーすることで、
高速なスクロールを実現している。
しかし、軽量コンポーネント(たとえばツールチップ)が
上のレイヤーに重なっているときは、
スクロールされるたびにビューポート全体を再描画しなくてはならないので遅くなる。

446:デフォルトの名無しさん
09/03/22 20:35:26
>>441
ありがとうございます
GlassPaneを調べてみますね。それ以外の場合、Timerでアニメーションするとよいとのことですが
アニメーションの内容はどのようなものを?
TableSellRendererやJTableなどをいくら拡張しても中々難しそうですね・・・

>>442
なかなかすごそうなコンポーネントです。これはどういうものでしょうか?

447:デフォルトの名無しさん
09/03/26 02:49:32
最近beansBindingを触って疑問に思ったのですが、
ColumnBindingに対してvalidatorを設定した場合、
バリデーションエラーが発生した行の取得はどのようにすればよいのでしょうか?

448:デフォルトの名無しさん
09/03/28 01:00:27
横方向に中央であればFlowLayoutでシンプルに実現できますが、縦方向に中央に配置したい場合の簡単な実現方法はありませんでしょうか?

449:デフォルトの名無しさん
09/03/28 07:03:52
>>448
Y_AXISなBoxLayoutで子コンポーネントそれぞれにsetAlignmentX()でCENTER_ALIGNMENTを設定するのは?
FlowLayoutと違って子コンポーネントの幅は推奨サイズでなく最大サイズに影響されるので、
推奨サイズにしたいなら子コンポーネントの種類次第では最大サイズを設定してやらないといけないけれど。

450:デフォルトの名無しさん
09/03/28 10:24:26
private static JLabel createLabel(String text){
 JLabel lb = new JLabel(text);
 lb.setAlignmentX(Component.CENTER_ALIGNMENT);
 lb.setMaximumSize(new Dimension(300,30));
 return lb;
}

public static void main(String[] args) {
 JPanel pn = new JPanel();
 pn.setLayout(new BoxLayout(pn,BoxLayout.Y_AXIS));
 pn.add(createLabel("hoge"));
 pn.add(createLabel("fuga"));
 //...
}

このようなコードで試してみましたが、やはりY方向には上に詰められてしまいます。
中央寄せしたいコンポーネントの上下をBox.createVerticalGlue()で詰めるというのはありでしょうか?

451:デフォルトの名無しさん
09/03/28 12:54:35
>>450
縦方向に中央揃えでコンポーネントを並べることと勘違いしてた。
Box b = Box.createVerticalBox();
b.add(Box.createVerticalGlue());
b.add(コンポーネント);
b.add(Box.createVerticalGlue());
みたいな感じでいけるんじゃないかな。
でももしかすると上下のグルーが同じ比率で伸びずに完全なセンタリングにならないかも。
その場合、どれくらいで簡単な実現方法とならないかが分からないけれど、
GridBagLayoutやGroupLayoutみたいな少し複雑なレイアウトマネージャを使うとか、
縦方向について中央配置するマネージャを自作するとか。

452:デフォルトの名無しさん
09/03/28 12:57:58
>>450 縦に中央ってこんな感じ?
JLabel label1 = new JLabel("Hello, World!!");
label1.setBorder(BorderFactory.createTitledBorder("label1"));
label1.setAlignmentX(JComponent.CENTER_ALIGNMENT);
JLabel label2 = new JLabel("Goodbye, world!!");
label2.setBorder(BorderFactory.createTitledBorder("label2"));
label2.setAlignmentX(JComponent.CENTER_ALIGNMENT);

JPanel inPanel = new JPanel();
inPanel.setLayout(new BoxLayout(inPanel,BoxLayout.Y_AXIS));
inPanel.add(label1);
inPanel.add(label2);
inPanel.setAlignmentY(JComponent.CENTER_ALIGNMENT);
inPanel.setBorder(BorderFactory.createTitledBorder("in"));

JPanel outPanel = new JPanel();
outPanel.setLayout(new BoxLayout(outPanel,BoxLayout.X_AXIS));
outPanel.add(inPanel);
outPanel.setBorder(BorderFactory.createTitledBorder("out"));

JFrame frame = new JFrame("VerticalCenterLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.add(BorderLayout.WEST, outPanel);
frame.add(BorderLayout.CENTER, outPanel);
frame.pack();
frame.setVisible(true);

453:デフォルトの名無しさん
09/03/29 13:32:37
初心者です。
javaでゲーム製作の本を買って、
コードがすべてAWTで書かれてるんですが、
swing用の本を買いなおしたほうがいいですか?

454:デフォルトの名無しさん
09/03/29 15:23:18
>>453
別にそんなことないだろ。
Swingの本なら、awtの知識は前提としているだろうし。

455:デフォルトの名無しさん
09/03/29 17:13:35
>>454
ありがとうございます。
今の本で勉強してみます。

456:デフォルトの名無しさん
09/03/29 23:39:38
>>453
時間の無駄をいとわないならその本でOK。
時間の無駄がいやなら買いなおすべし。

457:デフォルトの名無しさん
09/03/30 00:44:33
ゲームを作るつもりでその本を買ったなら Swing の本を
買い直す必要は全くないと思うが…
Swing の勉強をするつもりで買ったの?

458:デフォルトの名無しさん
09/03/30 04:25:34
あとでswingの本読んで、swing化してみるのは実力が付いていいと思うけどね。
基本は大事。

459:デフォルトの名無しさん
09/03/30 06:53:59
>>440
>>453
ゲームで、グラフィック表示ばっかりなら、Swingはあまり関係ないと思われる。
java.awt.Graphics2Dを使ってるから「コードがすべてAWT」というオチではないよな?

460:デフォルトの名無しさん
09/03/30 09:44:16
440関係なかった・・・

461:デフォルトの名無しさん
09/03/30 09:49:53
javaでゲームだと結局java2dだとか3d使うんだべ

462:デフォルトの名無しさん
09/03/30 11:50:26
そんなことないべ。
コマンドアドベンチャーとかなら、普通に既存コンポーネントだけで作れるべ。

463:デフォルトの名無しさん
09/03/30 17:57:11
>>461
シミュレーションだとJava2DとSwingでがっちり組むみたいよ。
最近ので、ちょっと期待してしまうDarkSideとか
URLリンク(www.darkside-game.net)

自分ではJava3Dを使いたいんだけど再配布がな・・・

464:デフォルトの名無しさん
09/03/30 22:06:37
>>463
Java Web Startにすると、そのあたりも自動でインストールしてくれるらしい

465:デフォルトの名無しさん
09/04/02 23:33:46
>>464
そんなうまい話があるわけない。
開発者の手間は変わらない。(JNLPの分面倒か)


466:デフォルトの名無しさん
09/04/03 04:05:32
>>465は技術者として終わっとるな。

467:デフォルトの名無しさん
09/04/03 04:11:55
Java Web StartでのJava3D配布は、このあたりで話題になってた
スレリンク(tech板:909-915番)

詳しくはここを
URLリンク(j3d-webstart.dev.java.net)

これが参考になるかもしれない。
URLリンク(ziddy.japan.zdnet.com)

468:465
09/04/03 07:15:22
>>466
"自動で"とか勘違いさせるような発言について書いたんだが

469:デフォルトの名無しさん
09/04/03 08:21:42
Java3Dサイトのデモでは自動でJava3Dがインストールされるように見えるが。

470:デフォルトの名無しさん
09/04/03 08:59:32
スタンドアロンでも普通に実行できるようにならんかね
ネットワークアクセスしてもいいから

471:デフォルトの名無しさん
09/04/03 09:41:54
jarファイルにすれば実行できるぞ

472:デフォルトの名無しさん
09/04/03 11:24:57
JFileChooser で、ファイルチューザーのダイアログを開いた時に表示されるディレクトリを
マイコンピュータにしたいんですが、どうしたらいいでしょうか?


473:デフォルトの名無しさん
09/04/04 16:14:59
任意のファイルを自動でインスコできたら、セキュリティ上問題が有るな。

474:デフォルトの名無しさん
09/04/04 18:51:59
だから認証が出るわけだな。いまさら何を。

475:デフォルトの名無しさん
09/04/05 04:49:56
マニフェストに記述した JAR 内の画像をアイコンにするくらいしてほしいね。
まぁ JWS でデスクトップに好きな画像のショートカットアイコン作れるけどさ。

476:デフォルトの名無しさん
09/04/05 12:17:50
テキストを編集できるフレームで特定の文字がある行だけ
編集不可能にするにはどうしたら良いでしょうか。
netBeansのエディタみたいにするには?

477:デフォルトの名無しさん
09/04/05 14:27:24
カーソル移動のイベントを受け取って、その位置の含まれる行を見て
setEditable() で切り替えるとか。

478:デフォルトの名無しさん
09/04/05 15:35:57
実際にやったことないから分からないけど
DocumentListener とか使うのでは


479:デフォルトの名無しさん
09/04/05 15:38:42
あるいは CaretListener を使って
キャレットが移動するたびに必要に応じて
setEditable(boolean) を呼ぶとか。
こっちのほうがいいかも。


480:デフォルトの名無しさん
09/04/07 14:41:24
>>477,478,479 さんありがとうございます。
試してみます。

481:デフォルトの名無しさん
09/04/14 19:46:23
スレが過疎ってるスキに、くだらないこと書かしてもらうが
FileSystemView fileSystemView = FileSystemView.getFileSystemView();
この冗長さは、どうにかならんのか?


482:デフォルトの名無しさん
09/04/14 19:49:55
IME にでも登録しとけよ。俺は Eclipse のオナペット使うけど。

483:デフォルトの名無しさん
09/04/14 20:03:54
>>481
嫌ならもう少し短い変数名使えば?

484:デフォルトの名無しさん
09/04/14 23:28:39
ラッパ書いてヲレフレームワークに突っ込めよ。

import ore;
ore = new ore.gFSV();
で出来るようになるぜ。

485:デフォルトの名無しさん
09/04/15 01:13:41
Nimbusのとかに比べると、まだまだだな。
InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState.java

486:デフォルトの名無しさん
09/04/15 17:57:46
単にクラス名が長いというだけじゃなくて、
おなじ行に3回も FileSystemView と書かなくてはならないのが問題というか。
せめて、こうするべきだったのでは。
FileSystemView fsv = FileSystemView.instance();

Toolkit.getDefaultToolkit() も同罪。


487:デフォルトの名無しさん
09/04/15 18:00:07
get付けてgetInstance()にしようぜ

488:デフォルトの名無しさん
09/04/16 00:47:23
その程度の工夫ではJavaの冗長さはびくともしないぜ
おとなしくIDEに補完させましょう

# 型推論があればもうちょっとなんとか…

489:デフォルトの名無しさん
09/04/16 09:07:28
しかしHashMapを格納するときにMapで宣言するJavaの文化が型推論の導入を阻むのだった

490:デフォルトの名無しさん
09/04/16 23:43:57
型推論って型の宣言必要ないんだが。


491:デフォルトの名無しさん
09/04/17 00:01:30
>>490
Javaっぽい書き方
Map<String, String> map = new HashMap<String, String>();

いわゆる型推論
final map = new HashMap<String, String>();
↑HashMap<String, String>と補完される。

結局上みたいなやつじゃなくてコンストラクタの型引数が省略可能になるだけになったらしいが。

492:デフォルトの名無しさん
09/04/17 00:08:21
ゲネリックス を始めて触った時に typedef が欲しくなったのは俺だけではあるまい。

493:デフォルトの名無しさん
09/04/17 00:15:51
型推論っていえるのか・・・。

494:デフォルトの名無しさん
09/04/17 06:35:02
言語仕様談義はGUIと関係ないずら

495:デフォルトの名無しさん
09/04/18 00:34:16
JEditorPaneにsetTextで500KBくらいのHTMLを読ませると、表示にもの凄く時間がかかるんだが何かいい方法は無いですかい

496:デフォルトの名無しさん
09/04/18 01:09:10
Swing を捨て SWT の Browser クラスを使う。

497:デフォルトの名無しさん
09/04/18 01:45:50
>>496
SWTって本を見かけないから全く触れたことないなあ。
軽いのならちょっと調べてみる、㌧

498:デフォルトの名無しさん
09/04/18 01:57:11
500kだとブラウザでも遅いと思うんだがSwingはさらにシングルスレッドだからね。

499:デフォルトの名無しさん
09/04/18 05:55:19
>>498
シングルスレッドってw

500:デフォルトの名無しさん
09/04/18 11:28:27
イベントディスパッチスレッドがひとつしかないことを言ってるのでは

501:デフォルトの名無しさん
09/04/18 11:31:55
>>498
現存するGUIツールキットでスレッドセーフなものは無いぞ。

502:デフォルトの名無しさん
09/04/18 17:33:32
というか、JWebPaneは今どうなってんの?

503:デフォルトの名無しさん
09/04/18 18:49:46
誰か、というかの前を補完してくれ~

504:デフォルトの名無しさん
09/04/18 20:50:07
>> 497
軽いけれど役立たずだよ。


505:デフォルトの名無しさん
09/04/19 07:12:42
Java でカスタムブラウザみたいなものを作ろうと思ったら SWT 一択だろ。
それ以外は特にいらないけど。

506:デフォルトの名無しさん
09/04/19 11:10:11
カスタムブラウザ自体がアレ。
自前でパースして適当に配置したほうが(ry

507:デフォルトの名無しさん
09/04/19 11:23:39
Google Map とか自前でパースして動かすんかい。エラい再発明家だな。

508:495
09/04/19 15:11:00
SWT調べてみたけどSwingと連携させるのはなかなか厄介そうだね。
Swingでやるとして、500KBのHTMLを一気にでは無く少しずつ表示させることは出来ないだろうか。
スレッドを使ってやってみたら、HTMLの先頭部分は表示できたんだけどスクロールができない、助けて

509:デフォルトの名無しさん
09/04/19 15:39:35
operaはHTML自体はメモリに読んどいて表示はウィンドウに見えてる部分だけ描画する。
メモリ減らしたいならそんな感じだがスクロール早くしたいなら
スクロール時の描画アルゴリズムを考えるとかじゃなかろうか。

510:デフォルトの名無しさん
09/04/20 05:26:43
Swing の全コンポーネントをヘビーウェイトにするとか、そういうオプションないんだっけ?
EDT 処理やコンポーネントは相互変換できるから、あとそれができれば SWT との混在も
不可能じゃなさそうな気がするけど。

511:デフォルトの名無しさん
09/04/20 06:58:54
ポップアップメニューくらいなら重量にできるけど

512:デフォルトの名無しさん
09/04/20 08:59:15
ヘビーとライトが混ざると変に重くなるとか

さっさと俺アプリを修正しよう

513:デフォルトの名無しさん
09/04/20 15:07:48
長いので、何回かに分けて質問します。
次のプログラムを実行して、サブフレーム表示ボタンを押すと描画領域を含むサブフレームが表示されるのですが、
サブフレームのクローズボタンを押して閉じてから再度サブフレーム表示ボタンを押すと、サブフレーム表示の瞬間に
ちらつきが起こります。一瞬白い部分が見えてから黒く塗りつぶされるのが目につくのです。JFrameのコンテントペインは
isDoubleBuffered() がtrueになるので、自動的にダブルバッファリングしてくれるはずと私は理解しているのですが、
なぜかちらつきが起こります。ちなみにactionPerformedメソッドをコメントアウトしてある方に置き換えるとちらつきが
起きないようです。しかし、この回避策はスマートとは言えませんし、なぜこれでうまくいくのかも不明です。
適切な解決策をご存知の方、ご教授ください。私の環境はMac OS X 10.4.11 J2SE 5.0です。

514:デフォルトの名無しさん
09/04/20 15:11:27
513続き

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JFrameTest extends JFrame{
JFrame subFrame;
DrawArea drawArea;//subFrameに貼り付ける描画領域
JButton button;//subFrame表示ボタン
public static void main(String[] args){
JFrameTest f=new JFrameTest();
f.setVisible(true);
}
public JFrameTest(){
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
button=new JButton("サブフレーム表示");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(subFrame==null){
subFrame=new JFrame();
DrawArea drawArea=new DrawArea();
subFrame.add(drawArea,BorderLayout.CENTER);
}
subFrame.setBounds(210,0,500,400);
subFrame.setVisible(true);
}

515:デフォルトの名無しさん
09/04/20 15:13:16
513続き

/*
public void actionPerformed(ActionEvent e){
if(drawArea==null){
drawArea=new DrawArea();
}
if(subFrame!=null){
subFrame.dispose();
}
subFrame=new JFrame();
subFrame.add(drawArea,BorderLayout.CENTER);
subFrame.setBounds(210,0,500,400);
subFrame.setVisible(true);
}
*/
});
getContentPane().add(button, BorderLayout.CENTER);
setSize(200,100);
}
class DrawArea extends JComponent{
public void paintComponent(Graphics g) {
g.fillRect(0,0,getWidth(),getHeight());
}
}
}

516:デフォルトの名無しさん
09/04/20 15:14:33
513
以上です。

517:デフォルトの名無しさん
09/04/20 18:30:14
>>513
手元の環境(OS X 10.5.6 Java 1.6.0_07) だとどちらの
コードでも初回表示の時からちらつく.

>DrawArea drawArea=new DrawArea();
>System.out.println("drawArea.doubleBuffered : " + drawArea.isDoubleBuffered());
としたときどうなるか?

518:513
09/04/20 23:49:50
>>517

もちろんfalseと表示されますね。JComponentのdoubleBufferedはデフォルトでfalseですから。

URLリンク(wisdom.sakura.ne.jp)

を参考に

public void actionPerformed(ActionEvent e){
if(subFrame==null){
subFrame=new JFrame();
subFrame.getRootPane().setDoubleBuffered(true);
((JComponent)subFrame.getContentPane()).setDoubleBuffered(true);
DrawArea drawArea=new DrawArea();
subFrame.add(drawArea,BorderLayout.CENTER);
}
subFrame.setBounds(210,0,500,400);
subFrame.setVisible(true);
}

と変えてみましたが、結果は同じでした。
これってどうしようも無いんですかねえ。実はJFrameだけでなく、JDialogでも同様のことが起こるわけですが、
みなさんこの辺のことは不満を感じないのでしょうか。まあ実用上問題はないのだけれど、見た目も大事だと思うんですよ。

519:デフォルトの名無しさん
09/04/21 00:55:01
JListはsetVisibleRowCountで縦の長さを指定できますが、
横幅を指定するのはどうやるのでしょうか?
DefaultListModelで3文字ぐらいをaddしても横幅は8文字分とかにしたいです。

520:デフォルトの名無しさん
09/04/21 01:59:41
519ですが調べてみたら何とか解決しそうです。

521:デフォルトの名無しさん
09/04/21 02:30:23
マカウザイ。マクのはサン純正じゃないからアポーに問い合わせろ。

522:デフォルトの名無しさん
09/04/21 05:20:38
N+あたりの一部のキチガイのせいで Mac と聞いただけで過剰反応する奴が増えたなぁ。
コンピュータ関係だと使いやすい Unix 端末として使ってる人も多そうなのに。

523:デフォルトの名無しさん
09/04/21 08:13:22
先入観だけど、多く…ないと思う、多いの?

Macは昔から嫌いだが、MacのJavaは動作が違うのか妙に嫌われてるな

524:デフォルトの名無しさん
09/04/21 08:43:10
今日JJUGのイベントにいくんだけど、「複数のGUIウィンドウプログラムが動くシングルウィンドウシステムとその応用」
を発表する会社のページ見るとかなりトンデモな発表になりそうで今から楽しみだぜ、
URLリンク(www.sys-audit.com)

525:デフォルトの名無しさん
09/04/21 08:53:44
>>524
そこ読んだ限りでは単なる C/S システムライクなアプレット実装だな。
つうかページ一番下

> 探偵を使って当研究所関係者を執拗に尾行する企業があります。社員として採用してただ
> 同然で技術を入手しようとお考の上でのことでしょうが、暴力行為であり甚だしい
> 人権侵害ですのでお止めください。不正競争防止法に触れる可能性もあります。

妄想ワロタw

526:デフォルトの名無しさん
09/04/21 10:48:11
>>524
つっこみどころ多すぎてワロタw

>ウィンドウの大きさを少し変化させてウィンドウの重なり具合を変化させることにより、
>ウィンドウマネージャに描画指示を出させます
コンポーネント入れ変えたら JComponent#revalidate() 呼べば?とか
そもそも CardLayout 使えばいいんじゃね?とか…

527:デフォルトの名無しさん
09/04/21 18:27:38
>ウィンドウの大きさを少し変化させてこれダーティーとみなされずにリペイントマネージャに無視られるんじゃなかろうか?
revalidate呼べよ。

528:デフォルトの名無しさん
09/04/22 01:24:03
>>524
言ったなら感想書いてくれよ
URLリンク(www.sys-audit.com)
とか見るとこの会社(というかこのおっさん)すごすぎるぞww

529:デフォルトの名無しさん
09/04/22 04:28:42
ユニックス端末ならリナックスでいいだろ。
xterm始めまともなターミナルいくらでもあるし。
わざわざマク使う様な香具師は皆無。マクって、あんまりオープンな環境じゃないしな。ソース見たい時に詰まる事は多い。

530:デフォルトの名無しさん
09/04/22 07:47:58
XP は飽きた。Vista もなんだかなぁ。
Unix 系のターミナルやコマンド、gcc が付いてて Photoshop, Illustrator も動く。
名前を聞いて一般人が引かない。家族も使うしそこらの PC 屋で吊るしで買ってこれる。

そんな理由で MacBook 使っている。カーネルのソース必須な人は Linux 使えば
良いと思うけど、Unix のシェル積んでて主要なプロプライエタリソフトも使えるんで
便利だよ。仕事場で 5 人ほど自宅 PC を Mac に乗り換えてる。
スレチなんでこれ以上はやめとくが。

531:デフォルトの名無しさん
09/04/22 08:41:24
windowsじゃないと出来ないことってあるよね。
飽きたとか言う以前にwindows(PC)使ってる人は、わざわざ高いMACなんか使わずそれぞれ目的があるんからPCにしてるんだと思うよ。
macだとquicktimeとobjcが標準なのが魅力だけどそれだけかもね。

windows media はどうしてるの?
ほかにwinだとゲーム(GPUプログラム)とか。

532:デフォルトの名無しさん
09/04/22 10:48:48
>>531
QuickTimeよりは、DirectShowの方がスジが良いんじゃないかと思う。
といってもQuickTimeのAPIとかぜんぜん知らないんで、想像だけど。
DirectShowを使ったアプリ、コーデックはたくさんあるのに、
QuickTimeを使ったアプリってあまり見ない
のを考慮すると、使いづらいんじゃないかと思う。
個人的にはQuickTimeアプリってiTunesしか知らない。
コーデックはDivXとFlip4macとPerianぐらい?Flip4macはでかいwmv動画再生しようとすると、
「インポートしています」というダイアログで長々と待たされるのでイライラする。

533:デフォルトの名無しさん
09/04/23 00:07:25
マカは盲目だしなあ。もうそんな時代じゃないのに。

534:デフォルトの名無しさん
09/04/23 00:18:27
俺たちのサンが消滅しちゃったって言うのに、どんな時代だって?

535:デフォルトの名無しさん
09/04/23 01:26:24
個人的にはNetBeansとOpenOfficeの行く末が心配です。

536:デフォルトの名無しさん
09/04/23 10:37:08
自分の好きなの使えばよろし、
俺は市販のゲームだとかネトゲだとか、
自分の好きなフリーソフトがあるから、
それだけの理由でずっとメインストリーム使ってる。

537:デフォルトの名無しさん
09/04/25 03:37:23
ooは金にならないから厳しいだろうなあ。

538:デフォルトの名無しさん
09/04/25 05:03:45
Solaris売るには必要だけどね。
あとMSの売り上げ減らすことで、相対的な売り上げがあがる。

539:デフォルトの名無しさん
09/04/25 16:22:35
oo有るからってsolaris売れる訳でもないし。
msの客とは重なってないと思うよ。あっちは出来る本とかの充実やみんな使ってる安心感が大事。

540:443
09/04/26 11:24:07
>>445で教えて貰った方法を試したところ、
ツールチップを出したままホイール回してもスクロールしなくなりました。
さらに、ツールチップをクリックしてもツールチップ消えません。

なんいこったいでした。


そんなわけで、ホイール回したら問答無用でツールチップを消したいのでちょっと試してきます。

541:443
09/04/26 12:23:22
JScrollPane spdf = new JScrollPane(hogeFrame);
spdf.addMouseWheelListener(new MouseWheelListener() {
 @Override
 public void mouseWheelMoved(MouseWheelEvent e) {
  // ホイールを回したらツールチップを消す
  ToolTipManager.sharedInstance().mousePressed(null);
 }
});

こんな酷いコードになりましたが、
どうにかマウスホイール回したらツールチップが消えるようになり
スクロールもスムーズに感じます。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch