トップページ⇒tech
1001コメント326KB

Java標準低速GUI 6 AWT/Swing

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/09/26(水) 20:51:18
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"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:52
リスナーのフィールドにして遅延生成すればいいだけじゃない?
0483デフォルトの名無しさん2007/12/01(土) 12:35:03
対象の種類ごとにJPopupMenuを予め作っておく・・・・のはムダが多いか
04844812007/12/01(土) 12:48:32
>>482
遅延生成とはどういうことを指すのでしょう
やはり表示毎に必要なメニューを生成という意味でしょうか?

>>483
例えば対象の種類にあらゆる属性があり、その属性ごとに必要なメニューがある場合、その組み合わせをあらかじめ作っておくのは好ましくないかと・・
0485デフォルトの名無しさん2007/12/01(土) 12:55:47
じゃあ、すべての項目を含めたJPopupMenuを1個用意しておいて、各JMenuItemのsetVisibleを切り替えるとか
0486デフォルトの名無しさん2007/12/01(土) 14:24:05
>>478
そういう意味だったのか
あの日本語からはそこまで理解できなかったよ
0487デフォルトの名無しさん2007/12/01(土) 14:28:15
>>481
表示される項目が全て画面に収まるのならすべていれる。
そして選択可能不可能で調整したほうがいいんじゃない?

コンポーネントによってメニューがかわるより、メニューは同じで選択可能か不可能かのほうが
ユーザーに優しいとおもわれる。
この選択肢は下のほうにあるとか上のほうにあるとかコンポーネントごとにかわっていたら厄介だ。
0488デフォルトの名無しさん2007/12/01(土) 15:01:14

JFrameの上には、とりえあえずJPanel置くべきですか?
 
0489デフォルトの名無しさん2007/12/01(土) 15:04:11
packの仕組みをしっているのならおいたほうがいい
そうでなくともパネルに機能単位でのせていったほうが楽になるかな

グループレイアウトを使うのなら場合によってはなくてもいいかも
04904812007/12/01(土) 15:52:06
>>485
>>487
とりあえず全部登録しておくのが楽なようですね。
場合によってsetVisible、setEnabledで使い分けようと思います。

ご意見ありがとうございました。
0491デフォルトの名無しさん2007/12/01(土) 18:02:09
>>480
そうなんだ〜。まぁ、よく使うなら自分でAdapter作ればいいしね〜。
0492デフォルトの名無しさん2007/12/02(日) 18:44:49
LinuxのSwing上でトラックポイントのセンターボタンでスクロールしたときに
コンテキストメニューが開いちゃうんだけど、心当たりがある人いる?
JavaはSunの1.6.0_03
0493デフォルトの名無しさん2007/12/02(日) 19:12:28
これかな?
http://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: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で再現しました。

こうした挙動を防ぐような、何らかの対策をすることは可能でしょうか?
0495デフォルトの名無しさん2007/12/03(月) 00:20:49
>>494
MacOSX Leopardでやろうとしましたが再現しませんでした。
何よりファイルにDnDができない。

http://bugreport.sun.com/bugreport/
で報告してください。
報告時は具体的な再現方法と再現環境を書いておくのが吉です。
ありとあらゆる、というのはちょっと曖昧すぎます。
0496デフォルトの名無しさん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ができない。

たぶん、そういう挙動が正常なのだと思う。
0497デフォルトの名無しさん2007/12/04(火) 11:36:46
質問です。JButtonがアイコンであるGIFファイルの縦横サイズより結構大きくなってしまうのですが、コンパクトにする方法は無いでしょうか?
0498デフォルトの名無しさん2007/12/04(火) 12:06:32
>>497
JButtonのjavadocを隅から隅まで読んで
しかるのちにボーダーのマージンを設定したらいいよ
0499デフォルトの名無しさん2007/12/05(水) 14:21:41
>>498
497です。できました。ありがとうございます。
0500デフォルトの名無しさん2007/12/06(木) 02:03:22

JFrameでgetContentPane()をしなくてもよくなったは、いつからですか?
自動的に転送されるようになったってのを読んだのですが。
 
