- 1 名前:デフォルトの名無しさん [2008/11/21(金) 11:24:21 ]
- ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。 そんなSwingと引き続き付き合っていくみんなのスレッドです。 Java低速GUI Swing 7 pc11.2ch.net/test/read.cgi/tech/1204155623/ Java低速GUI Swing 6 pc11.2ch.net/test/read.cgi/tech/1190807478/ Java低速GUI Swing 5 pc11.2ch.net/test/read.cgi/tech/1161139809/ Java低速GUI Swing 4 pc8.2ch.net/test/read.cgi/tech/1140533866/ Java低速GUI Swing 3 pc8.2ch.net/test/read.cgi/tech/1121700954/ Java低速GUI Swing 2 pc8.2ch.net/test/read.cgi/tech/1095398949/ Java低速GUI Swing pc5.2ch.net/test/read.cgi/tech/1062271447/l50
- 335 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 17:23:09 ]
- >>333
同じ、AWTのEDTの事をAWT event queues systemと表記する場合とSystem Queueと表記する場合がある。 今はどうなってるが知らんが。
- 336 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:36:49 ]
- >>335
んー、そうすると、昔は知らんが、今はシステムキュー==AWTのEDT==SwingのEDTなんじゃ? >>330に書いたように、Java1.3 以降は javax.swing.SwingUtilities.isEventDispatchThread() == java.awt.EventQueue.isDispatchThread() なんだし。
- 337 名前:326 mailto:sage [2009/02/11(水) 23:57:03 ]
- >>334
説明不足でしたが updateUI() をオーバーライドして super.updateUI() の後に処理を書いているので たぶん大丈夫だと思います。
- 338 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 21:59:44 ]
- こういうタイポとかでdeprecatedなメソッドはさすがに廃止してもいんじゃなかろうか。
java.sun.com/javase/ja/6/docs/ja/api/java/awt/FontMetrics.html#getMaxDecent()
- 339 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:48:12 ]
- 廃止したら、古いアプリケーションが動かなくなるからな。
ところで Cloneable はスペルミスなのに Closeable は間違いじゃないんだな。 ややこしい。
- 340 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 13:56:33 ]
- 互換用のjarを用意して、コンパイル時にはエラーにしてしまえばいいのに。
- 341 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 18:53:19 ]
- コンパイルエラーにする代わりに警告を出してるんでしょ。
問題ないと思うけど。
- 342 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 15:16:20 ]
- >>340
互換用のjar吐くフリーソフトとか作ったら需要あるかな。 メソッドシグネチャだけコピーして、どれを呼んでもErrorなげる実装とかいうやつ。
- 343 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:18:34 ]
- JDKのライセンス違反になるからダメ。
java.*、javax.*、sun.*以下のクラスは変えちゃいかんのよ。 勝手にクラス追加するのも禁止されてる。
- 344 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 17:34:57 ]
- JEditorPaneで単純にHTMLを表示する場合なんだけど、
<a href="#hoge">Hoge</a> . . . . . . <a name="hoge">ここにくる</a> とやって、ページ内でジャンプさせることってできないんだっけか?
- 345 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:54:43 ]
- >>344
クリック監視はHyperlinkListenerで。 そこからJEditorPane#scrollToReference("#hoge")でなんとかなんないかな。
- 346 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 19:42:27 ]
- >>345
ありがとう! これから試してみる。
- 347 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:07:18 ]
- >>345
ありがーと! うまくいった。 JEditorPane#scrollToReference("hoge") で、#はいらないようです。
- 348 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:28:04 ]
- うふっ
- 349 名前: mailto:sage [2009/02/26(木) 20:25:14 ]
- JLabelがクリックされたとき、JLabelではなく親のコンポーネントがクリックされたことにしたいのですが
どういしたらいいでしょうか。
- 350 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 20:39:23 ]
- >>349
あほらしい方法だけど public void mouseClicked(MouseEvent e) { JComponent c = (JComponent)e.getSource(); for(MouseListener l :c.getParent().getMouseListeners()){ l.mouseClicked(e); } }
- 351 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:34:16 ]
- 俺なら親のaddMouseListenerをオーバーライドしたいな
- 352 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:48:15 ]
- 俺俺なら親にディスパッチする
- 353 名前:sage [2009/02/26(木) 22:54:12 ]
- 俺俺俺も親にディスパッチするな。
350 みたいに実装するなら、MouseEventを変換してやらないと。
- 354 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:57:08 ]
- まぁ俺の方がディスパッチするけどね。
- 355 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:07:01 ]
- ディスパッチってどうやってするねん?
俺も>>350みたいにリスナーぶち込みで対処したことがある
- 356 名前:sage [2009/02/26(木) 23:17:41 ]
- >>355
java.awt.Component#dispatchEvent(AWTEvent)嫁。
- 357 名前:349 mailto:sage [2009/02/27(金) 00:35:17 ]
- getParent().dispatchEvent(event);が一番短くかけるみたいですね。
>>350から355のみなさん、どうもありがとうございました。
- 358 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:09:26 ]
- 普通に JLabel の親に対して
addMouseListener(MouseEvent) を呼べば >>349 に書かれてるような挙動になるけど。
- 359 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:40:53 ]
- c.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) { c.removeKeyListener(this); } }); どさくさにまぎれて、一度だけ実行されるリスナーの小技。(流れ上、マウスリスナでないのは手抜き) めったに使う機会がないと思うけど。。
- 360 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:54:28 ]
- それいけるんだ
Iteratorのループで出来ないかと思ってた〜
- 361 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:05:56 ]
- JComponent.setFont(new Font("メイリオ", Font.BOLD, 42))
とすると一回目だけすごく遅いんですが、フォントの読み込みは 何かテクニックがあるんでしょうか?
- 362 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:07:54 ]
- アプリケーション起動時にあらかじめ読み込んでおくくらいしかないよ
いずれにせよロード時間はかかる
- 363 名前:デフォルトの名無しさん [2009/03/01(日) 17:17:19 ]
- Java SE Development Kit (JDK) 6 Update 11
Eclipse3.4.1 WindowsXP SP3 上記の環境があり、そこでGUIアプリをJavaで作成しようと思っています。 Swing(?)ってのをElipseのメニューから探したのですが、見当たりません。 JavaSEをアンインストールして、JavaEEをインストールするのが妥当な選択なのでしょうか? それともplug-inがまた別にあるのでしょうか?
- 364 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:39:46 ]
- >>363
LANケーブルを抜いてクビをククルのが最速
- 365 名前:デフォルトの名無しさん [2009/03/01(日) 17:49:20 ]
- >>364
最速か否かは聞かれてないだろww
- 366 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:54:37 ]
- exlipseの標準環境だと、swingアプリはメモ帳でhtml手打ちするようなのりで、
自分でソースコード書いて全部作ることになるっす。 net beansとかいうの使うと、VBみたいなポトペタを標準でできるらしい eclipseもプラグイン導入するとポトペタできるらしい が、swingでポトペタやったことないんでわかりません。
- 367 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:23:02 ]
- >>366
Swingやるなら現状ではNetBeans一択らしい。 EclipseプラグインのVE(VisualEditor)は使いもんにならんそうな。 俺はEclipseで手打ちしてるけどナー。 # EcilpseからSwingアプリを起動すると、フォント構成ファイルが無視されて、 # 日本語じゃないフォントで日本語がレンダリングされるという問題も……。 # おかしいなー、フォント構成ファイルの読み込み自体は正常に行われてるんだが。
- 368 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:00:47 ]
- つ jigloo
- 369 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:02:05 ]
- じぐるーも重いしすごくグループレイアウトが使いにくいしだめだよなぁ
- 370 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:51:25 ]
- NetBeansでGUI作って、Eclipseに持ち込んでる俺。
他にもいるでしょ、こんな人。
- 371 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:11:34 ]
- >>367
VEは使ってみて、脱力した。 正直、自分の脳内でレイアウト組んだほうがマシ。 最近は更新もされてないんじゃなかったっけ?
- 372 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:20:54 ]
- swingの印刷機能って、コンポーネント上の文字がカクカクになって印刷されるんだけど、
これって普通なの?
- 373 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 08:18:06 ]
- >>372
アンチエイリアスかければ?
- 374 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:11:33 ]
- >>370
余裕で俺、とウチの社内全員。
- 375 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:14:31 ]
- >>370
NetBeansでそのままつくらずに、Eclipseに持ち込む理由はなんですか
- 376 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:27:24 ]
- 大技見つけたぜぃ。
Javaで比較的簡単にホットデプロイする方法。 まず、デプロイしたいクラスのベースとなるHogeを作っておきます。 そして、それを継承したHoge00というクラスを作ります。 ただし、このクラスのファイル名はHogeXX.javaという風にします。 コンパイルできなければ対策を考えますが、クラスをpublicにしなければ通るようです。 そして、修正してデプロイするときには、Hoge00をHoge01という風にクラスの名前も変えます。 ファイル名はそのままです。 クラス名を変えるとコンストラクタ名まで変えないといけません。この時の小技として コンストラクタの処理を全て関数にしてHoge00クラスにはコンストラクタを記述しないようにします。 その為、Hogeクラスには空のデフォルトコンストラクタを用意しておきます。 あとは、コンパイルしてシステムのクラスローダを使ってHoge01クラスを読み込んで Hogeにキャストして使用できます。Hogeにはインターフェースとなる関数を用意しておきます。 従来の方法だと別のクラスローダを使ったりするので、同じクラスを違うクラスであるとしてしまう為 キャストしたり出来ません。なので、リフレクションなどを使ってアクセスする事になります。 これがどうもうまくないと思ったので、別の方法を考えたら思いつきました。 今からサンプルを作ります。
- 377 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:39:21 ]
- space.geocities.jp/solver9999/
ホームページに置きました。 なぜか、antから起動しないとToolProvider.getSystemJavaCompiler()がnullになってしまうので antを使ってください。この辺を調べてみます。でゎ、おやすみ。
- 378 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:53:06 ]
- なんだか麻布の臭いがする。。。
- 379 名前:デフォルトの名無しさん [2009/03/04(水) 10:33:20 ]
- GUIはまったく初心者だったけど「Javaアプリケーション作成講座」という本を読んで
だんだんわかるようになってきた とりあえず簡単なテキストエディタやブラウザは作れるようになった
- 380 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:28:11 ]
- javax.tools.ToolProvider.getSystemJavaCompiler()がnullを返すのは
JAVA_HOME\lib\tools.jarにクラスパスが通ってない事が原因でした。
- 381 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 20:24:28 ]
- ネタ・・・じゃ・・・ないの・・・・か?
- 382 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:06:57 ]
- Swingに印刷プレビューダイアログってありますか?
- 383 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 09:36:17 ]
- 作れば良いんじゃないの
- 384 名前:sage [2009/03/06(金) 00:33:36 ]
- 以下のバグが1.4でも6.0でも再現するんだけど、JTextField#setTextはスレッドセーフじゃないの?
それとも検証方法自体が間違ってるの? bugs.sun.com/bugdatabase/view_bug.do?bug_id=4765353
- 385 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:42:39 ]
- swing自体スレッドセーフじゃなかったと思う
- 386 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:44:55 ]
- 1.4.2で直ってないって書いてあるし、放置されてるんじゃね?
- 387 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:46:00 ]
- この再現コードみたいなことをすること自体基本的にないからなぁ
- 388 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:50:16 ]
- >>385
↓スレッドセーフだと書いてあるんだが・・・ sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/text/JTextComponent.html#setText(java.lang.String)
- 389 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:13:56 ]
- ざっとソースをみたところ、スレッドセーフじゃないね。
テキストのモデルであるDocumentへの書き込みがアトミックであったとしても、 UIスレッドを用いてコンポーネントから何らかの値をとってくるメソッドで Documentのインスタンスを2回以上使うような操作をする全てのメソッドは その間はDocumentへの書き込みを排他していないといけないはずなのだが、 少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。
- 390 名前:389 mailto:sage [2009/03/06(金) 01:15:33 ]
- ソースは Java 6 しかみてない。すまん
- 391 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:18:31 ]
- setTextする処理をEDTに投げればいいんじゃないの?的外れだったらごめん。
- 392 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:43:30 ]
- >>389
>.少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。 setTextの話だったんだけど、typo?
- 393 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:53:44 ]
- >>392
getTextが変な値を返す原因がsetTextをUIスレッド以外でアクセスしたことにあるなら、 setTextはスレッドセーフだといえる?
- 394 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 07:33:43 ]
- >>393
setTextの時点で変な値にならないのであれば、setTextはスレッドセーフじゃないの? (よくわかってないかもしれん・・・) そもそも>>384の再現コードは、getTextした値が""や"12"や"21"になることがあり、 以下のように思ってるんだが、違うかな? ""は、setTextが値を一度クリアしたタイミングで、getTextしているから。(getTextがスレッドセーフではないから) "12"や"21"はsetTextがロックする前にAbstractDocument#getLengthを呼び出していることが原因。 (setTextもスレッドセーフではない?)
- 395 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 13:04:40 ]
- JavaDoc を見る限り getText() はスレッドセーフじゃないんだな…知らなかった…
別スレッドからsetText()して結果的に画面に"12"や"21"や""が描画される ことがないのであれば setText() はスレッドセーフといえる…のかな? でも現状は >>394 のいうようにsetText()もスレッドセーフじゃないように見えるなぁ
- 396 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 17:43:09 ]
- setText()のスレッドセーフを確認するのに、スレッドセーフではないgetText()が絡んでくるとややこしくなるので
setText()するたびに文字列を溜めておいて、最後に検証するというのはどうだろう。
- 397 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:28:23 ]
- AbstractDocument.readLockを使えば、少しはましになるけど、ダメだった。
たまに、"12"と"21"が出てくる。
- 398 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:27:20 ]
- swingコンポーネントをディープコピーしようとしたら、
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.io.NotSerializableException: com.sun.java.swing.plaf.windows.XPStyle$Skin っていわれるんだけど、どうすりゃいいの?
- 399 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:12:39 ]
- Beans Bindingはもう見捨てられたのかと思ってたけど、先月スペックリードが変わってるね。
これは期待してもいいんだろうか。
- 400 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:08:00 ]
- スペックリードとは仕様定めるリーダーみたいなものでしょうか?
- 401 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 10:41:55 ]
- 複数のクラスで共用するダイアログなどで、わざわざそれぞれのフィールドとして持たせたくない場合は、UIUtilitiesなどを作ってそこでshow***といった感じで定義しても問題ないでしょうか
- 402 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 20:24:14 ]
- 逆に何を懸念しているのかがわからない
- 403 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 13:39:14 ]
- Swingを勉強するのにお勧めの書籍とかある?
- 404 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:06:20 ]
- どのレベルか、どんな記述が読み易いか示さないと何とも。
- 405 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:15:03 ]
- >>404
Javaの勉強を始めたばかりで、プログラミング言語Java第四版を読み終わったところ。 まあまあ読みやすかった。訳も気にならなかった。 Head Firest Java 第二版を読んでる最中で、 面白いと思うけど、実用性には欠けると思っている。 ざっと機能を概観する入門書と、詳しい内容の2冊進めてもらえるとうれしい。 こんなところでどうでしょう。
- 406 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:16:03 ]
- swinglabs.orgがもう一週間近く死んでる。
- 407 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 06:07:53 ]
- 頭いい人は本から入るのかね?
わしは本読んでると眠くなるんで、いきなりソースコードと戦う派なんだが
- 408 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:29:02 ]
- 武闘派か。端から見てるとPCに向かって何か遣ってる引きこもりにしか見えないが。
- 409 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:39:15 ]
- >>405
詳しい内容ではないが実践的な内容ならEffective Java。 Swing関係ないけど。一通りJavaで組めるようになって開発規模が 大きくなってきた頃に手に取ると大変有用な本だと思う。
- 410 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:03:06 ]
- >>409
Swing本当に関係ないなww Swingの本を薦めてくれ。
- 411 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:23:35 ]
- >>410
申し訳ない。ただJava勉強中のようだったのでつい。 確かにSwing関係ないけど間違いなく勉強になる良い本だよ。 「良いクセ」を学べる本なので、中級へのステップアップ時には 是非読んだ方が良いですよ。 Swing本については、他の人よろしく〜
- 412 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:27:20 ]
- >>411
気持ちはありがたいが、既に本棚にあるのだww
- 413 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:29:06 ]
- JavaはJava教室で買わされた本しかもってない、
Swingはグーグル先生に聞いてなんとかした、 読んでないからいい本なんて分からないんだぜ Effective Javaは良さそうだな、読んでみようか
- 414 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:31:16 ]
- 本ではないが、java.sun.com/docs/books/tutorial/uiswing/
- 415 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:57:22 ]
- >>413
ちゃんと本を読まなかったので、 javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); の必要性を知らなかった。 人が書いたコードを見ても、余計なことをしてると思っていた。
- 416 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 02:46:43 ]
- そんなの見た事無いや。orz
解説頼む。
- 417 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 03:12:48 ]
- >>416
Swingは、スレッドセーフじゃないから、初期化もイベントディスパッチスレッドで実行しないといけない。 invokeLaterを使うと後でイベントディスパッチスレッドで実行される。
- 418 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 03:23:09 ]
- >>416
スレッドセーフじゃないんだってさ。
- 419 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 10:10:35 ]
- 本ならSwing Hackが実用的かも。
Swingの入門書の次くらいに読むといい本。
- 420 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 23:55:45 ]
- >>419
本屋でSwing Hackをみてきました。見た感じTIPS集みたいですね。 よさそうな入門書だと「Java GUIプログラミング」のVol.1, Vol2なのですが、 ちょっと本気すぎる感じです。以外にSwingの本って売ってないですね。
- 421 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 02:54:08 ]
- >>420
本を買う前に最初はsunのjavaサイトにあるswing関連のチュートリアルで十分じゃないか? APIリファレンスのswingコンポーネントクラスの説明文の多くにリンクがあったりする。
- 422 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 02:58:11 ]
- あ、すま
>>414で紹介されてるね。
- 423 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 03:06:57 ]
- 英語を読むのは面倒くさい
いや読むけどさ(ブツブツ
- 424 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 04:21:31 ]
- >>420
入門書ってどれもほとんど大差ないから。 「Java GUIプログラミング」が本気すぎるとなると習う前に慣れたほうが良いかも。 となるとSwingチュートリアルのソースがベストかな。 英文を隅々まで読まなくても、ソース読んで、実行してみればだいたいわかってくる。
- 425 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 20:45:24 ]
- >>424
ありがとう!やってみる。
- 426 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:52:15 ]
- JOptionPane#showXXXDialog()で適当なコンポーネントをつめたJPanelを
表示した際にダイアログのボタンじゃなくてJPanel内の特定のコンポーネントの 方にフォーカスがあたるようにすることってできる?
- 427 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:06:24 ]
- >>426
???
- 428 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:47:02 ]
- >>427
JOptionPaneをカスタマイズしてJPanelを埋め込んだ場合に、ダイアログのOK/Cancelボタンではなくて追加したJPanel内のコンポーネントに入力フォーカスを当てたい、ということだと思われる。
- 429 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 08:22:29 ]
- できると思う
swing フォーカスでぐぐりゃ解決しそう
- 430 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:23:07 ]
- >>428
そういうことです.わかりにくい文ですみません. >>492 ぐぐってみました.ttp://terai.xrea.jp/Swing/DefaultFocus.html JOptionPane#showXXXDialog()系だとJDialogやJFrameがとれないから FocusTraversalPolicyをセットしたりWindowLister#windowOpend()や ComponentListner#componentShown()でrequestFocus()呼べないよなー とか思ってました. んで上のページの EventQueue#invokeLater() 方式を試してみましたが 手元の環境ではJOptionPaneの場合フォーカスはOKボタンの方になってしまいました…
- 431 名前:430 mailto:sage [2009/03/19(木) 11:39:29 ]
- 試したコードはこんな感じです
public static void createAndShow(){ final JTextField textField = new JTextField("Hello"); EventQueue.invokeLater(new Runnable(){ public void run() { textField.requestFocusInWindow(); } }); int result = JOptionPane.showConfirmDialog( null, textField, "Input Text", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); }
- 432 名前:デフォルトの名無しさん [2009/03/19(木) 12:09:21 ]
- >>431
実際にフォーカスを取得するまで、 requestFocusInWindow() を何度も呼んでみるとか。 ちょっと力技かもしれないけど HierarchyListener を使えば JOptionPane.showXxxDialog() で作られるダイアログを取得できる。 そのダイアログに対して WindowListener か ComponentListener を使えばよい。 「コンポーネントが画面に表示されたときに特定の処理を行う」 って、意外と難しいよね? JSplitPane が表示されたときディバイダを中央に移動させる方法を 見つけるのに、すごく苦労したことがある。
- 433 名前:430 mailto:sage [2009/03/20(金) 00:09:49 ]
- >>432
なるほど HierarchyListener は思いつきませんでした。これなら動きそうですね。 >>431 のコードはEventQueue#invokeLater()じゃなくて javax.swing.Timer で 1秒後とかやったら期待通り動いたんでタイミングの問題なんでしょうねぇ… PC性能によって必要な delay 時間が変わるからTimerでやるのは微妙だなー と思ったけど何度でも呼んでみる的アプローチで繰り返しありの Timer を 設定してフォーカスがとれたら Timer を止める、とかでもできそうですね…
- 434 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 01:56:28 ]
- final JTextField textField = new JTextField("Hello");
JOptionPane pane = new JOptionPane(textField, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); JDialog dialog = pane.createDialog("Input Text"); dialog.addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent e) { textField.requestFocusInWindow(); } }); dialog.setVisible(true); dialog.dispose(); Object o = pane.getValue(); int result = (o instanceof Integer) ? (Integer)o : JOptionPane.CLOSED_OPTION; うそくさいし、ひどく面倒
- 435 名前:430 mailto:sage [2009/03/20(金) 13:14:55 ]
- >>434
確かに JOptionPane を直接使えばJDialogがとれますね。参考になります。 戻り値の扱い周りとかが大変面倒くさそうですけど…
- 436 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 13:26:02 ]
- >>432
>「コンポーネントが画面に表示されたときに特定の処理を行う」 Component#addNotify() / removeNotify()をオーバーライドでできると思う。
- 437 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:46:14 ]
- >>436
addNotify() が呼ばれたとき、 そのコンポーネントが表示されてるとは限らない。 たとえば Window.pack() を呼んだとき、 (たとえウィンドウが不可視であっても) ウィンドウ内のすべてのコンポーネントの addNotify() が呼ばれる。 あと、親コンテナの doLayout() が呼ばれるまでは コンポーネントのサイズが確定しないので、 オーバーライドした addNotify() から JSplitPane.setDividerLocation() を呼んでも機能しない。
- 438 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:59:56 ]
- JTableのセルをアニメーションして移動したり表示したりしたいのですが
どういう方法が一番いいでしょうねぇ・・・
- 439 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:12:38 ]
- 単純にセルを描画する命令をタイマーで呼ぶしか方法はないのでは?
その具体的な方法でしょうか?
- 440 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:57:58 ]
- えーと、よくSFとかでありますね
上から1行ずつアニメーションしてさらさらと出てくるような表や 項目を追加したらふわっと最終行が浮かんでくる といったような描画をどうやってやるかということに悩んでいます Timer自体はいくらでも使えるのですが
- 441 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 20:18:33 ]
- JTableはセルそれぞれがコンポーネントというわけではないので、あまりスマートにはできません。
上げられた二つの例に限ってですが、代替策として、glasspaneでだますというのはどうでしょう? それがいやなのであれば、Timerかなにかでアニメーションさせてください。
- 442 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:18:49 ]
- >>440
JXLayer使えばいいと思うよ。
- 443 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:44:17 ]
- JTreeでツールチップ表示中にホイールスクロールするとやたら重いんだが
どうにか、普通にスクロールさせる方法はないかね
- 444 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 04:22:23 ]
- ツールチップが重い処理だからそんなもの。
無効にするしか。
- 445 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:51:40 ]
- >>443
ツールチップを常に重量コンポーネントとして表示すればよいと思う。 普通 JScrollPane でコンポーネントがスクロールされるときは、 現在表示されているビューポートの外観を少しずつずらしてコピーすることで、 高速なスクロールを実現している。 しかし、軽量コンポーネント(たとえばツールチップ)が 上のレイヤーに重なっているときは、 スクロールされるたびにビューポート全体を再描画しなくてはならないので遅くなる。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:35:26 ]
- >>441
ありがとうございます GlassPaneを調べてみますね。それ以外の場合、Timerでアニメーションするとよいとのことですが アニメーションの内容はどのようなものを? TableSellRendererやJTableなどをいくら拡張しても中々難しそうですね・・・ >>442 なかなかすごそうなコンポーネントです。これはどういうものでしょうか?
- 447 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 02:49:32 ]
- 最近beansBindingを触って疑問に思ったのですが、
ColumnBindingに対してvalidatorを設定した場合、 バリデーションエラーが発生した行の取得はどのようにすればよいのでしょうか?
- 448 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 01:00:27 ]
- 横方向に中央であればFlowLayoutでシンプルに実現できますが、縦方向に中央に配置したい場合の簡単な実現方法はありませんでしょうか?
- 449 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 07:03:52 ]
- >>448
Y_AXISなBoxLayoutで子コンポーネントそれぞれにsetAlignmentX()でCENTER_ALIGNMENTを設定するのは? FlowLayoutと違って子コンポーネントの幅は推奨サイズでなく最大サイズに影響されるので、 推奨サイズにしたいなら子コンポーネントの種類次第では最大サイズを設定してやらないといけないけれど。
- 450 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 12:54:35 ]
- >>450
縦方向に中央揃えでコンポーネントを並べることと勘違いしてた。 Box b = Box.createVerticalBox(); b.add(Box.createVerticalGlue()); b.add(コンポーネント); b.add(Box.createVerticalGlue()); みたいな感じでいけるんじゃないかな。 でももしかすると上下のグルーが同じ比率で伸びずに完全なセンタリングにならないかも。 その場合、どれくらいで簡単な実現方法とならないかが分からないけれど、 GridBagLayoutやGroupLayoutみたいな少し複雑なレイアウトマネージャを使うとか、 縦方向について中央配置するマネージャを自作するとか。
- 452 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:32:37 ]
- 初心者です。
javaでゲーム製作の本を買って、 コードがすべてAWTで書かれてるんですが、 swing用の本を買いなおしたほうがいいですか?
- 454 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 15:23:18 ]
- >>453
別にそんなことないだろ。 Swingの本なら、awtの知識は前提としているだろうし。
- 455 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:13:35 ]
- >>454
ありがとうございます。 今の本で勉強してみます。
- 456 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:39:38 ]
- >>453
時間の無駄をいとわないならその本でOK。 時間の無駄がいやなら買いなおすべし。
- 457 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:44:33 ]
- ゲームを作るつもりでその本を買ったなら Swing の本を
買い直す必要は全くないと思うが… Swing の勉強をするつもりで買ったの?
- 458 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 04:25:34 ]
- あとでswingの本読んで、swing化してみるのは実力が付いていいと思うけどね。
基本は大事。
- 459 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 06:53:59 ]
- >>440
>>453 ゲームで、グラフィック表示ばっかりなら、Swingはあまり関係ないと思われる。 java.awt.Graphics2Dを使ってるから「コードがすべてAWT」というオチではないよな?
- 460 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:44:16 ]
- 440関係なかった・・・
- 461 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:49:53 ]
- javaでゲームだと結局java2dだとか3d使うんだべ
- 462 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 11:50:26 ]
- そんなことないべ。
コマンドアドベンチャーとかなら、普通に既存コンポーネントだけで作れるべ。
- 463 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:57:11 ]
- >>461
シミュレーションだとJava2DとSwingでがっちり組むみたいよ。 最近ので、ちょっと期待してしまうDarkSideとか www.darkside-game.net/index.jsp 自分ではJava3Dを使いたいんだけど再配布がな・・・
- 464 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:06:37 ]
- >>463
Java Web Startにすると、そのあたりも自動でインストールしてくれるらしい
- 465 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:33:46 ]
- >>464
そんなうまい話があるわけない。 開発者の手間は変わらない。(JNLPの分面倒か)
- 466 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:05:32 ]
- >>465は技術者として終わっとるな。
- 467 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:11:55 ]
- Java Web StartでのJava3D配布は、このあたりで話題になってた
pc11.2ch.net/test/read.cgi/tech/1033703640/909-915 詳しくはここを https://j3d-webstart.dev.java.net/test/ これが参考になるかもしれない。 ziddy.japan.zdnet.com/qa4257080.html
- 468 名前:465 mailto:sage [2009/04/03(金) 07:15:22 ]
- >>466
"自動で"とか勘違いさせるような発言について書いたんだが
- 469 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 08:21:42 ]
- Java3Dサイトのデモでは自動でJava3Dがインストールされるように見えるが。
- 470 名前:デフォルトの名無しさん [2009/04/03(金) 08:59:32 ]
- スタンドアロンでも普通に実行できるようにならんかね
ネットワークアクセスしてもいいから
- 471 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 09:41:54 ]
- jarファイルにすれば実行できるぞ
- 472 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 11:24:57 ]
- JFileChooser で、ファイルチューザーのダイアログを開いた時に表示されるディレクトリを
マイコンピュータにしたいんですが、どうしたらいいでしょうか?
- 473 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:14:59 ]
- 任意のファイルを自動でインスコできたら、セキュリティ上問題が有るな。
- 474 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:51:59 ]
- だから認証が出るわけだな。いまさら何を。
- 475 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:49:56 ]
- マニフェストに記述した JAR 内の画像をアイコンにするくらいしてほしいね。
まぁ JWS でデスクトップに好きな画像のショートカットアイコン作れるけどさ。
- 476 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 12:17:50 ]
- テキストを編集できるフレームで特定の文字がある行だけ
編集不可能にするにはどうしたら良いでしょうか。 netBeansのエディタみたいにするには?
- 477 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:27:24 ]
- カーソル移動のイベントを受け取って、その位置の含まれる行を見て
setEditable() で切り替えるとか。
- 478 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:35:57 ]
- 実際にやったことないから分からないけど
DocumentListener とか使うのでは
- 479 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:38:42 ]
- あるいは CaretListener を使って
キャレットが移動するたびに必要に応じて setEditable(boolean) を呼ぶとか。 こっちのほうがいいかも。
- 480 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:41:24 ]
- >>477,478,479 さんありがとうございます。
試してみます。
- 481 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 19:46:23 ]
- スレが過疎ってるスキに、くだらないこと書かしてもらうが
FileSystemView fileSystemView = FileSystemView.getFileSystemView(); この冗長さは、どうにかならんのか?
- 482 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 19:49:55 ]
- IME にでも登録しとけよ。俺は Eclipse のオナペット使うけど。
- 483 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 20:03:54 ]
- >>481
嫌ならもう少し短い変数名使えば?
- 484 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:28:39 ]
- ラッパ書いてヲレフレームワークに突っ込めよ。
import ore; ore = new ore.gFSV(); で出来るようになるぜ。
- 485 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 01:13:41 ]
- Nimbusのとかに比べると、まだまだだな。
InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState.java
- 486 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 17:57:46 ]
- 単にクラス名が長いというだけじゃなくて、
おなじ行に3回も FileSystemView と書かなくてはならないのが問題というか。 せめて、こうするべきだったのでは。 FileSystemView fsv = FileSystemView.instance(); Toolkit.getDefaultToolkit() も同罪。
- 487 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 18:00:07 ]
- get付けてgetInstance()にしようぜ
- 488 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 00:47:23 ]
- その程度の工夫ではJavaの冗長さはびくともしないぜ
おとなしくIDEに補完させましょう # 型推論があればもうちょっとなんとか…
- 489 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 09:07:28 ]
- しかしHashMapを格納するときにMapで宣言するJavaの文化が型推論の導入を阻むのだった
- 490 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 23:43:57 ]
- 型推論って型の宣言必要ないんだが。
- 491 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:08:21 ]
- ゲネリックス を始めて触った時に typedef が欲しくなったのは俺だけではあるまい。
- 493 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 00:15:51 ]
- 型推論っていえるのか・・・。
- 494 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 06:35:02 ]
- 言語仕様談義はGUIと関係ないずら
- 495 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 00:34:16 ]
- JEditorPaneにsetTextで500KBくらいのHTMLを読ませると、表示にもの凄く時間がかかるんだが何かいい方法は無いですかい
- 496 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 01:09:10 ]
- Swing を捨て SWT の Browser クラスを使う。
- 497 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 01:45:50 ]
- >>496
SWTって本を見かけないから全く触れたことないなあ。 軽いのならちょっと調べてみる、d
- 498 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 01:57:11 ]
- 500kだとブラウザでも遅いと思うんだがSwingはさらにシングルスレッドだからね。
- 499 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 05:55:19 ]
- >>498
シングルスレッドってw
- 500 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 11:28:27 ]
- イベントディスパッチスレッドがひとつしかないことを言ってるのでは
- 501 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 11:31:55 ]
- >>498
現存するGUIツールキットでスレッドセーフなものは無いぞ。
- 502 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 17:33:32 ]
- というか、JWebPaneは今どうなってんの?
- 503 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 18:49:46 ]
- 誰か、というかの前を補完してくれ〜
- 504 名前:デフォルトの名無しさん [2009/04/18(土) 20:50:07 ]
- >> 497
軽いけれど役立たずだよ。
- 505 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 07:12:42 ]
- Java でカスタムブラウザみたいなものを作ろうと思ったら SWT 一択だろ。
それ以外は特にいらないけど。
- 506 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 11:10:11 ]
- カスタムブラウザ自体がアレ。
自前でパースして適当に配置したほうが(ry
- 507 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 11:23:39 ]
- Google Map とか自前でパースして動かすんかい。エラい再発明家だな。
- 508 名前:495 mailto:sage [2009/04/19(日) 15:11:00 ]
- SWT調べてみたけどSwingと連携させるのはなかなか厄介そうだね。
Swingでやるとして、500KBのHTMLを一気にでは無く少しずつ表示させることは出来ないだろうか。 スレッドを使ってやってみたら、HTMLの先頭部分は表示できたんだけどスクロールができない、助けて
- 509 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 15:39:35 ]
- operaはHTML自体はメモリに読んどいて表示はウィンドウに見えてる部分だけ描画する。
メモリ減らしたいならそんな感じだがスクロール早くしたいなら スクロール時の描画アルゴリズムを考えるとかじゃなかろうか。
- 510 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 05:26:43 ]
- Swing の全コンポーネントをヘビーウェイトにするとか、そういうオプションないんだっけ?
EDT 処理やコンポーネントは相互変換できるから、あとそれができれば SWT との混在も 不可能じゃなさそうな気がするけど。
- 511 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 06:58:54 ]
- ポップアップメニューくらいなら重量にできるけど
- 512 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 08:59:15 ]
- ヘビーとライトが混ざると変に重くなるとか
さっさと俺アプリを修正しよう
- 513 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 15:07:48 ]
- 長いので、何回かに分けて質問します。
次のプログラムを実行して、サブフレーム表示ボタンを押すと描画領域を含むサブフレームが表示されるのですが、 サブフレームのクローズボタンを押して閉じてから再度サブフレーム表示ボタンを押すと、サブフレーム表示の瞬間に ちらつきが起こります。一瞬白い部分が見えてから黒く塗りつぶされるのが目につくのです。JFrameのコンテントペインは isDoubleBuffered() がtrueになるので、自動的にダブルバッファリングしてくれるはずと私は理解しているのですが、 なぜかちらつきが起こります。ちなみにactionPerformedメソッドをコメントアウトしてある方に置き換えるとちらつきが 起きないようです。しかし、この回避策はスマートとは言えませんし、なぜこれでうまくいくのかも不明です。 適切な解決策をご存知の方、ご教授ください。私の環境はMac OS X 10.4.11 J2SE 5.0です。
- 514 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 15:14:33 ]
- 513
以上です。
- 517 名前:デフォルトの名無しさん mailto:sage [2009/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 mailto:sage [2009/04/20(月) 23:49:50 ]
- >>517
もちろんfalseと表示されますね。JComponentのdoubleBufferedはデフォルトでfalseですから。 ttp://wisdom.sakura.ne.jp/system/java/swing/swing8.html を参考に 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 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 00:55:01 ]
- JListはsetVisibleRowCountで縦の長さを指定できますが、
横幅を指定するのはどうやるのでしょうか? DefaultListModelで3文字ぐらいをaddしても横幅は8文字分とかにしたいです。
- 520 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 01:59:41 ]
- 519ですが調べてみたら何とか解決しそうです。
- 521 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 02:30:23 ]
- マカウザイ。マクのはサン純正じゃないからアポーに問い合わせろ。
- 522 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 05:20:38 ]
- N+あたりの一部のキチガイのせいで Mac と聞いただけで過剰反応する奴が増えたなぁ。
コンピュータ関係だと使いやすい Unix 端末として使ってる人も多そうなのに。
- 523 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 08:13:22 ]
- 先入観だけど、多く…ないと思う、多いの?
Macは昔から嫌いだが、MacのJavaは動作が違うのか妙に嫌われてるな
- 524 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 08:43:10 ]
- 今日JJUGのイベントにいくんだけど、「複数のGUIウィンドウプログラムが動くシングルウィンドウシステムとその応用」
を発表する会社のページ見るとかなりトンデモな発表になりそうで今から楽しみだぜ、 ttp://www.sys-audit.com/indexjp.html
- 525 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 08:53:44 ]
- >>524
そこ読んだ限りでは単なる C/S システムライクなアプレット実装だな。 つうかページ一番下 > 探偵を使って当研究所関係者を執拗に尾行する企業があります。社員として採用してただ > 同然で技術を入手しようとお考の上でのことでしょうが、暴力行為であり甚だしい > 人権侵害ですのでお止めください。不正競争防止法に触れる可能性もあります。 妄想ワロタw
- 526 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 10:48:11 ]
- >>524
つっこみどころ多すぎてワロタw >ウィンドウの大きさを少し変化させてウィンドウの重なり具合を変化させることにより、 >ウィンドウマネージャに描画指示を出させます コンポーネント入れ変えたら JComponent#revalidate() 呼べば?とか そもそも CardLayout 使えばいいんじゃね?とか…
- 527 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 18:27:38 ]
- >ウィンドウの大きさを少し変化させてこれダーティーとみなされずにリペイントマネージャに無視られるんじゃなかろうか?
revalidate呼べよ。
- 528 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 01:24:03 ]
- >>524
言ったなら感想書いてくれよ www.sys-audit.com/index1.html とか見るとこの会社(というかこのおっさん)すごすぎるぞww
- 529 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 04:28:42 ]
- ユニックス端末ならリナックスでいいだろ。
xterm始めまともなターミナルいくらでもあるし。 わざわざマク使う様な香具師は皆無。マクって、あんまりオープンな環境じゃないしな。ソース見たい時に詰まる事は多い。
- 530 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 07:47:58 ]
- XP は飽きた。Vista もなんだかなぁ。
Unix 系のターミナルやコマンド、gcc が付いてて Photoshop, Illustrator も動く。 名前を聞いて一般人が引かない。家族も使うしそこらの PC 屋で吊るしで買ってこれる。 そんな理由で MacBook 使っている。カーネルのソース必須な人は Linux 使えば 良いと思うけど、Unix のシェル積んでて主要なプロプライエタリソフトも使えるんで 便利だよ。仕事場で 5 人ほど自宅 PC を Mac に乗り換えてる。 スレチなんでこれ以上はやめとくが。
- 531 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 08:41:24 ]
- windowsじゃないと出来ないことってあるよね。
飽きたとか言う以前にwindows(PC)使ってる人は、わざわざ高いMACなんか使わずそれぞれ目的があるんからPCにしてるんだと思うよ。 macだとquicktimeとobjcが標準なのが魅力だけどそれだけかもね。 windows media はどうしてるの? ほかにwinだとゲーム(GPUプログラム)とか。
- 532 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 10:48:48 ]
- >>531
QuickTimeよりは、DirectShowの方がスジが良いんじゃないかと思う。 といってもQuickTimeのAPIとかぜんぜん知らないんで、想像だけど。 DirectShowを使ったアプリ、コーデックはたくさんあるのに、 QuickTimeを使ったアプリってあまり見ない のを考慮すると、使いづらいんじゃないかと思う。 個人的にはQuickTimeアプリってiTunesしか知らない。 コーデックはDivXとFlip4macとPerianぐらい?Flip4macはでかいwmv動画再生しようとすると、 「インポートしています」というダイアログで長々と待たされるのでイライラする。
- 533 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 00:07:25 ]
- マカは盲目だしなあ。もうそんな時代じゃないのに。
- 534 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 00:18:27 ]
- 俺たちのサンが消滅しちゃったって言うのに、どんな時代だって?
- 535 名前:デフォルトの名無しさん [2009/04/23(木) 01:26:24 ]
- 個人的にはNetBeansとOpenOfficeの行く末が心配です。
- 536 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 10:37:08 ]
- 自分の好きなの使えばよろし、
俺は市販のゲームだとかネトゲだとか、 自分の好きなフリーソフトがあるから、 それだけの理由でずっとメインストリーム使ってる。
- 537 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 03:37:23 ]
- ooは金にならないから厳しいだろうなあ。
- 538 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 05:03:45 ]
- Solaris売るには必要だけどね。
あとMSの売り上げ減らすことで、相対的な売り上げがあがる。
- 539 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 16:22:35 ]
- oo有るからってsolaris売れる訳でもないし。
msの客とは重なってないと思うよ。あっちは出来る本とかの充実やみんな使ってる安心感が大事。
- 540 名前:443 mailto:sage [2009/04/26(日) 11:24:07 ]
- >>445で教えて貰った方法を試したところ、
ツールチップを出したままホイール回してもスクロールしなくなりました。 さらに、ツールチップをクリックしてもツールチップ消えません。 なんいこったいでした。 そんなわけで、ホイール回したら問答無用でツールチップを消したいのでちょっと試してきます。
- 541 名前:443 mailto:sage [2009/04/26(日) 12:23:22 ]
- JScrollPane spdf = new JScrollPane(hogeFrame);
spdf.addMouseWheelListener(new MouseWheelListener() { @Override public void mouseWheelMoved(MouseWheelEvent e) { // ホイールを回したらツールチップを消す ToolTipManager.sharedInstance().mousePressed(null); } }); こんな酷いコードになりましたが、 どうにかマウスホイール回したらツールチップが消えるようになり スクロールもスムーズに感じます。
|

|