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
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は見かけ上の外観を変更するだけのはずなのに、操作体系にまで干渉したらまずいと思うんだけど。
0582デフォルトの名無しさん
2007/12/13(木) 12:57:220583デフォルトの名無しさん
2007/12/13(木) 13:05:42LaFはLook & Feelの略だよ。外見を変更するだけじゃない。
0584デフォルトの名無しさん
2007/12/13(木) 13:14:14すまん、やってみたが、レイアウトは崩れないっぽいんだが…
なんか俺間違ってるのかも試練から
どこがどう崩れたのか教えて欲しい
0585デフォルトの名無しさん
2007/12/13(木) 13:31:58単純思考のくせに傲慢そうなやつだな。w
feelは手触りだから、操作体系が異なるのは仕様のうちだとでもいいたいのか?w
しかしそれでは良くない場合のほうが多いんだよな。
アプリに無意味な混乱を与えるくらいならLAFをユーザに選択させないほうが俺は良いと思うけどね。
ボタンが数個しかついてないようなアプリならまーすきにすればだけど。
0586デフォルトの名無しさん
2007/12/13(木) 13:36:10画像はいらないから、コードをコピペしてみて。
環境の違いもあるだろうし。
0587デフォルトの名無しさん
2007/12/13(木) 13:37:380588デフォルトの名無しさん
2007/12/13(木) 13:48:370589デフォルトの名無しさん
2007/12/13(木) 14:12:06public class Test extends JFrame {
static public void main(String args[]){
new Test().createUI("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
private void createUI(String laf){
try {
UIManager.setLookAndFeel(laf);
} catch (Exception e) {
}
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
JPanel p = new JPanel(gbl);
c.weightx = c.weighty = 1;
JTextField t0 = new JTextField(10);
c.gridx = c.gridy = 0;
gbl.setConstraints(t0, c);
p.add(t0);
JTextField t1 = new JTextField(10);
c.gridy = 1;
gbl.setConstraints(t1, c);
p.add(t1);
0590デフォルトの名無しさん
2007/12/13(木) 14:12:36b.setPreferredSize(new Dimension(21,21));
b.setMargin(new Insets(0,0,0,0));
b.setFocusPainted(false);
b.setContentAreaFilled(false);
b.setBorderPainted(false);
b.setRolloverIcon(new ImageIcon("./over.gif"));
b.setPressedIcon(new ImageIcon("./pressed.gif"));
c.gridx = 1;
gbl.setConstraints(b, c);
p.add(b);
JTextField t2 = new JTextField(10);
c.gridx = 0;
c.gridy = 2;
gbl.setConstraints(t2, c);
p.add(t2);
JTextField t3 = new JTextField(10);
c.gridy = 3;
gbl.setConstraints(t3, c);
p.add(t3);
getContentPane().add(p);
this.pack();
this.setVisible(true);
}
}
0591デフォルトの名無しさん
2007/12/13(木) 14:42:18さんきゅー。やってみた。
ただし画像を取得する部分は、getResource()を使う方法に修正させてもらった。
こっちの環境でMotifを指定してみたら、画像ボタンは正常表示されなかった。
new Test().createUI("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
具体的には、3 * 3くらいのサイズで表示されてしまう。
MetalやWindowsのLAFでは、このような状態にはならない。
ところであなたの環境はなに?
3*3の状態で表示されたときは、当たり前ながらレイアウトは崩れない。
ボタンサイズがJTextFieldのheightより小さいから。
で、こっちの環境で、Motifでもボタンを正しく表示させようとしたときは、preferredSizeを指定しなければ良いらしい。
しかしボタンは表示されるが、デフォルトのボタンサイズが27*26くらいに設定されてしまう。
するとJTextFieldのheightを越えてしまうため、ボタンのある行は上下に隙間が空いてしまう。
0592デフォルトの名無しさん
2007/12/13(木) 14:56:010593デフォルトの名無しさん
2007/12/13(木) 15:04:420594デフォルトの名無しさん
2007/12/13(木) 16:03:04でどうよ?
0595デフォルトの名無しさん
2007/12/13(木) 16:32:49その手があったかw
0596デフォルトの名無しさん
2007/12/13(木) 17:18:470597デフォルトの名無しさん
2007/12/13(木) 19:13:03LAF別に癖があって共通の振る舞いをしないのはかわらない。
0598デフォルトの名無しさん
2007/12/13(木) 19:50:38レイアウト云々は関係ないと思うのだが
0599デフォルトの名無しさん
2007/12/13(木) 20:05:15普通にテキスト指定してJButton作っただけじゃ、OKとキャンセルボタンのサイズが違いすぎるから
キャンセルボタンにあわせるようにしてるんだけど、Motifはおかしいよ・・・
0600デフォルトの名無しさん
2007/12/13(木) 20:58:530601デフォルトの名無しさん
2007/12/13(木) 21:08:140602デフォルトの名無しさん
2007/12/13(木) 21:25:37そんな中途半端なのいれなきゃいいのに。
0603デフォルトの名無しさん
2007/12/13(木) 21:28:15Win, Mac以外はLAFは何でもいいと思ってるのでお勧め教えて。
0604デフォルトの名無しさん
2007/12/13(木) 21:35:080605デフォルトの名無しさん
2007/12/13(木) 21:36:120606デフォルトの名無しさん
2007/12/13(木) 21:39:41ことLAFに関しては>>597でFAだと思うが。
切り替えて不都合がでるLAFがある時点で不完全なシステムだな。
0607デフォルトの名無しさん
2007/12/13(木) 21:40:05APIのバランスがいいし、今更.NET覚えるのはしんどいって理由で。
*nixやmacの挙動を調べるにはどうしたらいいんだろう。
LinuxならcoLinuxとか?
0608デフォルトの名無しさん
2007/12/13(木) 21:45:530609デフォルトの名無しさん
2007/12/13(木) 21:46:510610デフォルトの名無しさん
2007/12/13(木) 21:50:450611デフォルトの名無しさん
2007/12/13(木) 21:54:180612デフォルトの名無しさん
2007/12/13(木) 22:01:26JavaクライアントでもMacは未対応ってことにしとけばいいか
0613デフォルトの名無しさん
2007/12/13(木) 22:22:42特に文字列処理。これはjavaに限った事じゃないけど。
0614デフォルトの名無しさん
2007/12/13(木) 22:34:260615デフォルトの名無しさん
2007/12/13(木) 22:45:060616デフォルトの名無しさん
2007/12/13(木) 23:38:24趣味ならそもそも動作保証なんてしないから問題ないだろ…
0617デフォルトの名無しさん
2007/12/14(金) 02:37:150618デフォルトの名無しさん
2007/12/14(金) 02:41:590619デフォルトの名無しさん
2007/12/14(金) 15:36:51キーバインディングがOS毎に違ったりする場合、
LAF変更毎にjavax.swing.InputMapとかも変更すべきでしょうか?
javax.swing.plaf配下のUI委譲を見ても、そんなコードは見あたりませんが。
0620デフォルトの名無しさん
2007/12/14(金) 18:21:15Unicode正規化まわりじゃないの?
0621デフォルトの名無しさん
2007/12/15(土) 12:54:25これからいくらでも増えてくるだろうし
0622デフォルトの名無しさん
2007/12/15(土) 16:35:41(Ctrl+Shift+zだったかな)ことを最近知って、
さらに「Motifだとマウスホイールも効かないよな」っていうのを見て、
ふと疑問に思った。
マルチプラットフォーム対応のソフト作ってる場合って、
やっぱり、そんなことも考慮する必要があるんだろうな。
LAF毎に固有の修正を施すなんてかなり馬鹿らしい話っていうのは同感なんですが。
ふだん当たり前にできてることができないって結構ストレスになるから。
0623デフォルトの名無しさん
2007/12/15(土) 16:44:56切り替わるようにするくらいは必須だろうねぇ。
うっかりMac環境でメニューバーにまでショートカット付けて怒られた俺。
(個別のメニューには付けてもいいが、根っこのバー上には付かないのがMac)
0624デフォルトの名無しさん
2007/12/15(土) 17:27:21>切り替わるようにするくらいは必須だろうねぇ。
やっぱり、サーバーサイドより面倒ですね。
>うっかりMac環境でメニューバーにまでショートカット付けて怒られた俺。
怒られるほどのことではない。
というか、個人的には、そのほうが便利になってる気さえしますが。
余計な文字列がデザイン的にウザイってことなんですかね。
よくそういうどーでもいいディテールに拘る人いますし。
特に官公庁に。
>(個別のメニューには付けてもいいが、根っこのバー上には付かないのがMac)
へー。Macさわったことないから、全然知らなかった。
エミュレータでも買って、ちょっと弄ってみようかな。
0625デフォルトの名無しさん
2007/12/15(土) 17:45:03Winでは右クリでポップアップメニューが出る操作がよくあるけど、あれMacではどうなるの?
0626デフォルトの名無しさん
2007/12/15(土) 17:57:07ポップアップメニュー出す操作か、だけなら、
java.awt.event.MouseEvent#isPopupTrigger() みればわかるはず。
0627デフォルトの名無しさん
2007/12/15(土) 17:58:320628デフォルトの名無しさん
2007/12/15(土) 18:14:39今のmacはマウスホイール付いてた気がする。
小さな玉が・・・。
0629デフォルトの名無しさん
2007/12/15(土) 18:22:212ボタンマウスを繋いだ場合は普通に右クリックできる。
Mighty Mouseも見た目はシングルだが、右よりの部分を押すと副ボタンと
して扱える(デフォルトだと両方主ボタンになってるのはAppleの意地か?)
0630デフォルトの名無しさん
2007/12/15(土) 18:24:04だな。指2本でパッド上を滑らせるとスクロールとかも面白い。
0631デフォルトの名無しさん
2007/12/15(土) 18:28:50まぁどうでもいいか。
0632デフォルトの名無しさん
2007/12/15(土) 18:41:56結局どこまでサポート範囲にするかってだけだとな気がする.
ぶっちゃけMotifとかは切り捨てても誰も困らないと思うぞ
0633デフォルトの名無しさん
2007/12/15(土) 18:45:57ちょっとした動作変更のHackのサンプルコードとかで、
よくMetalほげUI(MetalComboBoxUIとか)を継承したクラスを作って、
JComponent#setUI(作成したMetalほげUIのサブクラス)とかやってますよね。
ああいうのって、その後Synthでスキンを変更しようと思った場合、
動作するんですか?
Synth導入時はjavax.swing.plaf.synth配下のクラスを
使用しなければならないのかなと思っていて、
Synthパッケージのクラスの継承関係がBasicComponentUIのサブクラスだから、
MetalUIで作ったクラスは使用できないのかと漠然と考えているんですが。
0634デフォルトの名無しさん
2007/12/15(土) 18:52:14同感。Motifは単にSunの意地。
クライアントLinuxも趣味にはいいけど、
個人的にはサポートしたくない。
でも、数ヶ月前に21:00台のNHKのニュースで出てた、
どこか忘れたけど、ITじゃない大手企業の普通の職場で
SunのワークステーションでXが写ってた。
マジで使ってんの?って思ったけど。
0635デフォルトの名無しさん
2007/12/15(土) 19:19:05Winでみるとダサイ・・・ってまったく同じMotifというわけでもなくMotif風というべきか。
0636デフォルトの名無しさん
2007/12/15(土) 19:25:33Macでは困ったことになる・・・のだろうな・・・
0637デフォルトの名無しさん
2007/12/15(土) 19:28:20SolarisのMotifは、Sunのハードの色のグレーと紫と一緒になって、
初めて調和する感じがする。
だから、他のハードで単体でMotifのLAFだけを見るとかっこ悪さしか感じない。
0638デフォルトの名無しさん
2007/12/15(土) 19:43:523Dソフトも今はなき?シリコングラフィックのあの癖のある筐体でみるのと、
DOS/Vの筐体でみるのではやっぱ違ってみえるよねw
0639デフォルトの名無しさん
2007/12/15(土) 19:44:180640デフォルトの名無しさん
2007/12/15(土) 19:44:55■ このスレッドは過去ログ倉庫に格納されています