0501デフォルトの名無しさん2007/12/06(木) 02:06:17
5.0
0502デフォルトの名無しさん2007/12/06(木) 02:10:45
即レスthx
0503デフォルトの名無しさん2007/12/07(金) 22:41:46
シューティングを作りたいと思ってます
メイン画面とスコア画面があって、
それぞれJPanelを継承したクラスを作ってMainPanel,SubPanelと作ろうと思ってるんですが、
この方法は値の受け渡しが面倒くさくなったり、重くなったりしますか?
普通はひとつのゲームは大体1パネルですかね?
0504デフォルトの名無しさん2007/12/07(金) 22:43:16
普通はゲームにSwingなんて使わなくないか?
ましてシューティングで・・・
0505デフォルトの名無しさん2007/12/07(金) 22:45:12
Javaの勉強もかねて作ってます
最近はSwingもだいぶ早くなったと聞いたんですが...
0506デフォルトの名無しさん2007/12/07(金) 22:51:48
ゲームなら、Frameに直接描けばいいと思う。
BufferStrategyを使うのも良し。
0507デフォルトの名無しさん2007/12/07(金) 22:52:23
400x300で24fpsくらいで試してみるといいよ。
Swingはシングルスレッドだから、パッシブ連打でも問題ないはず
0508デフォルトの名無しさん2007/12/07(金) 23:00:08
パッシブ連打とは?
05095032007/12/07(金) 23:01:39
Frameに直接書くってことはpaintComponentメソッド内に
メイン画面用とスコア画面用の描画処理が混在してるってことですよね?
そうすると片方の画面の背景だけ変更するなどの処理とかがややこしくはならないですか?
パネルで分けるとコードがすっきりする気がするんですが
0510デフォルトの名無しさん2007/12/07(金) 23:05:41
パッシブ・レンダリング=描画イベントによる受動的なレンダリング(repaint())
アクティブ・レンダリング=自発的に描画を実行するレンダリング(Toolkit.sync(), BufferedStrategy)
0511デフォルトの名無しさん2007/12/08(土) 00:30:40
>>503
つまりWindowシステム普及前のゲームプログラミングが難しかったと思ってる?
んなことないよ

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

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

あとpaintComponentではゲームのレンダリングの処理はいれないことね
0512デフォルトの名無しさん2007/12/08(土) 00:31:36
さらに付け加えるとパッシブレンダリングはいわゆるトリプルバッファを使わないといけないから注意ね
ダブルバッファじゃダメ
05135032007/12/08(土) 00:51:35
全体的な流れとしては、レンダリング(描画?)は各オブジェクト(敵、弾)のクラスのdrawメソッド(メソッド名は自由?)などで行い、
paintComponentはそれを呼び出すだけ。で、必要に応じてrepaint()を行うとpaintComponentが再描画されるという感じでしょうか?
0514デフォルトの名無しさん2007/12/08(土) 00:59:58
paintのタイミングは自前のrepaintだけじゃないからそれはやっちゃだめ
ウインドウの重なり具合とかOSが画面をいきなりリフレッシュしたりとかあるから

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

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

バックバッファへのレンダリングとフロントへのレンダリングが重なる場合もあるという考え方ね
05155032007/12/08(土) 01:09:30
ダブルバッファがいまいち理解できてないのでもうちょっと勉強してみます。
答えてくださった方どうもありがとうございました
0516デフォルトの名無しさん2007/12/08(土) 01:16:16
本当はJavaでゲーム作成というスレがあったんだけど最近おちちゃったんだよな
ゲーム製作板とかいろいろと斜め読みしてみるといいかも
0517デフォルトの名無しさん2007/12/08(土) 03:09:19
Javaでゲームってのはなかなか前衛的でおもしろいと思うんだが、
如何せんパフォーマンスが悪いのが致命的なんだよな。
いくら努力しても、一定以上FPSが上がらんとなるとどうしても敬遠したくなる。
0518デフォルトの名無しさん2007/12/08(土) 06:27:05
勉強として作るプログラムも題材の選び方はかなり重要だよ。
努力するほど深まって発展していく題材と、
底の浅いところですぐに打ち止めになるのがある。
0519デフォルトの名無しさん2007/12/08(土) 08:27:04
勉強の段階なら、何を作っても勉強になる。
0520デフォルトの名無しさん2007/12/08(土) 08:28:32
Javaでエロゲぐらいなら作れそうじゃね?
0521デフォルトの名無しさん2007/12/08(土) 09:47:04
アクションだろうがパズルだろうがなんでもできるんじゃないの。
ブロック崩しやテトリスくらいなら楽勝。
ゲーム専用機であるようなハデなアクションゲームを作りたいならお門違い。
0522デフォルトの名無しさん2007/12/08(土) 09:49:46
あと速く動かしたいなら画面小さくすればいいんだよ。256 * 192とか。w
昔のアーケードゲームの解像度はせいぜいその程度だったしさ。
0523デフォルトの名無しさん2007/12/08(土) 11:36:49
シューティングやアクションはともかくとして
リアルタイムシミュレーションとか向いてると思うけどな>java
スレッド周りとか楽々作れるし
0524デフォルトの名無しさん2007/12/08(土) 12:55:52
ゲ制作板で話せ
0525デフォルトの名無しさん2007/12/08(土) 14:32:05
>>517
まじていってるの?
0526デフォルトの名無しさん2007/12/08(土) 14:33:14
リアルタイムのアクションものも余裕で出来るよ
IntelCore2/2GHzでJavaで動かすとCネイティブだと1.6GHzくらいの速度になるけど
それが問題になることはまずあるまい
0527デフォルトの名無しさん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();
 }
