07/07/28 10:04:35
>>664
使わなくてもいいよ
AWTスレッドなら
667:デフォルトの名無しさん
07/07/31 12:29:26
やりたい事
・BufferStrategyを使って描画
・フルスクリーン表示
・メニューの表示
CanvasでBufferStrategy使って描画、Canvasを含むJWindowをフルスクリーン表示
フルスクリーン画面でJPopupMenuを表示するとCanvasの描画が走るタイミングでJPopupMenuが消える
JPopupMenuをJInternalFrameで実現してJDesktopPaneとの組み合わせにしてもダメでした。
BufferStrategyを使わなければ実現出来るのに・・・。
ゲーム作ってる人で同じ悩みに直面した人いませんか?
668:デフォルトの名無しさん
07/07/31 13:25:18
>>667
JPopupMenu#setLightWeightPopupEnabled(boolean) で false にしろとかって話でなくて?
669:デフォルトの名無しさん
07/07/31 14:00:11
>>668
はやり、消えます。
BufferStrategyからgetDrawGraphicsしたGraphicsでMenuを描画すれば良いのでは
と思いついたのですが描画は出来ても機能せず。
フルスクリーンじゃない時はMenuがCanvasの上に表示されるので
フルスクリーン+BufferStrategyの組み合わせがどうにも悪いのかなと・・・。
670:デフォルトの名無しさん
07/07/31 14:00:35
だからお約束のようにAWTとSwingまぜるなと
671:デフォルトの名無しさん
07/07/31 14:10:17
>>670
JWindowからcreateBufferStrategyしてもダメでした。
672:デフォルトの名無しさん
07/07/31 14:13:51
JPopupMenuがSwingだからこれを使ってはダメ
673:デフォルトの名無しさん
07/07/31 14:34:53
>>672
部品を全てawtに統一しJPopupMenuの変わりにDialogを使用したところ無事実現できました。
事象が上手く理解できていないので今からソースを見て理解を深めたいと思います。
ありがとうございました。
674:デフォルトの名無しさん
07/07/31 14:50:24
Swingってのはフレームから下を全てSwingフレームワークによってソフトウェア描画する
AWTってのは各種OSなどに描画を任せる
混ぜるな危険ってのはそういうこと
Swingコンポーネントを使いつつBufferedStrategyが使いたいという用途はあまりないと思うので
その場合はSwingフレームワークにあわせること
ゲームなどでBufferedStrategyは使うと思うが、メインループスレッドからバックバッファに描画、
その後repaint発行でいける
この場合注意すべきポイントはrepaintはいつ呼ばれるかわからないということ
つまりトリプルバッファのようにバックバッファが最低2つは必要になる
BufferedStrategyなどでゲームに特化した話題ならゲーム製作板へどうぞ
675:デフォルトの名無しさん
07/07/31 16:31:47
>>667
BufferStrategy の原理上そうなると思う.
昔ちょっと試したときの結論はゲームにメニューバーは付けない(そもそもかっこわるいし)で
ゲーム内にメニューを実装する,でした.
676:デフォルトの名無しさん
07/07/31 17:39:57
AWTでしか実現できない機能なんてあんのか~、しらなんだわ。
677:デフォルトの名無しさん
07/07/31 18:00:20
GLCanvasもそうだけどいわゆるハードウェアべったりな動作を期待したい場合AWTを使うしかない
この仕組みを変えるためにはSwing自体大幅にパイプラインをかえないといけない
で、JOGLに関してはJavaSE6でそうなる予定だったのだが、不具合のためOFFになってしまった
そろそろ標準でJOGLついていてもいいと思うけどね
まともに3D動かそうとすると必須だし
678:デフォルトの名無しさん
07/07/31 18:21:29
swingとawtのFPS比較サイトとかあれば良いのにな。
679:デフォルトの名無しさん
07/07/31 18:31:18
ゲームの話か?
描画内容を反映させるのにBLITが必要なく、垂直同期が取れるAWTのほうが有利
JNIによるダイレクトなレンダリングも期待できる
GUIコンポーネントというのならSwingのほうが将来的にも拡張性的にも有利ではないかと
680:デフォルトの名無しさん
07/07/31 18:41:02
というかBufferStrategyのdoc読んだら重量には効かないのが分かるだろ。
>>677
このバグ自体は昔からあるけどいざ、潰してみたらVGAドライバ由来の物だということが分かったので当分無理。
だから途中でデフォルト無効になったんだし。
これさえ直ればちゃんとGLPanelがつかえるんだよ。
せっかく、JOGLがjavax.*まできたのに・・・。
JOALも標準拡張にしてやってくだせぇ。
ミドルレンジ以上のサウンドカードじゃないとOpenALまともにサポートしてないから無理かな?
681:デフォルトの名無しさん
07/07/31 19:13:05
ところでJava3DとJOGLのちがいってなに?
682:デフォルトの名無しさん
07/07/31 19:53:15
(そのレベルなら)なに気にすることはない。
自分で調べろや
683:デフォルトの名無しさん
07/07/31 21:35:54
ImageからBufferedImageへの変換ってどうやるの?
684:デフォルトの名無しさん
07/07/31 21:37:05
>>683
Java言語から勉強したほうがいいよ
685:デフォルトの名無しさん
07/07/31 21:57:55
>>683
URLリンク(www.amazon.co.jp)
この本の17ページに書いてあるよ
686:デフォルトの名無しさん
07/07/31 21:59:16
>>683
BufferedImage→ Graphics→drawImage
これで分からなきゃ初心者スレ行ってくれ
687:デフォルトの名無しさん
07/07/31 22:06:50
JTableで編集中のセルの行インデックスを取得する方法ありますか?
688:デフォルトの名無しさん
07/07/31 22:07:40
ファイルからロードしたImageだからgetGraphics()でnullになるんだけど、どうすれば・・
689:デフォルトの名無しさん
07/07/31 22:12:10
>>687
APIに載ってるんだが、なんで調べないの?
つ getEditingRow()
690:デフォルトの名無しさん
07/07/31 22:31:30
>>686 ああ、できた。あんがと
691:デフォルトの名無しさん
07/07/31 22:32:46
SwingとAWTを混ぜるなって話だけど・・・jdk7で変わるのかね?
Heavyweight/Lightweight Mixing feature of Java 7
URLリンク(forums.java.net)
ごめん内容いまいち追い切れてない。
692:デフォルトの名無しさん
07/07/31 22:44:27
>>691
まだmacはJDK5だと言うのに・・・。
693:デフォルトの名無しさん
07/07/31 22:46:38
そうだったのかw
あんまバージョンアップが早いと
リタイヤするOSが増えそうだな
FreeBSDも5だっけか
694:デフォルトの名無しさん
07/07/31 22:53:32
>>692
6の開発者向けプレビューが去年から更新されてないんだよね。
たぶん4月にはLeopardと一緒に正式リリースを目論んでいたんだろうけど、
Leopard10月になっちゃったし。
695:デフォルトの名無しさん
07/07/31 23:02:50
>>683
BufferedImageってImageインターフェースもってるだろ?
BufferedImageにすってことはどれだけ情報がうしなわれるとか考えた?
696:デフォルトの名無しさん
07/07/31 23:04:40
>>682
で、どっちが活発にメンテされてるの?
697:デフォルトの名無しさん
07/07/31 23:15:09
去年JOGLは1.0がリリースされGLCanvasは現実的に使えるようになった
Windows版しかみてないが、ネイティブ版の8割くらいの速度で動くと思えばよい
1.0GHzで動いていたのと同じように動かすためには1.2GHzくらいが必要
Java3Dはかなり前に試したが、とにかく遅くて使い物にならないことや高レベルすぎるんじゃないかな
ゲーム以外ならJava3Dでいいのかもしれないけど
698:デフォルトの名無しさん
07/07/31 23:34:42
>>697
なるほど。よく分かった。
699:デフォルトの名無しさん
07/07/31 23:37:02
JOGLだとOpenGL専用で、どこでも使えるJavaっぽくないけど、
これ自体がオプションパッケージだから、依存性が強くてもいいのかもしれない。
Java3Dがまだこなれてないんじゃ、しようがないね。
700:デフォルトの名無しさん
07/07/31 23:38:25
>>695 Image.getGraphics()がアンサポート例外出すのがやなんだけど
701:デフォルトの名無しさん
07/07/31 23:46:50
>>699
OpenGLはWindowsやLinux、Solarisなどで動くオープンなAPIだよ
Java3Dは実装選べるけど結局OpenGLかDirect3Dかの二択だしプラットフォームはかわらんよ
sunが自前で全部実装ってのは無理
ビデオチップベンダとの協力が必要だから
702:デフォルトの名無しさん
07/07/31 23:48:51
>>700
オフスクリーン以外で実行したらそれがでるのは正しい動作
それにImageなんて抽象クラスなんだから実装はさまざまだ
703:デフォルトの名無しさん
07/07/31 23:51:33
開発者側で混ぜるな危険をなんとか言ってるのはJava3D/LG3D関係か?
てかJOGL1.0はもう古い。今は1.1.0。
java2DをJOGLのテクスチャに合成するutilが追加されてる。
1.0までだとここらへん自力でやらないとだめだったけど今なら
java2Dで描画できるもんならなんでもJOGLに持っていけるようになったからフォント描画も楽になった。
ビルボード上にテクスチャ貼ってスプライトさせるなら自分でやった方が効率よさそうだけど。
704:デフォルトの名無しさん
07/07/31 23:53:45
>>703
1.0からできるっしょ?どっかかわった?
混ぜるな危険はSwingがでたとき、1.1時代からいわれてるよ
705:デフォルトの名無しさん
07/07/31 23:57:04
>>699
何言ってんだ?JOGLもJava3DもOpenGL使ってるだろ。
それに両方、標準拡張。
万人が使うわけじゃないからJREから外されれてるだけ。
そこらのJNI使った拡張機能とはわけが違う。
706:デフォルトの名無しさん
07/08/01 00:13:53
>>704
そうじゃなくてoffscreen renderingの問題だよ。どうにかなったのこれ?
昔から言われてるのは常識だろ。
>1.0からできるっしょ?どっかかわった?
javadoc嫁
707:デフォルトの名無しさん
07/08/01 00:49:41
>>706
落としてきてあるのだけは確認した
com.sun.opengl.util.j2dパッケージが追加されたのか
いままでもJava2Dからのテクスチャ生成ができたけど、これは動いてる最中も反映されるんか?
毎回getTexture必要になるっぽくみえる
今週末久々にJOGLいじってみるか
問題は激しくすれ違いなことだがJOGLのスレってなかったか
708:デフォルトの名無しさん
07/08/01 03:07:03
なるほど。ためになった。
709:デフォルトの名無しさん
07/08/01 05:49:39
>>707
JOGLにしかない機能・作法が意外とあるのにどこいってもJOGL専用話してる所がないんだよ。
JOGL紹介サイトでもOpenGLの教本に書いてあることくらいしか書いてない。
jogl-demosのソースか洋書あたるのが近道。
国内はJava3Dだらけだ。
710:デフォルトの名無しさん
07/08/01 08:39:42
良スレの予感。
711:デフォルトの名無しさん
07/08/01 10:57:50
>>709
JOGLって作りこみの部分に入るとOpenGLまんまだから迷うことはないけど
たしかにそのセットアップとかTipsとかそういう情報ゼロに近いね
一方JavaのゲームではJOGLしか選択の余地がないから非常に悩むところ
Java2Dのアクセラレーション範囲が狭いことに加え、アルファブレンディングの種類が足りなすぎる
おかげで2D描画もOpenGLが必須になるという・・・
712:デフォルトの名無しさん
07/08/01 11:05:22
今気がついたんだが「LayoutManager2」なんてクラスがあるんだな。
本当にこんなネーミングで良いのか?
713:デフォルトの名無しさん
07/08/01 13:40:12
クラスというかインタフェースだけどな
配置の制約情報オブジェクトをコンポーネントに関連付けるメソッドが追加されたLayoutManager
ネーミングについては確かに投げやりだな
714:デフォルトの名無しさん
07/08/01 23:48:14
SAX2.0なんて2がつくの結構あるぜ
715:デフォルトの名無しさん
07/08/02 01:26:14
>>712
そりゃたしかに投げやりなネーミングだな。ひどい
716:デフォルトの名無しさん
07/08/02 04:06:22
じゃあどんな名前ならよかったんだ?
- AdvancedLayoutManager
- ExtendedLayoutManager
- SuperLayoutManager
- LayoutManagerGreat
- 続・LayoutManager
717:デフォルトの名無しさん
07/08/02 04:23:15
LayoutManager4.0
アナログ的に配置指示
718:デフォルトの名無しさん
07/08/02 10:30:35
>>716
続・LayoutManager に一票
719:デフォルトの名無しさん
07/08/02 11:29:00
ボーランドのライブラリは2がつくのたくさんあったな
720:デフォルトの名無しさん
07/08/02 12:01:51
Extended とか付けたら、もっかい拡張したくなったら名前に困るじゃん。
数字なら 3 とか 4 にすればいいだけで楽。
721:デフォルトの名無しさん
07/08/02 12:54:43
10以上行くと
ソートした時に
XX
XX10
XX2
XX3
.
.
ってなりそう。
722:デフォルトの名無しさん
07/08/02 16:37:38
Win32 API の ~Ex は辛かった。~2 もどうかとは思うが。
そろそろ Swing そのものを根本的に整理して欲しい時期だねえ。
723:デフォルトの名無しさん
07/08/02 17:58:03
Swingで一番やってほしいのが
・定数のenum化
・コレクションフレームワーク利用
・generics利用
・OpenGLパイプライン有効
で作り直してほしいな
互換性とるのは無理だからパッケージをかえてな
724:デフォルトの名無しさん
07/08/02 18:15:14
新パッケージ名はjavax.swing2だなw
725:デフォルトの名無しさん
07/08/02 18:43:39
javax.続・swing パッケージで…
726:デフォルトの名無しさん
07/08/02 19:09:32
JOptionPaneのmessageTypeで指定すると表示されるデフォルトアイコン群は
他のクラスで利用出来ないものでしょうか?
727:デフォルトの名無しさん
07/08/02 19:51:01
>>721
9の次はaにすれば、しばらく問題なし
728:デフォルトの名無しさん
07/08/02 19:55:47
>>726
ひどい方法
class IconRevealer extends BasicOptionPaneUI {
public Icon getIcon() { return super.getIcon(); }
};
IconRevealer foo = new IconRevealer();
new JOptionPane(null, JOptionPane.INFORMATION_MESSAGE).setUI(foo);
//new JOptionPane(null, JOptionPane.ERROR_MESSAGE).setUI(foo);
//new JOptionPane(null, JOptionPane.QUESTION_MESSAGE).setUI(foo);
Icon icon = foo.getIcon();
JOptionPane#getIcon()やiconフィールドはsetIcon()で設定した時用だったんだな
729:728
07/08/02 20:21:29
ソースを眺めるとこう単純にできるがさらにアンドキュメンティッドなひどい方法だ
String propertyName = "OptionPane.errorIcon";
//String propertyName = "OptionPane.informationIcon";
//String propertyName = "OptionPane.warningIcon";
//String propertyName = "OptionPane.questionIcon";
Icon icon = (Icon)sun.swing.DefaultLookup.get(new JOptionPane(), new BasicOptionPaneUI(), propertyName);
730:デフォルトの名無しさん
07/08/02 20:27:27
UIManager.getIcon("OptionPane.errorIcon");
731:デフォルトの名無しさん
07/08/02 20:31:56
素でUIManagerのことを忘れてたorz
BasicOptionPaneUIはUIManagerを介さずに直にsun.swing.DefaultLookupを呼んでるんだな
732:デフォルトの名無しさん
07/08/02 21:26:15
UIManagerで使うキー文字列も明文化されていないから
変えられても文句いえないんだよな。
こーゆーところはpublicな定数なりenum(は増えるから無理か)を
使ってあれば安心して使えるんだが。
733:726
07/08/03 16:54:32
ありがとうございます。
昨日は諦めてアイコンを作ってましたが
使わなくて済みそうです。
734:デフォルトの名無しさん
07/08/03 18:12:41
あの辺のアイコンデータのライセンスってどうなってるんだろうね?
再配布可能なライセンスならアイコン自体もらってアプリに組込めば
明文化されてない使い方しなくてもすみそうなんだけど…
735:デフォルトの名無しさん
07/08/03 20:16:55
っ URLリンク(java.sun.com)
736:デフォルトの名無しさん
07/08/03 21:39:54
>>735
Thx!
737:735
07/08/04 00:38:56
・・・でもよくみたらJOptionPaneのアイコンは入ってなかったね。ごめんよ。
738:デフォルトの名無しさん
07/08/04 04:47:39
>>737
ほんとだ… インフォメーションアイコン(丸に"i"のやつ)とかあるから
同じかと思ったら別のアイコンだ…
739:デフォルトの名無しさん
07/08/05 08:56:15
BufferedImage.TYPE_INT_ARGB
BufferedImage.TYPE_INT_ARGB_PRE
よく_PREってついてるのあるけど、どう違うの?
740:デフォルトの名無しさん
07/08/05 11:16:41
それは premultiplied alpha 。
RGB 各成分に A 成分が乗算済みであるフォーマット。
例えば 70% の不透明度で描画するとき通常 result = dst * 0.3 + src * 0.7 とやるわけだけど、
_PRE は A 成分が乗算済みだから result = dst * 0.3 + src で済む (src が _PRE で dst がそうでない場合)。
741:デフォルトの名無しさん
07/08/05 12:31:43
よくわかった。ありがとう。
742:デフォルトの名無しさん
07/08/05 20:45:36
問題はSwingと関係ない話だってことだな
743:デフォルトの名無しさん
07/08/05 20:51:44
まぁ、こっちで聞くのは正解な気もするがw
744:デフォルトの名無しさん
07/08/05 20:53:47
AWTのスレってあったっけ?
745:デフォルトの名無しさん
07/08/05 21:00:13
ない
746:デフォルトの名無しさん
07/08/06 10:15:44
>>740-743
Sunのチュートリアルには無かったけど、そういう話(話題)ってどこを参照すればいいの?
できれば日本語で。
747:デフォルトの名無しさん
07/08/06 10:41:30
Java2Dのスレを立ち上げる
748:デフォルトの名無しさん
07/08/06 11:05:27
>>746
URLリンク(java.sun.com)
『このイメージのカラーデータには、アルファがあらかじめ乗算されています』
749:デフォルトの名無しさん
07/08/06 12:37:44
>>748 その翻訳の「意味」が分からなかった。
750:デフォルトの名無しさん
07/08/06 12:41:38
まぁわかりにくい表現だとは思うが
API以前に画像の基礎知識つけたほうがいいんじゃね?
GUIがわかってない人がSwingのマニュアル見てもわからないのと同じように
751:デフォルトの名無しさん
07/08/06 12:55:52
画像処理というよりも、単に画像ファイルを読み込み、コピー、保存する程度。
ImageIOではなくて。
752:デフォルトの名無しさん
07/08/06 19:25:43
独自のポップアップメニューを表示するにはどうしたらいいのでしょうか?
たとえばExcelの色選択メニューみたいな。
枠ナシJFrameを使うとタスクバーに出たり、ウィンドウがちらついたりします。
753:デフォルトの名無しさん
07/08/06 19:39:27
普通の JPopupMenu に独自のコンポーネントを add してみるとか。
単に JPopupMenu のレイアウトマネージャを変えてみるとか。
754:デフォルトの名無しさん
07/08/06 19:41:05
glasspane使うのが正解じゃね?
755:デフォルトの名無しさん
07/08/06 20:39:15
JWindowはどう?
(色選択ならJColorChooserからコンポーネントもってくれば)
756:752
07/08/06 21:35:43
JWindowがよさそうですが、よそがクリックされたらウィンドウ閉じるようにするにはどうするのがいいんでしょう?
JFrameのときは、windowListenerのwindowDeactivatedでdisposeしてました。
757:デフォルトの名無しさん
07/08/07 08:45:37
>>756
その「よそ」って何?
「よそ」が他のコンポーネントならそのコンポーネントのイベントを拾って閉じればいいじゃん。
758:デフォルトの名無しさん
07/08/07 08:50:35
>>757
最初の質問に書いたとおり、ポップアップメニューを作りたいので、よそというのはメニュー以外のことです。
では、元のウィンドウのタイトルバーや、プログラム管理外の領域がクリックされたときのイベントはどうやってとればいいでしょうか?
759:752
07/08/07 09:35:06
プログラム管理外の領域のクリックは、元ウィンドウのwindowDeactivatedでとれました。
あとは、タイトルバーのクリックがどうにかなれば
760:デフォルトの名無しさん
07/08/07 09:58:46
JPopupMenu popup = new JPopupMenu();
popup.add(new JColorChooser());
component.setComponentPopupMenu(popup);
でよくね?
# JPopupMenu isa JComponent
761:752
07/08/07 10:21:52
>>760
それでいけそうですた。
>>753の言うことをちゃんと聞いてればよかった。
762:デフォルトの名無しさん
07/08/07 20:40:22
DelphiでいうところのPaintBoxみたく
paintComponent(Graphics g) にクロージャを引っかけることができるような
カスタムペイントコンポーネントって、ないの?
今はふつー(??)に、JPanel の派生クラスをつくってる。
763:デフォルトの名無しさん
07/08/07 20:45:01
ない。
ふつーは JComponent から派生する。
764:デフォルトの名無しさん
07/08/07 20:51:45
PaintBoxとpaintComponent(Graphics g) は動きがまったく違うと思うのだが
765:デフォルトの名無しさん
07/08/07 21:42:32
>>762
ないんだよねぇ。
それ欲しい。