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


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

Java標準低速GUI 6 AWT/Swing



1 名前:デフォルトの名無しさん [2007/09/26(水) 20:51:18 ]
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。
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

447 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:31:17 ]
上手にいじれば良い

448 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 19:38:15 ]
それが出来るならこんなところで確認してないと思うが?
まあ、ドキュメント読めば分かることだが。

449 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:58:16 ]
JFrameの下部にStatusBarを取り付けようとしています。
単純にBorderLayout.SOUTHで問題はないのですが、BorderLayout.SOUTHに当たる領域は後々別に使用するかもしれないので、完全に別領域として下部に取り付けたいのです。
イメージ的にはsetJMenuBar()と同じような感じです。
どのような実装がよいでしょうか?

450 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:10:09 ]
JPanel に BorderLayout をセットして JFrame の CENTER に置く
JFrame の SOUTH をステータスバーのために使って、
JPanel の SOUTH を後々別に使用するときのために取っておく

451 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:13:45 ]
そのようにした場合、ステータスバーをセットするJFrameのCENTERにコンポーネントを加えたいときにわざわざそのJPanelを取得後貼り付けないといけないので避けたいです。
他にはないでしょうか?

452 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:25:57 ]
>JFrameのCENTERにコンポーネントを加えたいときにわざわざそのJPanelを取得

いや、最初から、JFrame じゃなくて JPanel の CENTER に入れればいいじゃん。
わざわざ取得っていうか、JPanel 作ったときにそれをフィールドに持っとけばいいだけでそ?

本当にどうしても JMenuBar のように振舞わせたくて他に方法がないというなら、出来ることは出来るけどちょっと面倒い。
JRootPane の中の layeredPane と glassPane と、layeredPane の中の contentPane と JMenuBar (と自分の statusBar) をレイアウトするレイアウトマネージャを書いて、JRootPane のレイアウトマネージャをそれで置き換える。

453 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:27:53 ]
Windowsに限定しちゃうかも知れないけど、
%USERPROFILE%\Local Settings\Application Data
↑のディレクトリの中に変なGUID名のディレクトリが作られてて
中を見るとJ2SDK5.0のインストーラみたいなのが入ってる。

うちの環境にはJDK6も入ってるけど、5系だけゴミ?があるので気になります。
これって削除しちゃっていいのかな?

454 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:34:12 ]
>>452
そうなのですが、どうしてもメニューバーのように扱いたかったので・・
やはりかなり面倒なことになるようですね。

丁寧に教えていただきありがとうございました。

455 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:40:36 ]
ボーダーレイアウトでいいだろ
面倒ではないだろと



456 名前:453 mailto:sage [2007/11/23(金) 00:44:03 ]
質問・相談スレに書くつもりが誤爆してました。
こちらはクローズします。ごめんよぅ。

457 名前:デフォルトの名無しさん [2007/11/25(日) 00:15:06 ]
質問相談スレで聞いたところ、こちらで聞いたほうが良いと教えていただい
たので質問させていただきます。
現在、携帯電話でいうフレーム撮影機能をPC上でJAVAを用い、作りたいと考え
ております。USBカメラから動画キャプチャを行い撮影ボタンを押すとその時の
静止画がJPEGで保存するところまでは作ったのですが、写真フレーム(gif)を
動画上に表示する方法がわかりません。API集の方も探してみたのですが、見つ
けることができませんでした。誰か方法について教えてもらえませんでしょう
か??よろしくお願いします

初心者でして簡単なソースなどつけていただけると助かります。

458 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:18:56 ]
一番簡単なのは
・ImageのロードにはImageIOを使う
・JLabelを貼り付けてそれにImageをセットする

ネットで初心者かどうかってのは意味ない文章だからやめたほうがいい
知っているか知らないかだけだから

459 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:23:38 ]
JMF使ってる?

460 名前:デフォルトの名無しさん [2007/11/25(日) 00:23:49 ]
動画を描画するコンポーネントのpaintComonent(...)をオーバーライドして
super呼んだ後に、drawImage(...)でOKじゃね?