0528デフォルトの名無しさん2007/12/10(月) 01:23:46
↑の様な構成で作りたいんですけど、うまくいきません。
ようするにSubPanelのインスタンスからMainPanelのインスタンスへ
アクセスするにはどうすればよいのでしょうか?
MainFrameでMainPanelのインスタンスをpublicでstaticにしたりいろいろやったのですが、
うまくいかないのでどなたか教えてください。
0529デフォルトの名無しさん2007/12/10(月) 01:47:12
>>528
SubPanelにボタンのaddActionListenerを委譲して
MainFrameからやりたいことを教えてあげればいいんじゃないの?
05305282007/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);}}
0531デフォルトの名無しさん2007/12/10(月) 10:02:09
MainPanelはPaintComponentをオーバーライドしないといけない気がする…
05325312007/12/10(月) 10:06:52
やっぱ要らないか
0533デフォルトの名無しさん2007/12/10(月) 10:45:47
>>530
設計方針とか変更不可のクラス等の制約条件とかが分からないけど
手っ取り早くやるならMainPanelとSubPanelの親子関係がそのままなのを前提に
b.addActionListener((MainPanel)getParent());
0534デフォルトの名無しさん2007/12/10(月) 11:19:28
俺なら
SubPanel#addColorChangeActionListener(listener){b.addActionListener(listener);}
を作る方を選ぶかな。
0535デフォルトの名無しさん2007/12/10(月) 12:32:25
これってSwingの話ですらなくて言語の基本の話だろ?
なんでstaticがでてきたりするんだ?
まずは言語の勉強からやりなおしたほうがいいんじゃないかい?
0536デフォルトの名無しさん2007/12/10(月) 12:51:30
たぶんMainFrameやMainPanelのインスタンスをSubPanelで参照する方法が分からなくて、
b.addActionListener(frame.mp);}}ってやってもコンパイルできなくて、
b.addActionListener(MainFrame.mp);みたいにできるようにクラス変数にしちゃったんだと推測。
プログラムの設計と実装の仕方を良い参考書や良いソースを見ながら勉強した方がいいと思う。
05375302007/12/11(火) 00:36:38
>>536
正にその通りです
>>533
getParent()なんてのがあったんですね 

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

まず言語の基本の勉強からしたほうがいい
近道しようとしても無駄だと思う
ここ本当に基本中の基本だから
05395032007/12/11(火) 17:52:44
>>538
すいませんご指摘ありがとうございます
SubPanelのコンストラクタでgetParent()しても、その時点ではMainPanelの子にはなってないということですよね
>独立性が失われるのにListenner使ったりとかありえん
これはimplements ActionListenerのことですかね アダプタクラスというのを使ったほうがいいということでしょうか

一応基礎はやったつもりでいたんですが、今回GUI使うことでぜんぜん理解できていないことに気づいてそれだけでもよかったです
もう来ません ありがとうございました。
0540デフォルトの名無しさん2007/12/11(火) 18:53:25
もうきませんって捨て台詞・・・はもうきこえてないか

