Java標準低速GUI 6 AWT/Swing
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/09/26(水) 20:51:18しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。
Java低速GUI Swing 5 (前スレ)
http://pc11.2ch.net/test/read.cgi/tech/1161139809/
Java低速GUI Swing 4
http://pc8.2ch.net/test/read.cgi/tech/1140533866/
Java低速GUI Swing 3
http://pc8.2ch.net/test/read.cgi/tech/1121700954/
Java低速GUI Swing 2
http://pc8.2ch.net/test/read.cgi/tech/1095398949/
Java低速GUI Swing
http://pc5.2ch.net/test/read.cgi/tech/1062271447/l50
0482デフォルトの名無しさん
2007/12/01(土) 12:02:520483デフォルトの名無しさん
2007/12/01(土) 12:35:030484481
2007/12/01(土) 12:48:32遅延生成とはどういうことを指すのでしょう
やはり表示毎に必要なメニューを生成という意味でしょうか?
>>483
例えば対象の種類にあらゆる属性があり、その属性ごとに必要なメニューがある場合、その組み合わせをあらかじめ作っておくのは好ましくないかと・・
0485デフォルトの名無しさん
2007/12/01(土) 12:55:470486デフォルトの名無しさん
2007/12/01(土) 14:24:05そういう意味だったのか
あの日本語からはそこまで理解できなかったよ
0487デフォルトの名無しさん
2007/12/01(土) 14:28:15表示される項目が全て画面に収まるのならすべていれる。
そして選択可能不可能で調整したほうがいいんじゃない?
コンポーネントによってメニューがかわるより、メニューは同じで選択可能か不可能かのほうが
ユーザーに優しいとおもわれる。
この選択肢は下のほうにあるとか上のほうにあるとかコンポーネントごとにかわっていたら厄介だ。
0488デフォルトの名無しさん
2007/12/01(土) 15:01:14JFrameの上には、とりえあえずJPanel置くべきですか?
0489デフォルトの名無しさん
2007/12/01(土) 15:04:11そうでなくともパネルに機能単位でのせていったほうが楽になるかな
グループレイアウトを使うのなら場合によってはなくてもいいかも
0490481
2007/12/01(土) 15:52:06>>487
とりあえず全部登録しておくのが楽なようですね。
場合によってsetVisible、setEnabledで使い分けようと思います。
ご意見ありがとうございました。
0491デフォルトの名無しさん
2007/12/01(土) 18:02:09そうなんだ〜。まぁ、よく使うなら自分でAdapter作ればいいしね〜。
0492デフォルトの名無しさん
2007/12/02(日) 18:44:49コンテキストメニューが開いちゃうんだけど、心当たりがある人いる?
JavaはSunの1.6.0_03
0493デフォルトの名無しさん
2007/12/02(日) 19:12:28http://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 でメニューがポップアップする
0494デフォルトの名無しさん
2007/12/02(日) 21:54:41JNLPでデスクトップにショートカットアイコンを作成し、
そのアイコンに何らかのファイル(何でもいい)をドラッグアンドドロップすると、
「このアプリケーションは起動できません」「詳細」「了解」というダイアログが表示される。
ここで「詳細」ボタンを押すと、次のような情報が表示される。
※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で再現しました。
こうした挙動を防ぐような、何らかの対策をすることは可能でしょうか?
0495デフォルトの名無しさん
2007/12/03(月) 00:20:49MacOSX Leopardでやろうとしましたが再現しませんでした。
何よりファイルにDnDができない。
http://bugreport.sun.com/bugreport/
で報告してください。
報告時は具体的な再現方法と再現環境を書いておくのが吉です。
ありとあらゆる、というのはちょっと曖昧すぎます。
0496デフォルトの名無しさん
2007/12/03(月) 01:24:26あと、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ができない。
たぶん、そういう挙動が正常なのだと思う。
0497デフォルトの名無しさん
2007/12/04(火) 11:36:460498デフォルトの名無しさん
2007/12/04(火) 12:06:32JButtonのjavadocを隅から隅まで読んで
しかるのちにボーダーのマージンを設定したらいいよ
0499デフォルトの名無しさん
2007/12/05(水) 14:21:41497です。できました。ありがとうございます。
0500デフォルトの名無しさん
2007/12/06(木) 02:03:22JFrameでgetContentPane()をしなくてもよくなったは、いつからですか?
自動的に転送されるようになったってのを読んだのですが。
0501デフォルトの名無しさん
2007/12/06(木) 02:06:170502デフォルトの名無しさん
2007/12/06(木) 02:10:450503デフォルトの名無しさん
2007/12/07(金) 22:41:46メイン画面とスコア画面があって、
それぞれJPanelを継承したクラスを作ってMainPanel,SubPanelと作ろうと思ってるんですが、
この方法は値の受け渡しが面倒くさくなったり、重くなったりしますか?
普通はひとつのゲームは大体1パネルですかね?
0504デフォルトの名無しさん
2007/12/07(金) 22:43:16ましてシューティングで・・・
0505デフォルトの名無しさん
2007/12/07(金) 22:45:12最近はSwingもだいぶ早くなったと聞いたんですが...
0506デフォルトの名無しさん
2007/12/07(金) 22:51:48BufferStrategyを使うのも良し。
0507デフォルトの名無しさん
2007/12/07(金) 22:52:23Swingはシングルスレッドだから、パッシブ連打でも問題ないはず
0508デフォルトの名無しさん
2007/12/07(金) 23:00:080509503
2007/12/07(金) 23:01:39メイン画面用とスコア画面用の描画処理が混在してるってことですよね?
そうすると片方の画面の背景だけ変更するなどの処理とかがややこしくはならないですか?
パネルで分けるとコードがすっきりする気がするんですが
0510デフォルトの名無しさん
2007/12/07(金) 23:05:41アクティブ・レンダリング=自発的に描画を実行するレンダリング(Toolkit.sync(), BufferedStrategy)
0511デフォルトの名無しさん
2007/12/08(土) 00:30:40つまりWindowシステム普及前のゲームプログラミングが難しかったと思ってる?
んなことないよ
練習がてらというのならSwingつかってもいいけどメリットはあんまないとおもうよ
JLabelのアイコン指定でキャラ表示とかSwingというフレームワークで
描画や再移動とかそういうことでしょ?
途中でもっといいものを、もっと本格的なものを、となって挫折しそう
あとpaintComponentではゲームのレンダリングの処理はいれないことね
0512デフォルトの名無しさん
2007/12/08(土) 00:31:36ダブルバッファじゃダメ
0513503
2007/12/08(土) 00:51:35paintComponentはそれを呼び出すだけ。で、必要に応じてrepaint()を行うとpaintComponentが再描画されるという感じでしょうか?
0514デフォルトの名無しさん
2007/12/08(土) 00:59:58ウインドウの重なり具合とかOSが画面をいきなりリフレッシュしたりとかあるから
各オブジェクトにdrawのインターフェースを実装させるという考え方はあってる
レンダリングは自前でAというバッファへしてるとすると、
その間描画はBというバッファからイベントでフロントへ描画させる
Aのレンダリングが終わったらAとBをいれかえて、次のフレームの描画はBへ行う
バックバッファへのレンダリングとフロントへのレンダリングが重なる場合もあるという考え方ね
0515503
2007/12/08(土) 01:09:30答えてくださった方どうもありがとうございました
0516デフォルトの名無しさん
2007/12/08(土) 01:16:16ゲーム製作板とかいろいろと斜め読みしてみるといいかも
0517デフォルトの名無しさん
2007/12/08(土) 03:09:19如何せんパフォーマンスが悪いのが致命的なんだよな。
いくら努力しても、一定以上FPSが上がらんとなるとどうしても敬遠したくなる。
0518デフォルトの名無しさん
2007/12/08(土) 06:27:05努力するほど深まって発展していく題材と、
底の浅いところですぐに打ち止めになるのがある。
0519デフォルトの名無しさん
2007/12/08(土) 08:27:040520デフォルトの名無しさん
2007/12/08(土) 08:28:320521デフォルトの名無しさん
2007/12/08(土) 09:47:04ブロック崩しやテトリスくらいなら楽勝。
ゲーム専用機であるようなハデなアクションゲームを作りたいならお門違い。
0522デフォルトの名無しさん
2007/12/08(土) 09:49:46昔のアーケードゲームの解像度はせいぜいその程度だったしさ。
0523デフォルトの名無しさん
2007/12/08(土) 11:36:49リアルタイムシミュレーションとか向いてると思うけどな>java
スレッド周りとか楽々作れるし
0524デフォルトの名無しさん
2007/12/08(土) 12:55:520525デフォルトの名無しさん
2007/12/08(土) 14:32:05まじていってるの?
0526デフォルトの名無しさん
2007/12/08(土) 14:33:14IntelCore2/2GHzでJavaで動かすとCネイティブだと1.6GHzくらいの速度になるけど
それが問題になることはまずあるまい
0527デフォルトの名無しさん
2007/12/10(月) 01:17:57public 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();
}
0528デフォルトの名無しさん
2007/12/10(月) 01:23:46ようするにSubPanelのインスタンスからMainPanelのインスタンスへ
アクセスするにはどうすればよいのでしょうか?
MainFrameでMainPanelのインスタンスをpublicでstaticにしたりいろいろやったのですが、
うまくいかないのでどなたか教えてください。
0529デフォルトの名無しさん
2007/12/10(月) 01:47:12SubPanelにボタンのaddActionListenerを委譲して
MainFrameからやりたいことを教えてあげればいいんじゃないの?
0530528
2007/12/10(月) 03:21:26すいません 委譲がいまいちわからないんですが、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);}}
0531デフォルトの名無しさん
2007/12/10(月) 10:02:090532531
2007/12/10(月) 10:06:520533デフォルトの名無しさん
2007/12/10(月) 10:45:47設計方針とか変更不可のクラス等の制約条件とかが分からないけど
手っ取り早くやるならMainPanelとSubPanelの親子関係がそのままなのを前提に
b.addActionListener((MainPanel)getParent());
0534デフォルトの名無しさん
2007/12/10(月) 11:19:28SubPanel#addColorChangeActionListener(listener){b.addActionListener(listener);}
を作る方を選ぶかな。
0535デフォルトの名無しさん
2007/12/10(月) 12:32:25なんでstaticがでてきたりするんだ?
まずは言語の勉強からやりなおしたほうがいいんじゃないかい?
0536デフォルトの名無しさん
2007/12/10(月) 12:51:30b.addActionListener(frame.mp);}}ってやってもコンパイルできなくて、
b.addActionListener(MainFrame.mp);みたいにできるようにクラス変数にしちゃったんだと推測。
プログラムの設計と実装の仕方を良い参考書や良いソースを見ながら勉強した方がいいと思う。
0538デフォルトの名無しさん
2007/12/11(火) 13:58:13getParent()は使わないほうがいいな
独立性が失われるのにListenner使ったりとかありえん
まず言語の基本の勉強からしたほうがいい
近道しようとしても無駄だと思う
ここ本当に基本中の基本だから
0539503
2007/12/11(火) 17:52:44すいませんご指摘ありがとうございます
SubPanelのコンストラクタでgetParent()しても、その時点ではMainPanelの子にはなってないということですよね
>独立性が失われるのにListenner使ったりとかありえん
これはimplements ActionListenerのことですかね アダプタクラスというのを使ったほうがいいということでしょうか
一応基礎はやったつもりでいたんですが、今回GUI使うことでぜんぜん理解できていないことに気づいてそれだけでもよかったです
もう来ません ありがとうございました。
0540デフォルトの名無しさん
2007/12/11(火) 18:53:25インスタンスの参照を渡せばいいだけでしょ?
それができないってことはJavaの勉強1週間程度しかしてないということかな?
0541530
2007/12/12(水) 00:36:46勉強はJavaの入門書を一通り読んだんですが(スレッドくらいまで。デザインパターンは全く)、ちゃんとは理解できてなかったようです。
参照を渡すといいましても>>530のコードだと難しくないですか?
コンストラクタでいろいろやってるのも悪いんですかね
本当にこれで最後にしますんで、
MainPanelとSubPanelが連動していて(Subのボタンを押すとMainの内容を変更したりする)場合、
どんなコードになりますか?親切な方おねがいします
0542デフォルトの名無しさん
2007/12/12(水) 02:37:50MianPanelは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が先に消えたりする可能性があるとかだとリスナーいじってどうのこうのが必要になるけど
たぶんあなたがやりたいのはこれで十分かと。
0543デフォルトの名無しさん
2007/12/12(水) 02:44:040544デフォルトの名無しさん
2007/12/12(水) 08:34:31それだと 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);
}
}
0545デフォルトの名無しさん
2007/12/12(水) 13:06:00アクションイベントだけならそうだろうけど
GUIってそれ以外のプロパティの変更とかふつうはやるものだし
0546デフォルトの名無しさん
2007/12/12(水) 13:35:410547デフォルトの名無しさん
2007/12/12(水) 13:44:05ActionListennerをMainPanelで実装している時点で複数のイベント対応がおわっとるわけで。
0548デフォルトの名無しさん
2007/12/12(水) 15:31:50スキンがXMLファイルと画像で済むならたくさん配布されてそうなのに、
どうして一個も見つからないんだろう・・・
0549デフォルトの名無しさん
2007/12/12(水) 15:37:420550デフォルトの名無しさん
2007/12/12(水) 15:41:150551デフォルトの名無しさん
2007/12/12(水) 15:48:27Synth Studioにちょっと期待。
http://weblogs.java.net/blog/gfx/archive/2005/09/synth_studio.html
>550
Nimbusもいいと思うんだけど、とにかく数が出ないことにはなんとも多様性が少なすぎます。
0552デフォルトの名無しさん
2007/12/12(水) 16:38:29着せ替えできることを売りにしてるアプリで俺が最初に思い出すのがCDプレイヤー。
0553デフォルトの名無しさん
2007/12/12(水) 17:03:49参考:
ttp://d.hatena.ne.jp/nowokay/20060223#1140636171
Substanceは6.0では動かないくさいけど
0554デフォルトの名無しさん
2007/12/12(水) 17:10:21手法、使用APIなどご教授お願いします。
0555デフォルトの名無しさん
2007/12/12(水) 17:18:24なぜここで聞く?質問スレ行った方がいいんじゃないか?
0556デフォルトの名無しさん
2007/12/12(水) 17:37:28って感じでもないか。
知ってたらBufferedImageを保存するには?って聞くだろうし、それはスレ違いか。
0557デフォルトの名無しさん
2007/12/12(水) 17:44:29そういう感じのLAFがカッコイイと思う人もいるんだろうけど・・・
ブログのスキンとは求められてるものが違うんでね?
0558デフォルトの名無しさん
2007/12/12(水) 18:39:42それとも共存するんだろうか?
NimbusってSynthで全部自前でやってるせいか少し重いからイマイチなんだが。
0559デフォルトの名無しさん
2007/12/12(水) 19:16:20というか、エンジン部分が決まっているので
むしろこれからのチューニングに期待できるんだけど。
Nimbusが出てきてからSubstanceへの興味はだいぶ薄れちゃったな・・・
V2Cは、6u10に入ってるNimbusで綺麗に動くので最近はNimbusで見てる。
素のMetalやOceanよりしっくりきてる。
普通に見れて、プラットフォーム共通の見栄えってのは重要でしょう。
Metalは、お世辞にも見栄えがいいとはいえなかったから・・・・(派手だけど)
0560デフォルトの名無しさん
2007/12/12(水) 19:25:210561デフォルトの名無しさん
2007/12/12(水) 19:26:24jarをインデックス付き無圧縮で配布すれば多少早いかもね。
もしくはSynthをコンパイル可能にするとか。
0562デフォルトの名無しさん
2007/12/12(水) 19:26:41NetBeansもそれでシェアを一気に伸ばしたし
0563デフォルトの名無しさん
2007/12/12(水) 20:07:13ていうかクロスプラットフォームの実現性としてはjavaLAFがデフォの方が良いけど、
ユーザビリティが落ちるので天秤ってところか・・・。
0564デフォルトの名無しさん
2007/12/12(水) 20:40:36部品をカスタマイズしてたりするとなおさら。
で、いくつもLAFがインストールされていても、事実上使えないものが出てくる。
そんなLaFしか実現できないのなら、LAF一つで統一してほしいところだな。
0565デフォルトの名無しさん
2007/12/12(水) 21:25:54推奨サイズを使って設定してくれるならずれることはほとんどないはずだけど?
今まで大量にSwingアプリ作ったがLAFかえて問題が出る場合ってのはほとんどないよ。
むしろWinネイティブより楽。
0566デフォルトの名無しさん
2007/12/12(水) 21:35:29推奨サイズって何?
カスタムコンポーネントなしのアプリしか作ったことないんじゃないの?
0567デフォルトの名無しさん
2007/12/12(水) 21:45:280568デフォルトの名無しさん
2007/12/12(水) 22:04:470569デフォルトの名無しさん
2007/12/12(水) 22:18:380570デフォルトの名無しさん
2007/12/12(水) 22:47:58見るけど気付かなかったよ。どこかに便利なサイズの表でもあるのかと思った。
0571デフォルトの名無しさん
2007/12/12(水) 23:23:410572デフォルトの名無しさん
2007/12/13(木) 00:25:17つまり、preferredSizeを和訳できなかったわけだな。中国の会社の人?
0573デフォルトの名無しさん
2007/12/13(木) 02:30:490574564
2007/12/13(木) 02:58:31もちろんそうしてるよ。JDK1.0のころからある普通のレイアウトマネージャを組み合わせてレイアウトしてる。
そりゃテキストエディタのようにツールバーとメニュー、オプション選択とOK/NOボタンしかないとか、
その程度なら問題ないだろうけど、複雑になるとたいがい問題でると思うけどな。
ただしまったく使えなくなるほど、ひどいことになるのは少ない。
レイアウトデザインには急所があってさ、絶対はずせないところってのがいくつかある。
そこがずれると一気にしまりがなくなってださくなるとこが。
そういうとこが狂うと、やめてよっていいたくなる。
LAFに応じて位置とサイズを調整するようなコードを書くとか、無難なデザインを適用する事はできると思う。
でもそういうのってなんか違うと思うんだよね。
0575デフォルトの名無しさん
2007/12/13(木) 03:27:330577デフォルトの名無しさん
2007/12/13(木) 08:46:370578デフォルトの名無しさん
2007/12/13(木) 11:04:12簡単なのでいいから
0579デフォルトの名無しさん
2007/12/13(木) 11:45:140580デフォルトの名無しさん
2007/12/13(木) 11:54:5621 * 21 のicon,pressedIcon,rolloverIconの三枚のボタン画像を作りJButtonのプロパティに指定。
perferredSize=21,21
margin=0,0,0,0
focusPainted = false
contentAreaPainted = false
borderPainted = false
LaFでMotif,Windows,Metalの三通りを試してみてよ。Motifはアウトだから。
画像ボタンをつくればいいだけなら解決策はあるけど、しかし、
GridBagLayoutで次のようにJTextFieldが等間隔でならんでいて、
その一つにこの画像ボタンがあるとする。
[TextField]
[TextField][B] ←画像ボタン
[TextField]
[TextField]
アウトだよね。レイアウトは崩れる。デザインを修正することで回避する策もあるし、
使えないってことはないが、LaFを切り替えると振る舞いが違うのは困る。
0581デフォルトの名無しさん
2007/12/13(木) 12:04:33もう一つ例をあげると、Motifのメニュー操作法と、Windows,Metalの操作法は異なる。
これは使ってみればすぐに分かると思うけど。
それから、JSliderBarの操作法ね。Metalと残りのWindows,Motifでは振る舞いが異なる。
これもわかりにくいかもしれないけど使ってみれば分かると思う。
LaFは見かけ上の外観を変更するだけのはずなのに、操作体系にまで干渉したらまずいと思うんだけど。
■ このスレッドは過去ログ倉庫に格納されています