461 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:35:49 ]
いや
>USBカメラから動画キャプチャを行い撮影ボタンを押すとその時の
>静止画がJPEGで保存するところまでは作った
ここにJMF使ってるならJMF流儀の動画の描画の仕方があるから動画のキャプチャをどうやってるかでやり方が決まる。

462 名前:デフォルトの名無しさん [2007/11/25(日) 01:30:58 ]
JMFをつかっています。
キャプチャ部分となりますと
new Timer(100, new ActionListener(){

try {
player = Manager.createRealizedPlayer(new MediaLocator("vfw://0"));
} catch(Exception e){
System.out.println(e);
System.exit(1);
}

player.start();
ここになりますでしょうか。
ご教授よろしくお願いします

463 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 02:44:57 ]
>写真フレーム(gif)を動画上に表示する
これがやりたいんだよね?

ならEffect実装してProcessorからTrackControl取り出してTrackControl#setCodecChain(Codec[])で実装したEffectセットしてやれば良い。
んでProcessor#getVisualComponent()で取得したビジュアルコンポーネントを適当に張り付ければ良い。

あとはJMFのページのチュートリアルとかサンプルコード読んで。


464 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:21:48 ]
日本語を入力時、「確定はされていない文字列入力状態中」(Windowsでは文字の下に破線が引いてある状態)を調べる方法はありますか?

465 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:22:47 ]
ImmGetCompositionString



466 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:23:19 ]
ごめん、ここJavaだったorz

467 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:34:01 ]
Component に addInputMethodListener を仕掛けておけば取れるみたい?

468 名前:464 mailto:sage [2007/11/27(火) 20:44:22 ]
>>467
InputMethodEvent#getCommittedCharacterCount()
で判別できそうですね。
ありがとうございました!

469 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 15:28:42 ]
Java Web Startのアプリで、jnlpファイルの中で

<security>
<all-permissions/>
</security>

を設定していて、jarにはオレオレ証明書でサインしている。
確かにファイルアクセスなど自由にできるから、
この設定は有効化されているはずなんだが、
Point p = MouseInfo.getPointerInfo().getLocation();

Exception in thread "AWT-EventQueue-0"
java.security.AccessControlException: access denied (java.awt.AWTPermission watchMousePointer)

が出るのって、これはどういうことなんだろ。
JWSで動かさなければこのエラーは出ないんだが。

470 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 14:03:31 ]
>>469
JWSのバグでね?
そのクラス1.5からのやつだからもしかしたら・・・

471 名前:デフォルトの名無しさん [2007/12/01(土) 00:09:26 ]
frameにタブだけ貼り付けたの作ると、
初めに、タブのタイトル部分に選択状態みたいなのが行くんだけど、
それをタブに貼ってある、jCheckBoxに初めから行くようにしたいんだけど、
windowsのアプリはそうなるようなんで。
どうやったら出来ますか?

472 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 00:49:32 ]
フォーカスのトラバーサルいじるAPI群なかったけ?

473 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 00:54:40 ]
初期状態ってことならオープン時にフォーカスセットしてあげれば?

474 名前:471 [2007/12/01(土) 01:19:46 ]
jCheckBox.requestFocusInWindow();

よく分からないけど、setVisible(true)した後しかフォーカスがいかないな…

475 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 01:19:51 ]
>>471
つrequestFocusInWindow()

俺はタブはいつもsetFocusable(false)するなぁ。



476 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 01:26:01 ]
>>474
つaddAncestorListener()

ancestorAddedでrequestFocusInWindow呼んでみそ

477 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 01:27:34 ]
ふつーにオープン時でいいとおも

478 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 01:28:59 ]
>>477
それだとタブで切り替えたときにフォーカスが移らないってことだとおも

479 名前:471 mailto:sage [2007/12/01(土) 01:59:35 ]
>>476
おーサンクスサンクス。
これで完璧だわ。AncestorAdapterは何故かないんだな