インスタンスの参照を渡せばいいだけでしょ?
それができないってことはJavaの勉強1週間程度しかしてないということかな?
05415302007/12/12(水) 00:36:46
ながながとスレ違いすいません
勉強はJavaの入門書を一通り読んだんですが(スレッドくらいまで。デザインパターンは全く)、ちゃんとは理解できてなかったようです。
参照を渡すといいましても>>530のコードだと難しくないですか?
コンストラクタでいろいろやってるのも悪いんですかね
本当にこれで最後にしますんで、
MainPanelとSubPanelが連動していて(Subのボタンを押すとMainの内容を変更したりする)場合、
どんなコードになりますか?親切な方おねがいします
0542デフォルトの名無しさん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が先に消えたりする可能性があるとかだとリスナーいじってどうのこうのが必要になるけど
たぶんあなたがやりたいのはこれで十分かと。
0543デフォルトの名無しさん2007/12/12(水) 02:44:04
そもそも設計の段階で間違えてるんじゃないか?
0544デフォルトの名無しさん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);
 }
}
0545デフォルトの名無しさん2007/12/12(水) 13:06:00
>>544
アクションイベントだけならそうだろうけど
GUIってそれ以外のプロパティの変更とかふつうはやるものだし
0546デフォルトの名無しさん2007/12/12(水) 13:35:41
main panelをある構造に従って作るようにして、sub panelでその構造を変化させたらいいんじゃないの?
0547デフォルトの名無しさん2007/12/12(水) 13:44:05
そこまでの設計が出来ていればこんな質問はせんだろうと。
ActionListennerをMainPanelで実装している時点で複数のイベント対応がおわっとるわけで。
0548デフォルトの名無しさん2007/12/12(水) 15:31:50
>312でも書かれてるけど、Synthって流行らないのかなー。
スキンがXMLファイルと画像で済むならたくさん配布されてそうなのに、
どうして一個も見つからないんだろう・・・
0549デフォルトの名無しさん2007/12/12(水) 15:37:42
まず最初の一個を>>548が作って布教
0550デフォルトの名無しさん2007/12/12(水) 15:41:15
つ Nimbus
0551デフォルトの名無しさん2007/12/12(水) 15:48:27
よーし作っちゃうぞー

Synth 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
NetBeansで気分転換にLAFかえるとかは5.0のころ流行ったなぁ

参考:
ttp://d.hatena.ne.jp/nowokay/20060223#1140636171

Substanceは6.0では動かないくさいけど
0554デフォルトの名無しさん2007/12/12(水) 17:10:21
ウィンドウをキャプチャし、JPGで保存するようなプログラムを作成中です。
手法、使用APIなどご教授お願いします。
0555デフォルトの名無しさん2007/12/12(水) 17:18:24
>>554
なぜここで聞く?質問スレ行った方がいいんじゃないか?
0556デフォルトの名無しさん2007/12/12(水) 17:37:28
キャプチャに関してはRobotがAWTパッケージに入ってるからかな?
って感じでもないか。
知ってたらBufferedImageを保存するには?って聞くだろうし、それはスレ違いか。
0557デフォルトの名無しさん2007/12/12(水) 17:44:29
>>553
そういう感じのLAFがカッコイイと思う人もいるんだろうけど・・・
ブログのスキンとは求められてるものが違うんでね?
0558デフォルトの名無しさん2007/12/12(水) 18:39:42
Nimbusってjava LAFの置き換えなんだろうか?
それとも共存するんだろうか?
NimbusってSynthで全部自前でやってるせいか少し重いからイマイチなんだが。
0559デフォルトの名無しさん2007/12/12(水) 19:16:20
重いかな?
というか、エンジン部分が決まっているので
むしろこれからのチューニングに期待できるんだけど。

Nimbusが出てきてからSubstanceへの興味はだいぶ薄れちゃったな・・・
V2Cは、6u10に入ってるNimbusで綺麗に動くので最近はNimbusで見てる。
素のMetalやOceanよりしっくりきてる。
普通に見れて、プラットフォーム共通の見栄えってのは重要でしょう。
Metalは、お世辞にも見栄えがいいとはいえなかったから・・・・(派手だけど)
0560デフォルトの名無しさん2007/12/12(水) 19:25:21
見た目のこと言い出すと宗教戦争になりそう。
0561デフォルトの名無しさん2007/12/12(水) 19:26:24
SynthってXMLと画像をjarに詰めて配布するの?
jarをインデックス付き無圧縮で配布すれば多少早いかもね。
もしくはSynthをコンパイル可能にするとか。
0562デフォルトの名無しさん2007/12/12(水) 19:26:41
ぶっちゃけSystemLAFがデフォになってくれるのが一番いいかも
NetBeansもそれでシェアを一気に伸ばしたし
0563デフォルトの名無しさん2007/12/12(水) 20:07:13
見た目なんて飾りです。えらい人にはそれが分からんのです。

