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
556 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:37:28 ] キャプチャに関してはRobotがAWTパッケージに入ってるからかな? って感じでもないか。 知ってたらBufferedImageを保存するには?って聞くだろうし、それはスレ違いか。
557 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:44:29 ] >>553 そういう感じのLAFがカッコイイと思う人もいるんだろうけど・・・ ブログのスキンとは求められてるものが違うんでね?
558 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 18:39:42 ] Nimbusってjava LAFの置き換えなんだろうか? それとも共存するんだろうか? NimbusってSynthで全部自前でやってるせいか少し重いからイマイチなんだが。
559 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 19:16:20 ] 重いかな? というか、エンジン部分が決まっているので むしろこれからのチューニングに期待できるんだけど。 Nimbusが出てきてからSubstanceへの興味はだいぶ薄れちゃったな・・・ V2Cは、6u10に入ってるNimbusで綺麗に動くので最近はNimbusで見てる。 素のMetalやOceanよりしっくりきてる。 普通に見れて、プラットフォーム共通の見栄えってのは重要でしょう。 Metalは、お世辞にも見栄えがいいとはいえなかったから・・・・(派手だけど)
560 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 19:25:21 ] 見た目のこと言い出すと宗教戦争になりそう。
561 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 19:26:24 ] SynthってXMLと画像をjarに詰めて配布するの? jarをインデックス付き無圧縮で配布すれば多少早いかもね。 もしくはSynthをコンパイル可能にするとか。
562 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 19:26:41 ] ぶっちゃけSystemLAFがデフォになってくれるのが一番いいかも NetBeansもそれでシェアを一気に伸ばしたし
563 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 20:07:13 ] 見た目なんて飾りです。えらい人にはそれが分からんのです。 ていうかクロスプラットフォームの実現性としてはjavaLAFがデフォの方が良いけど、 ユーザビリティが落ちるので天秤ってところか・・・。
564 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 20:40:36 ] LAFを変更したらレイアウトが微妙に崩れてデザインが台無しとかけっこうある。 部品をカスタマイズしてたりするとなおさら。 で、いくつもLAFがインストールされていても、事実上使えないものが出てくる。 そんなLaFしか実現できないのなら、LAF一つで統一してほしいところだな。
565 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 21:25:54 ] >>564 推奨サイズを使って設定してくれるならずれることはほとんどないはずだけど? 今まで大量にSwingアプリ作ったがLAFかえて問題が出る場合ってのはほとんどないよ。 むしろWinネイティブより楽。
566 名前:デフォルトの名無しさん [2007/12/12(水) 21:35:29 ] >>565 推奨サイズって何? カスタムコンポーネントなしのアプリしか作ったことないんじゃないの?
567 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 21:45:28 ] 本気で言ってんのかコイツ
568 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 22:04:47 ] Swing使いが推奨サイズを知らないとは思えんが・・・・
569 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 22:18:38 ] きっと日本語ではなく preferredSize といえば通じるよっ。
570 名前:デフォルトの名無しさん [2007/12/12(水) 22:47:58 ] 生憎日本の会社で働いたことがないので。日本語のAPI docもたまに 見るけど気付かなかったよ。どこかに便利なサイズの表でもあるのかと思った。
571 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:23:41 ] 今日もJava釣り君元気だな
572 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 00:25:17 ] >>570 つまり、preferredSizeを和訳できなかったわけだな。中国の会社の人?
573 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 02:30:49 ] インドだろう常考
574 名前:564 mailto:sage [2007/12/13(木) 02:58:31 ] >>564 もちろんそうしてるよ。JDK1.0のころからある普通のレイアウトマネージャを組み合わせてレイアウトしてる。 そりゃテキストエディタのようにツールバーとメニュー、オプション選択とOK/NOボタンしかないとか、 その程度なら問題ないだろうけど、複雑になるとたいがい問題でると思うけどな。 ただしまったく使えなくなるほど、ひどいことになるのは少ない。 レイアウトデザインには急所があってさ、絶対はずせないところってのがいくつかある。 そこがずれると一気にしまりがなくなってださくなるとこが。 そういうとこが狂うと、やめてよっていいたくなる。 LAFに応じて位置とサイズを調整するようなコードを書くとか、無難なデザインを適用する事はできると思う。 でもそういうのってなんか違うと思うんだよね。
575 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 03:27:33 ] ボケたか自演か?
576 名前:564 mailto:sage [2007/12/13(木) 03:52:46 ] >>575 >>565-573 までは俺じゃないから。 罵りあって遊びたいならマ板にでも逝けよ。
577 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 08:46:37 ] 推奨サイズを知らないバカと自分のレスにレス付けてるボケがいるスレはここですか?
578 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 11:04:12 ] レイアウトが崩れる例ってのを、出してみてよ 簡単なのでいいから
579 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 11:45:14 ] 複雑になると問題が出るっていってるのに簡単なのでいいからっていうツッコミ、気の毒だな。
580 名前:デフォルトの名無しさん mailto:sage [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を切り替えると振る舞いが違うのは困る。
581 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 12:04:33 ] >>578 もう一つ例をあげると、Motifのメニュー操作法と、Windows,Metalの操作法は異なる。 これは使ってみればすぐに分かると思うけど。 それから、JSliderBarの操作法ね。Metalと残りのWindows,Motifでは振る舞いが異なる。 これもわかりにくいかもしれないけど使ってみれば分かると思う。 LaFは見かけ上の外観を変更するだけのはずなのに、操作体系にまで干渉したらまずいと思うんだけど。
582 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 12:57:22 ] ルック&フィールのフィールって何か分かってるか?
583 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 13:05:42 ] >>581 LaFはLook & Feelの略だよ。外見を変更するだけじゃない。
584 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 13:14:14 ] >>580 すまん、やってみたが、レイアウトは崩れないっぽいんだが… なんか俺間違ってるのかも試練から どこがどう崩れたのか教えて欲しい
585 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 13:31:58 ] >>582 単純思考のくせに傲慢そうなやつだな。w feelは手触りだから、操作体系が異なるのは仕様のうちだとでもいいたいのか?w しかしそれでは良くない場合のほうが多いんだよな。 アプリに無意味な混乱を与えるくらいならLAFをユーザに選択させないほうが俺は良いと思うけどね。 ボタンが数個しかついてないようなアプリならまーすきにすればだけど。
586 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 13:36:10 ] >>584 画像はいらないから、コードをコピペしてみて。 環境の違いもあるだろうし。
587 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 13:37:38 ] コードつーかソースね
588 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 13:48:37 ] Look and Feelのfeelには気分や雰囲気の意味もあって、必ずしも操作法を指すともいえないけどな。
589 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 14:12:06 ] >>586 public 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);
590 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 14:12:36 ] JButton b = new JButton(new ImageIcon("./normal.gif")); b.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); } }
591 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 14:42:18 ] >>589-590 さんきゅー。やってみた。 ただし画像を取得する部分は、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を越えてしまうため、ボタンのある行は上下に隙間が空いてしまう。
592 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 14:56:01 ] あ、ちなみにこっちの環境はWin2KのJDK1.6.0_03
593 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 15:04:42 ] いつまで続くのこれ?
594 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:03:04 ] b.setBorder(null); でどうよ?
595 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:32:49 ] >>594 その手があったかw
596 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:18:47 ] ボタンに限ったことじゃないだろうに・・・
597 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:13:03 ] たまたまMotif用の回避策があっただけのことでしょ。w LAF別に癖があって共通の振る舞いをしないのはかわらない。
598 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:50:38 ] どう見てもコンポーネントの表示を制御し切れてないヘタレというだけで レイアウト云々は関係ないと思うのだが
599 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 20:05:15 ] JButtonとかはサイズが指定してあると、Metal→Motifに変えたときにほんと崩れるよね。 普通にテキスト指定してJButton作っただけじゃ、OKとキャンセルボタンのサイズが違いすぎるから キャンセルボタンにあわせるようにしてるんだけど、Motifはおかしいよ・・・
600 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 20:58:53 ] まだ続くの?
601 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:08:14 ] Swingの話題だから別にいつまでも続いてもいいだろ
602 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:25:37 ] そういやMotifだとマウスホイールも効かないよな。 そんな中途半端なのいれなきゃいいのに。
603 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:28:15 ] SystemLAFならLinuxとかでもWin並みのFeelが得られるの? Win, Mac以外はLAFは何でもいいと思ってるのでお勧め教えて。
604 名前:デフォルトの名無しさん [2007/12/13(木) 21:35:08 ] >>598 で結論出たじゃん。
605 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:36:12 ] Linux では gtk使えるなら gtkじゃね?
606 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:39:41 ] >>598 ことLAFに関しては>>597 でFAだと思うが。 切り替えて不都合がでるLAFがある時点で不完全なシステムだな。
607 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:40:05 ] 正直Javaアプリ作ってもWinでしか使わないんだよね。 APIのバランスがいいし、今更.NET覚えるのはしんどいって理由で。 *nixやmacの挙動を調べるにはどうしたらいいんだろう。 LinuxならcoLinuxとか?
608 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:45:53 ] それ用にマシン用意するか、もってる人にテストを頼む以外なんかある?
609 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:46:51 ] Macごときに会社が金出すわけ無いじゃん。jk。
610 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:50:45 ] アップルに俺様の会社がMacでも動くアプリを作ってやったから、テスト用にMacを献上したまえといってみるとか。
611 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:54:18 ] Macごときに金ださんという会社は、JavaだろうがMacで動かす必要はないってことじゃね?
612 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 22:01:26 ] Macごときで動作しないなんてレポートが来られても困るし、 JavaクライアントでもMacは未対応ってことにしとけばいいか
613 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 22:22:42 ] そこはアップルの実装の問題だが、どうにも屑すぎる。 特に文字列処理。これはjavaに限った事じゃないけど。
614 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 22:34:26 ] たとえば文字列処理でどんなことが起きるの?
615 名前:デフォルトの名無しさん [2007/12/13(木) 22:45:06 ] ワイド文字いい加減とか
616 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:38:24 ] 仕事なら必要な範囲のアーキテクチャだけ動作保証するだけだし 趣味ならそもそも動作保証なんてしないから問題ないだろ…
617 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 02:37:15 ] 趣味で作っても、友達がMac持ってることあるから問題あるだろ。
618 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 02:41:59 ] aho
619 名前:デフォルトの名無しさん [2007/12/14(金) 15:36:51 ] 例えば、undo,redo(WindowsだとCtrl+z,Ctrl+y)とかのデフォルトの キーバインディングがOS毎に違ったりする場合、 LAF変更毎にjavax.swing.InputMapとかも変更すべきでしょうか? javax.swing.plaf配下のUI委譲を見ても、そんなコードは見あたりませんが。
620 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 18:21:15 ] >>614 Unicode正規化まわりじゃないの?
621 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 12:54:25 ] LAF変えるたびに、それ固有の修正を施すなんてかなり馬鹿らしい話 これからいくらでも増えてくるだろうし
622 名前:デフォルトの名無しさん [2007/12/15(土) 16:35:41 ] MacのredoのショートカットキーがWindowsと異なる (Ctrl+Shift+zだったかな)ことを最近知って、 さらに「Motifだとマウスホイールも効かないよな」っていうのを見て、 ふと疑問に思った。 マルチプラットフォーム対応のソフト作ってる場合って、 やっぱり、そんなことも考慮する必要があるんだろうな。 LAF毎に固有の修正を施すなんてかなり馬鹿らしい話っていうのは同感なんですが。 ふだん当たり前にできてることができないって結構ストレスになるから。
623 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 16:44:56 ] キー設定とかは外部設定に追い出しておいてプラットフォームごとに 切り替わるようにするくらいは必須だろうねぇ。 うっかりMac環境でメニューバーにまでショートカット付けて怒られた俺。 (個別のメニューには付けてもいいが、根っこのバー上には付かないのがMac)
624 名前:デフォルトの名無しさん [2007/12/15(土) 17:27:21 ] >キー設定とかは外部設定に追い出しておいてプラットフォームごとに >切り替わるようにするくらいは必須だろうねぇ。 やっぱり、サーバーサイドより面倒ですね。 >うっかりMac環境でメニューバーにまでショートカット付けて怒られた俺。 怒られるほどのことではない。 というか、個人的には、そのほうが便利になってる気さえしますが。 余計な文字列がデザイン的にウザイってことなんですかね。 よくそういうどーでもいいディテールに拘る人いますし。 特に官公庁に。 >(個別のメニューには付けてもいいが、根っこのバー上には付かないのがMac) へー。Macさわったことないから、全然知らなかった。 エミュレータでも買って、ちょっと弄ってみようかな。
625 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:45:03 ] そういえばMacのマウスはシングルボタンが基本だよね。 Winでは右クリでポップアップメニューが出る操作がよくあるけど、あれMacではどうなるの?
626 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:57:07 ] ふるーい mac だと ctrl + クリックでやってた記憶が…… ポップアップメニュー出す操作か、だけなら、 java.awt.event.MouseEvent#isPopupTrigger() みればわかるはず。
627 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:58:32 ] 何も考えたくなかったらMetalで固定ってことかな。
628 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:14:39 ] macはボタン長押しでコンテキストメニューじゃなかった? 今のmacはマウスホイール付いてた気がする。 小さな玉が・・・。
629 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:22:21 ] シングルボタンの場合は、Ctrl押しながらクリック。 2ボタンマウスを繋いだ場合は普通に右クリックできる。 Mighty Mouseも見た目はシングルだが、右よりの部分を押すと副ボタンと して扱える(デフォルトだと両方主ボタンになってるのはAppleの意地か?)
630 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:24:04 ] ノート型のMacだと、指を2本パッドに置いてクリックすると右クリック相当 だな。指2本でパッド上を滑らせるとスクロールとかも面白い。
631 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:28:50 ] MacのOS9時代まで使ってたけど、ctrl + クリックだったよ〜 まぁどうでもいいか。
632 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:41:56 ] 理想的にはLaF毎に諸々切り替えるべきなんだけど… 結局どこまでサポート範囲にするかってだけだとな気がする. ぶっちゃけMotifとかは切り捨てても誰も困らないと思うぞ
633 名前:デフォルトの名無しさん [2007/12/15(土) 18:45:57 ] Synthについてなんですが、SwingのJComponentの派生クラスの ちょっとした動作変更のHackのサンプルコードとかで、 よくMetalほげUI(MetalComboBoxUIとか)を継承したクラスを作って、 JComponent#setUI(作成したMetalほげUIのサブクラス)とかやってますよね。 ああいうのって、その後Synthでスキンを変更しようと思った場合、 動作するんですか? Synth導入時はjavax.swing.plaf.synth配下のクラスを 使用しなければならないのかなと思っていて、 Synthパッケージのクラスの継承関係がBasicComponentUIのサブクラスだから、 MetalUIで作ったクラスは使用できないのかと漠然と考えているんですが。
634 名前:デフォルトの名無しさん [2007/12/15(土) 18:52:14 ] >ぶっちゃけMotifとかは切り捨てても誰も困らないと思うぞ 同感。Motifは単にSunの意地。 クライアントLinuxも趣味にはいいけど、 個人的にはサポートしたくない。 でも、数ヶ月前に21:00台のNHKのニュースで出てた、 どこか忘れたけど、ITじゃない大手企業の普通の職場で SunのワークステーションでXが写ってた。 マジで使ってんの?って思ったけど。
635 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:19:05 ] ソラリスのMotifはそれなりにさまになってる感じもあるけど Winでみるとダサイ・・・ってまったく同じMotifというわけでもなくMotif風というべきか。
636 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:25:33 ] MacでCtrl+クリックで右クリということは、WinでCtrl+左クリに機能を割り当てていると、 Macでは困ったことになる・・・のだろうな・・・
637 名前:デフォルトの名無しさん [2007/12/15(土) 19:28:20 ] 実機が手元にないから、あれだけど。 SolarisのMotifは、Sunのハードの色のグレーと紫と一緒になって、 初めて調和する感じがする。 だから、他のハードで単体でMotifのLAFだけを見るとかっこ悪さしか感じない。
638 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:43:52 ] LAFというか視覚デザイン系は深入りすると底なし沼だからなぁ・・・・ 3Dソフトも今はなき?シリコングラフィックのあの癖のある筐体でみるのと、 DOS/Vの筐体でみるのではやっぱ違ってみえるよねw
639 名前:デフォルトの名無しさん [2007/12/15(土) 19:44:18 ] いろいろ考えるとInputMapはFactoryクラスとかで一括管理すべきなんだろうなと思ってきた。
640 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:44:55 ] そういえばJTableはCtrl+左クリで複数選択機能があったはずだけど、Macだとどうなるんだっけ。
641 名前:デフォルトの名無しさん [2007/12/15(土) 19:49:16 ] >シリコングラフィックのあの癖のある筐体でみるのと、 >DOS/Vの筐体でみるのではやっぱ違ってみえるよねw それはありますねー。 Sunのマシンにsunの4つつながったロゴがないだけでも、 Motifは別物に見えそうだし。 データセンターでMacのハードやUIがあったりしたら、 違和感ありそうだし。。。
642 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 23:39:08 ] >>619 質問 ↓のコードでもmacとwindowsで兼用できなかったの?? KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
643 名前:デフォルトの名無しさん [2007/12/16(日) 02:36:30 ] 619です。 >質問 ↓のコードでもmacとwindowsで兼用できなかったの?? >KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()); Toolkit#getMenuShortcutKeyMask()メソッドは初めて知りました。 ありがとうございます。 興味本位で聞いただけです。 実際にやってみていない。というかmac環境がないので。試せません。。 tinyurl.com/3cbuj2 のあたりをざっとみると、 Ctrl+Cとかコピペ、Ctrl+F(検索),Ctrl+S|Oあたりは同じようですが。 Ctrl+Y(やり直し(Windows))の記載が見あたりません。 ちょっと前に、どこかでWindowsのCtrl+YはmacでCtrl+Shift+Zと見たんですが、 記憶違いかガセだったのでしょうか。 でも、macにはUndoの反対のキーバインドがないとは思えませんけど。 でも仮にmacにCtrl+Shift+Zがあるとすると、 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()だと、 引数と戻り値的に適切な値が取得できるとは考えられないですが。 それとgetMenuShortcutKeyMaskで適切な値が取得できるのであれば、 UIクラスのinstallUI()(すくなくともJTextComponentのサブクラスのUI)では、 InputMapにデフォルトで登録しておいて欲しいところです。 macをさわれる人にgetMenuShortcutKeyMask()の結果を聞きたいです。 いつになるか分かりませんが、私がmacを実行できる機会があれば、 結果を報告します。
644 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 03:30:19 ] Mac OS X 10.5.1 です。 % uname -a Darwin dorado.local 9.1.0 Darwin Kernel Version 9.1.0: Wed Oct 31 17:46:22 PDT 2007; root:xnu-1228.0.2~1/RELEASE_I386 i386 i386 MacBook2,1 Darwin % java -version java version "1.5.0_13" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237) Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing) System.out.println(Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()); System.out.println(Event.ALT_MASK); System.out.println(Event.CTRL_MASK); System.out.println(Event.META_MASK); System.out.println(Event.SHIFT_MASK); 結果は 4 8 2 4 1 Metaキーってことですかね。
645 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 03:36:27 ] Mac OS XではCommand+Cとかになるからね。 getMenuShortcutKeyMaskの戻り値はEvent.META_MASKになる。 CommandキーはWindowsだとWindowsキー。
646 名前:デフォルトの名無しさん [2007/12/16(日) 17:50:37 ] 619です。 macの結果を教えてくださりありがとうございます。 macのショートカットキー一覧を見ると 「コマンド + C →「編集」メニュー コピー」と記載されているので、 つまり、getMenuShortcutKeyMask()を使用できそうということでしょうか。 ところで、macにはWindowsでいう「やり直し(Ctrl+Y)」 (元に戻すのを戻す?)は、ないのでしょうか。 私の言っている「Ctrl+Shift+Z」ショートカットキーは誤りですか? たびたびすみませんが、時間がありましたら教えてください。
647 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 18:11:03 ] HIG(Human Interface Guidelines) developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Keyboard Shortcuts developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGUserInput/chapter_11_section_3.html#//apple_ref/doc/uid/TP30000361-CHDIGFBH テキストエディット(メモ帳・ワードパッド) GarageBand(作曲) Pages(ワープロ) Keynote(プレゼン) Numbers(スプレッドシート) BathyScaphe(2ちゃんねるブラウザ) で見たら、「やり直す」はCommand+Shift+Zだった。
648 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 18:17:26 ] ちょっと古いけど ttp://developer.apple.com/jp/technotes/tn2042.html やり直しはShift+Command+Zだね。
649 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 18:36:01 ] うお、Leopardでは「取り消す(cmd+Z)」と「やり直す(shift+cmd+z)」に変わったんだね。 プレビューではファイルメニューに、最後に保存した状態に戻す「元に戻す」があったりする。
650 名前:デフォルトの名無しさん [2007/12/16(日) 20:20:32 ] >647さん >648さん >649さん ありがとうございます。 developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGUserInput/chapter_11_section_3.html#//apple_ref/doc/uid/TP30000361-CHDIGFBH のTable 7-5を見ると(Redo(やり直し))Command-Shift-Zってことですね。 頂いた情報を総合すると、getMenuShortcutKeyMask()の戻り値が Event.META_MASK(Commandキー)である。 やり直しはCommand-Shift-Zということですので、 コピーのキーバインディングに KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()); は、良いけど undo,redoに KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()); KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()); はNGということですね。 ということで、やはりプラットフォームごとにInputMapを用意する 必要があるということですね。 実装する予定はありませんが、勉強になりました。 面白かったです。
651 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 21:00:00 ] Swing標準のキーバインドってなかったっけ? あったらそれで良いと思う。 あれはLAFで決まるんだっけ?
652 名前:デフォルトの名無しさん [2007/12/16(日) 21:36:45 ] 619です。 >Swing標準のキーバインドってなかったっけ? swing.plaf配下のUI委譲のInputMap登録コードでは、 JListでの上下移動、JComboBox等の選択等の細かいものを除けば、 基本的に選択(JTableのセル選択,JTextComponentのテキスト選択)、 移動系(セルの選択位置移動、キャレットの移動)の キーバインドしか登録されないのです。 undo,redoをはじめ、Ctrl+S,Ctrl+O等の、機能が実装されていないものに 関しては仕方がないにしても、JTable,JTextComponentでは、 printを実装しているにも関わらず、Ctrl+Pも登録されません。 ですから、標準のキーバインドはないのでは?と思っています。 まぁ、個別のOSのアプリケーションを熟知してませんが、 Gridやテキストエディタでの選択、移動のショートカットキーは、 各OSともほぼ共通なため、そのあたりは登録できるものの、 undo,redo等は、上記のような例があり、標準として登 録できないという事情があるのかもしれません。 でもSwing標準のキーバインドなんてあったとしても、 個人的には、ショートカットキーをバリバリ使う人にはストレスフルで 使いたくないし覚えたくないだろうと思いますが。 ちなみにLAF毎に、キーバインドを登録するようなコードが それぞれのUIクラスのソースに無いのは先述のとおりです。
653 名前:デフォルトの名無しさん [2007/12/16(日) 21:48:11 ] >>633
654 名前:_ [2007/12/19(水) 14:53:45 ] combodata = {"a", "b", "c","d"}; ・ ・ ・ private void Combo1ActionPerformed(java.awt.event.ActionEvent evt) { if (Combo1.getSelectedItem().equals("a")||Combo1.getSelectedItem().equals("b")){ Combo2.setEnabled(true); } else{ Combo2.setEnabled(false); } } Combo1でaかbが選択された場合はCombo2が有効で Combo2でcかdが選択された場合はCombo2が無効になるようにしたいのですが 上のやり方だとaを選ぶとCombo2は有効になるんですがaを選んだ後にcに変更すると Combo2は無効にならずに有効のままになってしまいます. 同じようにcを選ぶと無効になるんですがその後にaを選ぶと無効のままになってしまいます. これを直す方法を教えていただけないでしょうか?お願いします.
655 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 15:17:46 ] いくつか突っ込みどころがあるから最初からやり直した方が早い。
656 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 03:59:56 ] 最初からやり直すというか、紙の上で状態遷移を考えた方がいい。 自分の言ってる矛盾に気付けるから。