480 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 02:59:55 ]
アダプタクラスは実装するメソッド数が少ないか
そのインターフェースの多くが実装される可能性が高いリスナーは
利便性が低いからアダプタクラス用意しないって方針だよ。

481 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 10:36:16 ]
JPopupMenuの使い方なのですが、ポップアップメニューの対象によってメニュー内容を変えたい場合、一般的にどのような方法を取るのがよろしいでしょうか?
単純に対象を毎回チェックしてその対象に必要なメニューを構成する、というのはどうも気持ちが悪くて・・

482 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 12:02:52 ]
リスナーのフィールドにして遅延生成すればいいだけじゃない?

483 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 12:35:03 ]
対象の種類ごとにJPopupMenuを予め作っておく・・・・のはムダが多いか

484 名前:481 mailto:sage [2007/12/01(土) 12:48:32 ]
>>482
遅延生成とはどういうことを指すのでしょう
やはり表示毎に必要なメニューを生成という意味でしょうか?

>>483
例えば対象の種類にあらゆる属性があり、その属性ごとに必要なメニューがある場合、その組み合わせをあらかじめ作っておくのは好ましくないかと・・

485 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 12:55:47 ]
じゃあ、すべての項目を含めたJPopupMenuを1個用意しておいて、各JMenuItemのsetVisibleを切り替えるとか



486 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:24:05 ]
>>478
そういう意味だったのか
あの日本語からはそこまで理解できなかったよ

487 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:28:15 ]
>>481
表示される項目が全て画面に収まるのならすべていれる。
そして選択可能不可能で調整したほうがいいんじゃない?

コンポーネントによってメニューがかわるより、メニューは同じで選択可能か不可能かのほうが
ユーザーに優しいとおもわれる。
この選択肢は下のほうにあるとか上のほうにあるとかコンポーネントごとにかわっていたら厄介だ。

488 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:01:14 ]

JFrameの上には、とりえあえずJPanel置くべきですか?
 

489 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:04:11 ]
packの仕組みをしっているのならおいたほうがいい
そうでなくともパネルに機能単位でのせていったほうが楽になるかな

グループレイアウトを使うのなら場合によってはなくてもいいかも

490 名前:481 mailto:sage [2007/12/01(土) 15:52:06 ]
>>485
>>487
とりあえず全部登録しておくのが楽なようですね。
場合によってsetVisible、setEnabledで使い分けようと思います。

ご意見ありがとうございました。

491 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 18:02:09 ]
>>480
そうなんだ〜。まぁ、よく使うなら自分でAdapter作ればいいしね〜。

492 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 18:44:49 ]
LinuxのSwing上でトラックポイントのセンターボタンでスクロールしたときに
コンテキストメニューが開いちゃうんだけど、心当たりがある人いる?
JavaはSunの1.6.0_03

493 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 19:12:28 ]
これかな?
sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/awt/1.3/designspec/popupmenu.html
>・Windows では、マウスボタン 2 マウス UP でメニューがポップアップする 
>・Motif では、マウスボタン 3 マウス DOWN でメニューがポップアップする

494 名前:デフォルトの名無しさん [2007/12/02(日) 21:54:41 ]
以下の挙動で、困っています。

JNLPでデスクトップにショートカットアイコンを作成し、
そのアイコンに何らかのファイル(何でもいい)をドラッグアンドドロップすると、
「このアプリケーションは起動できません」「詳細」「了解」というダイアログが表示される。

ここで「詳細」ボタンを押すと、次のような情報が表示される。
※C:\Users\hoge\Desktop\新しいテキスト ドキュメント.txt をドラッグアンドドロップした場合。
InvalidArgumentException[ 無効な引数が指定されました: {C:\Users\hoge\Desktop\新しいテキスト ドキュメント.txt, C:\Users\hoge\AppData\Local\Temp\javaws12 }]
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