ていうかクロスプラットフォームの実現性としてはjavaLAFがデフォの方が良いけど、
ユーザビリティが落ちるので天秤ってところか・・・。
0564デフォルトの名無しさん2007/12/12(水) 20:40:36
LAFを変更したらレイアウトが微妙に崩れてデザインが台無しとかけっこうある。
部品をカスタマイズしてたりするとなおさら。
で、いくつもLAFがインストールされていても、事実上使えないものが出てくる。
そんなLaFしか実現できないのなら、LAF一つで統一してほしいところだな。
0565デフォルトの名無しさん2007/12/12(水) 21:25:54
>>564
推奨サイズを使って設定してくれるならずれることはほとんどないはずだけど?
今まで大量にSwingアプリ作ったがLAFかえて問題が出る場合ってのはほとんどないよ。
むしろWinネイティブより楽。
0566デフォルトの名無しさん2007/12/12(水) 21:35:29
>>565
推奨サイズって何?
カスタムコンポーネントなしのアプリしか作ったことないんじゃないの?
0567デフォルトの名無しさん2007/12/12(水) 21:45:28
本気で言ってんのかコイツ
0568デフォルトの名無しさん2007/12/12(水) 22:04:47
Swing使いが推奨サイズを知らないとは思えんが・・・・
0569デフォルトの名無しさん2007/12/12(水) 22:18:38
きっと日本語ではなく preferredSize といえば通じるよっ。
0570デフォルトの名無しさん2007/12/12(水) 22:47:58
生憎日本の会社で働いたことがないので。日本語のAPI docもたまに
見るけど気付かなかったよ。どこかに便利なサイズの表でもあるのかと思った。
0571デフォルトの名無しさん2007/12/12(水) 23:23:41
今日もJava釣り君元気だな
0572デフォルトの名無しさん2007/12/13(木) 00:25:17
>>570
つまり、preferredSizeを和訳できなかったわけだな。中国の会社の人?
0573デフォルトの名無しさん2007/12/13(木) 02:30:49
インドだろう常考
05745642007/12/13(木) 02:58:31
>>564
もちろんそうしてるよ。JDK1.0のころからある普通のレイアウトマネージャを組み合わせてレイアウトしてる。
そりゃテキストエディタのようにツールバーとメニュー、オプション選択とOK/NOボタンしかないとか、
その程度なら問題ないだろうけど、複雑になるとたいがい問題でると思うけどな。
ただしまったく使えなくなるほど、ひどいことになるのは少ない。
レイアウトデザインには急所があってさ、絶対はずせないところってのがいくつかある。
そこがずれると一気にしまりがなくなってださくなるとこが。
そういうとこが狂うと、やめてよっていいたくなる。

LAFに応じて位置とサイズを調整するようなコードを書くとか、無難なデザインを適用する事はできると思う。
でもそういうのってなんか違うと思うんだよね。
0575デフォルトの名無しさん2007/12/13(木) 03:27:33
ボケたか自演か?
05765642007/12/13(木) 03:52:46
>>575
>>565-573までは俺じゃないから。
罵りあって遊びたいならマ板にでも逝けよ。
0577デフォルトの名無しさん2007/12/13(木) 08:46:37
推奨サイズを知らないバカと自分のレスにレス付けてるボケがいるスレはここですか?
0578デフォルトの名無しさん2007/12/13(木) 11:04:12
レイアウトが崩れる例ってのを、出してみてよ
簡単なのでいいから
0579デフォルトの名無しさん2007/12/13(木) 11:45:14
複雑になると問題が出るっていってるのに簡単なのでいいからっていうツッコミ、気の毒だな。
0580デフォルトの名無しさん2007/12/13(木) 11:54:56
>>578
21 * 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
>>578
もう一つ例をあげると、Motifのメニュー操作法と、Windows,Metalの操作法は異なる。
これは使ってみればすぐに分かると思うけど。

それから、JSliderBarの操作法ね。Metalと残りのWindows,Motifでは振る舞いが異なる。
これもわかりにくいかもしれないけど使ってみれば分かると思う。

LaFは見かけ上の外観を変更するだけのはずなのに、操作体系にまで干渉したらまずいと思うんだけど。
■ このスレッドは過去ログ倉庫に格納されています