で、問題なのは、ここで、ドラッグアンドドロップしたファイルが、
何の断りもなく、いきなり 削除 されてしまう、ということなのです。

この不具合は、あらゆる全てのJNLPアプリで、全てのOSで再現しました。

こうした挙動を防ぐような、何らかの対策をすることは可能でしょうか?


495 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 00:20:49 ]
>>494
MacOSX Leopardでやろうとしましたが再現しませんでした。
何よりファイルにDnDができない。

bugreport.sun.com/bugreport/
で報告してください。
報告時は具体的な再現方法と再現環境を書いておくのが吉です。
ありとあらゆる、というのはちょっと曖昧すぎます。



496 名前:デフォルトの名無しさん [2007/12/03(月) 01:24:26 ]
ごめん、たしかに、MacOSでは試していない。
あと、64bit用のJREやSolarisでも試せていない。

こちらで試したのは、Windows Vista, Windows XP SP2, UbuntuLinux(7.04)の上で、
1.4.2_16,1.6.0_03,1.6.0_10-ea(いずれも32bit用)。

ここまでやって、いずれの環境でも再現した。
いま、Java7でも試そうとしているところ。

Javaキャッシュビューアで、インストール済みのJNLPアプリについて
「選択されたメニューのショートカットを作成」または、
右クリックメニューで「ショートカットの作成」で、
ショートカットがデスクトップにすることができる。

そうして作られたショートカットに、
ユーザが何かのファイルを放り込むと、
そのファイルが勝手に削除されてしまう、ということ。

ユーザがデスクトップ上のメモ帳のショートカットにファイルをDnDして
開こうとして、まちがって隣のJNLPアプリのショートカットにドロップしたところ、
そのファイルが勝手に削除されてしまう、という感じ。

> 何よりファイルにDnDができない。

たぶん、そういう挙動が正常なのだと思う。

497 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 11:36:46 ]
質問です。JButtonがアイコンであるGIFファイルの縦横サイズより結構大きくなってしまうのですが、コンパクトにする方法は無いでしょうか?

498 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 12:06:32 ]
>>497
JButtonのjavadocを隅から隅まで読んで
しかるのちにボーダーのマージンを設定したらいいよ

499 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 14:21:41 ]
>>498
497です。できました。ありがとうございます。

500 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 02:03:22 ]

JFrameでgetContentPane()をしなくてもよくなったは、いつからですか?
自動的に転送されるようになったってのを読んだのですが。
 

501 名前:デフォルトの名無しさん [2007/12/06(木) 02:06:17 ]
5.0

502 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 02:10:45 ]
即レスthx

503 名前:デフォルトの名無しさん [2007/12/07(金) 22:41:46 ]
シューティングを作りたいと思ってます
メイン画面とスコア画面があって、
それぞれJPanelを継承したクラスを作ってMainPanel,SubPanelと作ろうと思ってるんですが、
この方法は値の受け渡しが面倒くさくなったり、重くなったりしますか?
普通はひとつのゲームは大体1パネルですかね?

504 名前:デフォルトの名無しさん [2007/12/07(金) 22:43:16 ]
普通はゲームにSwingなんて使わなくないか?
ましてシューティングで・・・

505 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 22:45:12 ]
Javaの勉強もかねて作ってます
最近はSwingもだいぶ早くなったと聞いたんですが...



506 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 22:51:48 ]
ゲームなら、Frameに直接描けばいいと思う。
BufferStrategyを使うのも良し。

507 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 22:52:23 ]
400x300で24fpsくらいで試してみるといいよ。
Swingはシングルスレッドだから、パッシブ連打でも問題ないはず

508 名前:デフォルトの名無しさん [2007/12/07(金) 23:00:08 ]
パッシブ連打とは?

509 名前:503 mailto:sage [2007/12/07(金) 23:01:39 ]
Frameに直接書くってことはpaintComponentメソッド内に
メイン画面用とスコア画面用の描画処理が混在してるってことですよね?
そうすると片方の画面の背景だけ変更するなどの処理とかがややこしくはならないですか?
パネルで分けるとコードがすっきりする気がするんですが

510 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 23:05:41 ]
パッシブ・レンダリング=描画イベントによる受動的なレンダリング(repaint())
アクティブ・レンダリング=自発的に描画を実行するレンダリング(Toolkit.sync(), BufferedStrategy)

511 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 00:30:40 ]
>>503
つまりWindowシステム普及前のゲームプログラミングが難しかったと思ってる?
んなことないよ

練習がてらというのならSwingつかってもいいけどメリットはあんまないとおもうよ
JLabelのアイコン指定でキャラ表示とかSwingというフレームワークで
描画や再移動とかそういうことでしょ?

途中でもっといいものを、もっと本格的なものを、となって挫折しそう

あとpaintComponentではゲームのレンダリングの処理はいれないことね

512 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 00:31:36 ]
さらに付け加えるとパッシブレンダリングはいわゆるトリプルバッファを使わないといけないから注意ね
ダブルバッファじゃダメ

513 名前:503 mailto:sage [2007/12/08(土) 00:51:35 ]
全体的な流れとしては、レンダリング(描画?)は各オブジェクト(敵、弾)のクラスのdrawメソッド(メソッド名は自由?)などで行い、
paintComponentはそれを呼び出すだけ。で、必要に応じてrepaint()を行うとpaintComponentが再描画されるという感じでしょうか?

514 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 00:59:58 ]
paintのタイミングは自前のrepaintだけじゃないからそれはやっちゃだめ
ウインドウの重なり具合とかOSが画面をいきなりリフレッシュしたりとかあるから

各オブジェクトにdrawのインターフェースを実装させるという考え方はあってる

レンダリングは自前でAというバッファへしてるとすると、
その間描画はBというバッファからイベントでフロントへ描画させる
Aのレンダリングが終わったらAとBをいれかえて、次のフレームの描画はBへ行う

バックバッファへのレンダリングとフロントへのレンダリングが重なる場合もあるという考え方ね

515 名前:503 mailto:sage [2007/12/08(土) 01:09:30 ]
ダブルバッファがいまいち理解できてないのでもうちょっと勉強してみます。
答えてくださった方どうもありがとうございました



516 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 01:16:16 ]
本当はJavaでゲーム作成というスレがあったんだけど最近おちちゃったんだよな
ゲーム製作板とかいろいろと斜め読みしてみるといいかも

517 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 03:09:19 ]
Javaでゲームってのはなかなか前衛的でおもしろいと思うんだが、
如何せんパフォーマンスが悪いのが致命的なんだよな。
いくら努力しても、一定以上FPSが上がらんとなるとどうしても敬遠したくなる。

518 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 06:27:05 ]
勉強として作るプログラムも題材の選び方はかなり重要だよ。
努力するほど深まって発展していく題材と、
底の浅いところですぐに打ち止めになるのがある。

519 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 08:27:04 ]
勉強の段階なら、何を作っても勉強になる。

520 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 08:28:32 ]
Javaでエロゲぐらいなら作れそうじゃね?

521 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 09:47:04 ]
アクションだろうがパズルだろうがなんでもできるんじゃないの。
ブロック崩しやテトリスくらいなら楽勝。
ゲーム専用機であるようなハデなアクションゲームを作りたいならお門違い。

522 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 09:49:46 ]
あと速く動かしたいなら画面小さくすればいいんだよ。256 * 192とか。w
昔のアーケードゲームの解像度はせいぜいその程度だったしさ。

523 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 11:36:49 ]
シューティングやアクションはともかくとして
リアルタイムシミュレーションとか向いてると思うけどな>java
スレッド周りとか楽々作れるし

524 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 12:55:52 ]
ゲ制作板で話せ

525 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:32:05 ]
>>517
まじていってるの?



526 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:33:14 ]
リアルタイムのアクションものも余裕で出来るよ
IntelCore2/2GHzでJavaで動かすとCネイティブだと1.6GHzくらいの速度になるけど
それが問題になることはまずあるまい

527 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 01:17:57 ]
[MainFrame.java]
public class MainFrame extends JFrame {
 public MainFrame() {
  MainPanel mp = new MainPanel();
  Container contentPane = getContentPane();
  contentPane.add(mp);
}
public void main(String[] args) {
  MainFrame frame = new MainFrame();
  frame.setVisible(true);
 }
}

[MainPanel.java]
public class MainPanel extends JPanel implements ActionListener{
 public MainPanel() {
  SubPanel sp = new SubPanel();
 }
 public void actionPerformed(ActionEvent e) {
  setBackground(Color.BLACK);
 }
}
[SubPanel.java]
public class SubPanel extends JPanel {
 public SubPanel() {
  JButton b = new JButton("メインパネルの色変更");
  b.addActionListener();
 }


528 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 01:23:46 ]
↑の様な構成で作りたいんですけど、うまくいきません。
ようするにSubPanelのインスタンスからMainPanelのインスタンスへ
アクセスするにはどうすればよいのでしょうか?
MainFrameでMainPanelのインスタンスをpublicでstaticにしたりいろいろやったのですが、
うまくいかないのでどなたか教えてください。

529 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 01:47:12 ]
>>528
SubPanelにボタンのaddActionListenerを委譲して
MainFrameからやりたいことを教えてあげればいいんじゃないの?

530 名前:528 mailto:sage [2007/12/10(月) 03:21:26 ]
>>529
すいません 委譲がいまいちわからないんですが、SubPanelとMainFrameにaddActionListener()メソッドを作り、MainFrameにactionPerformedメソッドがあるような感じですか?
今までは↓のような形で出来るかなとやっていたんですが、うまくインスタンスにアクセスできていないみたいなんです。
もし↓で出来たとしてもなにか強引過ぎる気がします。もともと構成がありえないんですかね?
[MainFrame.java]
public class MainFrame extends JFrame {
 public static MainFrame frame;
 public static MainPanel mp;
 public MainFrame() {
  mp = new MainPanel();
  Container getContentPane.add(mp);
}
public void main(String[] args) {
  frame = new MainFrame();
 }
}
[MainPanel.java]
public class MainPanel extends JPanel implements ActionListener {
 public MainPanel() {
  sp = new SubPanel();
  this.add(sp);
 }
 public void actionPerformed(ActionEvent e) {
  setBackground(Color.BLACK);}}
[SubPanel.java]
public class SubPanel extends JPanel {
 public SubPanel() {
  JButton b = new JButton("メインパネルの色変更");
  b.addActionListener(frame.mp);}}

531 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 10:02:09 ]
MainPanelはPaintComponentをオーバーライドしないといけない気がする…

532 名前:531 mailto:sage [2007/12/10(月) 10:06:52 ]
やっぱ要らないか

533 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 10:45:47 ]
>>530
設計方針とか変更不可のクラス等の制約条件とかが分からないけど
手っ取り早くやるならMainPanelとSubPanelの親子関係がそのままなのを前提に
b.addActionListener((MainPanel)getParent());

534 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 11:19:28 ]
俺なら
SubPanel#addColorChangeActionListener(listener){b.addActionListener(listener);}
を作る方を選ぶかな。

535 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 12:32:25 ]
これってSwingの話ですらなくて言語の基本の話だろ?
なんでstaticがでてきたりするんだ?
まずは言語の勉強からやりなおしたほうがいいんじゃないかい?



536 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 12:51:30 ]
たぶんMainFrameやMainPanelのインスタンスをSubPanelで参照する方法が分からなくて、
b.addActionListener(frame.mp);}}ってやってもコンパイルできなくて、
b.addActionListener(MainFrame.mp);みたいにできるようにクラス変数にしちゃったんだと推測。
プログラムの設計と実装の仕方を良い参考書や良いソースを見ながら勉強した方がいいと思う。

537 名前:530 mailto:sage [2007/12/11(火) 00:36:38 ]
>>536
正にその通りです
>>533
getParent()なんてのがあったんですね 

どうもありがとうございました

538 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:58:13 ]
>>530のコードを見る限り
getParent()は使わないほうがいいな
独立性が失われるのにListenner使ったりとかありえん

まず言語の基本の勉強からしたほうがいい
近道しようとしても無駄だと思う
ここ本当に基本中の基本だから

539 名前:503 mailto:sage [2007/12/11(火) 17:52:44 ]
>>538
すいませんご指摘ありがとうございます
SubPanelのコンストラクタでgetParent()しても、その時点ではMainPanelの子にはなってないということですよね
>独立性が失われるのにListenner使ったりとかありえん
これはimplements ActionListenerのことですかね アダプタクラスというのを使ったほうがいいということでしょうか

一応基礎はやったつもりでいたんですが、今回GUI使うことでぜんぜん理解できていないことに気づいてそれだけでもよかったです
もう来ません ありがとうございました。

540 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 18:53:25 ]
もうきませんって捨て台詞・・・はもうきこえてないか

インスタンスの参照を渡せばいいだけでしょ?
それができないってことはJavaの勉強1週間程度しかしてないということかな?

541 名前:530 mailto:sage [2007/12/12(水) 00:36:46 ]
ながながとスレ違いすいません
勉強はJavaの入門書を一通り読んだんですが(スレッドくらいまで。デザインパターンは全く)、ちゃんとは理解できてなかったようです。
参照を渡すといいましても>>530のコードだと難しくないですか?
コンストラクタでいろいろやってるのも悪いんですかね
本当にこれで最後にしますんで、
MainPanelとSubPanelが連動していて(Subのボタンを押すとMainの内容を変更したりする)場合、
どんなコードになりますか?親切な方おねがいします

542 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:37:50 ]
いや、普通に継承してるんだから
MianPanelはSubPanelを生成してあげたあとにセットしてあげるでもいいんじゃない?

SubPanelに
private MainPanel mainPanel;
public setMainPanel(MainPanel panel){
this.mainPanel = panel;
}

と追加しておいて

sp = new SubPanel();
sp.setMainPanel( this ) ;
this.add(sp);

とするといい。
subからMainを触りたければ上で定義したprivateなmainPanelに対してアクセスをする。

MainPanelでSubPanel作って乗せてるだけだからこれでいいと思われ。

MainPanelが先に消えたりする可能性があるとかだとリスナーいじってどうのこうのが必要になるけど
たぶんあなたがやりたいのはこれで十分かと。

543 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:44:04 ]
そもそも設計の段階で間違えてるんじゃないか?

544 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 08:34:31 ]
>>542
それだと SubPanel が汎用性の低いクズパーツになるだろ。
SubPanel がボタンを持つパネルならそのボタンのアクションリスナーを
>>534のように SubPanel に委譲してやったほうがいい。

public class SubPanel extends JPanel {
 private JButton button;
 public SubPanel(String buttonText) {
  button = new JButton(buttonText);
  this.add(button);
 }
 public void addButtonActionListener(ActionListener listener) {
  button.addActionListener(listener);
 }
}

public class MainPanel extends JPanel implements ActionListener {
 public MainPanel() {
  SubPanel panel = new SubPanel("メインパネルの色を変更");
  panel.addButtonActionListener(this);
  this.add(panel);
 }
 public void actionPerformed(ActionEvent e) {
  this.setBackground(Color.BLACK);
 }
}


545 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:06:00 ]
>>544
アクションイベントだけならそうだろうけど
GUIってそれ以外のプロパティの変更とかふつうはやるものだし



546 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:35:41 ]
main panelをある構造に従って作るようにして、sub panelでその構造を変化させたらいいんじゃないの?

547 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:44:05 ]
そこまでの設計が出来ていればこんな質問はせんだろうと。
ActionListennerをMainPanelで実装している時点で複数のイベント対応がおわっとるわけで。






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

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

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