1 :
デフォルトの名無しさん :
2008/02/28(木) 08:40:23
2 :
デフォルトの名無しさん :2008/02/28(木) 08:41:32
3 :
デフォルトの名無しさん :2008/02/28(木) 08:42:26
AWTもターゲットに入ってていいんだよね? Q. AWT と Swing 混ぜちゃ駄目って聞いたんですけど 混ぜちゃ駄目なんですか・・・・? A. 今まででは、「駄目」というのが正解です。 が、現在開発中(未リリース)のバージョンではSwingとAWTの混在ができるようになっています。 正式リリースがされるまで、情報の錯綜があって混乱すると思いますが 普通の人にとっては「まだ駄目」という状況だと思ってください。 Q. Nimbusって何よ。 A. 次期Swingの標準となるとされているLAFです。 元々は、SUNのGnome環境のテーマに使われていた見た目を移植したものになります。 実装にはXMLベースでLAFを定義できるSynthLookAndFeel を利用しています。 jdk6の開発版で試す事ができます。 Q. こんなプログラムを作れって言われたんですが・・・ A. 宿題スレへどうぞ。 Q. なんでスレタイに低速って入ってるの? A. まだまだ速くなるってことさ。
死ねよ
削除依頼出しとけよ
すごくめんどくさいです。
8 :
デフォルトの名無しさん :2008/02/29(金) 22:40:40
JLabelを継承して背景色にグラデーション使ったラベルを作ったんですが グラデーションにはなっていますが、ラベルの中に文字列を入れても表示されません。 文字列を表示するためにはどうすればいいのでしょうか? public class JLabelEx extends JLabel { public JLabelEx() { } @Override public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; //背景描画 Color grey = new Color(204,204,204); Color white = new Color(255,255,255); GradientPaint gp = new GradientPaint(this.getWidth()/5,0,white,this.getWidth()/3,0,grey,false); g2.setPaint(gp); g2.fillRect(0,0,this.getWidth(),this.getHeight()); } }
>>8 super.paintComponentは呼ばないの?
11 :
8 :2008/03/01(土) 00:40:27
super.paintComponentは呼んだほうがいいんですか? 呼んでもうまくいきませんでしたが。
>>11 じゃあsuper.paintComponentを呼ばずにそのコードのどこでラベルが描画されていると思っているんだ?
呼んだとしても自分の描画コードがせっかくsuper.paintComponentが描いた文字を塗り潰しているとは考えないんだろうな。
デフォルトコンストラクタしかないけどsetTextとかでラベルは設定しているんだと思って、そこにはつっこまないぜ。
>>11 super.paintComponentを、背景を塗った後で呼んだ?
最近グラデーションする人多いのね
テーマのOCANが始めからグラデーションかかってるけどラベルはかからないんだっけ?
テーマがお侠って元気そうでいいな
17 :
デフォルトの名無しさん :2008/03/02(日) 01:40:52
> 15 かからない。ボタンとメニューとスクロールバーくらいだっけかな。 > 8 そもそもこういうのはUIクラスで実装すべき。
updateN build12のNimbusだとJPanelの背景が白くなっちまうぜ こんちくしょう
NimbusってSynthベースだっけ? Synthでは描画コードちゃんと自分で実装しないと真っ白になるけど。
Solaris の Java Desktop はなかなかきれいで Linux の GNOME/KDE より速い (俺体感)。
JDSはgnomeでしょ
>>19 でもbuild 10だと普通だし、白くならないんだよねー
何が変わったんだろ
画像を256色に減色したいのですが、単純に BufferedImage dest = new BufferedImage(width,height,BufferedImage.TYPE_BYTE_INDEXED); dest.createGraphics.drawImage(src,0,0,null); このようにしたら各色6段階で256色にはなりますが、当然見るに堪えません。 各色4byteずつ使って256色としたいです。 自分で減色アルゴリズムを実装するしかないのでしょうか? それとも既存のクラスで可能なのでしょうか?
RGB各色4byteずつ使ったら合計で12byteにならないか? それだと256色じゃなくて4096色じゃないか? 何か勘違いしてる?
25 :
24 :2008/03/09(日) 02:08:38
何か勘違いしてた。ごめ。
>>23 そんな便利なものはなかったと思うので、
自分で減色するしかないんじゃないかな
すみません。確かに説明が悪かったです。 ARGBの4バンドで各1byteずつ、つまり1色4bytes こう書くべきでしたね。 やっぱりそうですか〜 理解が大変そうでクラスライブラリに頼りたかったのですがそんなものまではないんですね。 勉強してみます。ありがとうございました。
ScrollPaneがScrollしたというイベントはどのListenerで知る事ができるんでしょうか?
JScrollBarを取得して、それにAdjustmentListener登録でいんじゃね?
viewPortからも取れるよね
30 :
29 :2008/03/09(日) 15:50:38
む、イベントが発生しないと意味なかった。失敬
IndexColorModel内のRGBデータフィールド(int rgb[])は絶対に変更できないのでしょうか? どのコンストラクタでも、引数のrgbデータは直接は用いず、全くsetterもないので方法が思いつきませんでした。 あるインデックスの色だけ変えたい場合には getRGBs(int[] rgb) でコピーし、再びオブジェクト作成しか方法はないのでしょうか?
Swingの話じゃないなぁ Java2Dの書籍とかドキュメントとか見直してみたら?
>>31 IndexColorModelのカラーパレットは変更できないから新たに作るしかないような
前スレでスレタイにAWTの文字が入ったのに消えちゃったからな
>>1 の過去スレリストでも改変されてるし黒歴史扱いか
AWTがはいっていたとしてもJava2Dは別の場所での話しでしょう ここはGUIコンポーネントについての話であって汎用部分の話ではないわけで
ネタもねぇのに贅沢な連中だな
ネタがあろうがなかろうがスレ違いはいらん
>>33 そうですね。IndexColorModelをパクることにします。
ありがとうございました。
SwingXおもしろいねー いらんもんがかなりあるけどなんだか楽しく作ってる感じするね
JFileChooserで下部のコンボボックスで選択したファイルタイプを取得する方法はありますか?
JFileChooser#getFileFilter() じゃなくて?
すみません!getSelectedFileのノリでgetSelected...で探してました。ありがとうございます。
JFrameを継承したアプリケーションを作ることは一般的に推奨されないようですが、それはなぜなのでしょうか? ビューはビューとして完全に分離させないといけないからでしょうか?
「JFrameを継承したアプリケーションを作ることは一般的に推奨されない」 って言ったやつに聞けよ…
一般に推奨されないかどうかは知らないが、 ビューはビュー、モデルはモデル、コントローラはコントローラと、 役割ごとにクラスを分けるのはそれなりに合理的かと でも別にいけないことはないだろう 全部のメソッドをひとつのクラスに入れてオブジェクト指向なにそれ?でもいいわけだし
ありがとうございます。確かSwing Application Framework関連の読み物に書いてあって、ずっと引っかかってたから聞いてみたんです。 それの示す意味は、JFrameは継承するな、ではなくその中にアプリケーション関連のコンテクストを何でもかんでも詰め込むなよ、という意味なんでしょうね。 ちゃんと分離できているのであればokってことで認識しておきます。ありがとうございました。
まぁswingは基本的にコンポーネントを継承しなくてもほとんどのカスタマイズができるから あまりコンポーネントから継承する理由がないんだよな… 個人的には完全に自作するコンポーネントや複合ウィジェットみたい なものでしかコンポーネント類からの継承は使わないかも
Swing Application FrameworkつかったらJFrameは継承しないとだめだろうなぁ つーか、事実上GUIエディタつかわないと効率よく開発できないんだから その流儀に従うだけ、というのが正解
継承したところで、それ用に作られてる一部のメソッド以外をオーバライドなんて怖くて出来ないし 単にコンストラクタでパブリックメソッドを呼び出すくらいなら、コンポジションを使った方が堅固。 しかし、作ったクラスに対して、自作のメソッドとコンポネントのメソッドを両方呼び出せると便利だし 一方、あのコンポネントの大量のメソッドを委譲するメソッドをひたすら書くのは死ねるので まあ、継承してもしかたないかな...みたいな感じだが JFrameなど作ったその場で表示してあとは放置するようなものは、継承を使わなくても書けるので (焼け石に水だけど)使わない方がいいじゃない?みたいな感じじゃね?
>>49 コンポーネントにアクセスするのが大変にならないか?
>一方、あのコンポネントの大量のメソッドを委譲するメソッドをひたすら書くのは死ねるので そういうのはeclipseに自動生成させればいいよ だからって別にやらないけど
>>45 この考え方はClass間の相互依存が強くなって、カプセル化など構造化プログラミングに真っ向から逆らってる。
うほっ勘違いっす。 BorderFactory.createCompoundBorder(getBorder(),new PullDownBorder()); ここのgetBorder()で単純に元のボーダーを取得せずに BorderFactory.createCompoundBorder(((CompoundBorder)getBorder()).getOutsideBorder(),new PullDownBorder()); こんな感じでボタンだけのボーダー取得してやりゃ解決ですね。 すみませんでした。
JSE 6 にしたら JFileChooser がすっげー遅くなったような気がするんだけど 切断してるネットワークドライブでも見に行くようになったのか?
ちょw まじですかwww
一応正式リリース版なはずのjava6で、こんな致命的なバグが8ヶ月も修正されないってのは、 Sunの技術の低さか、そうじゃないとしたら、Swing(のWindows LaF)軽視、デスクトップアプリ市場放棄だろ。
59 :
55 :2008/03/27(木) 10:51:45
AWT の FileDialog の方は何の影響もないね。むしろ JFileChooser の不自然極まりない ダイアログよりネイティブのダイアログなんでかなりまともに見える (久しぶりに使ったんでちょっと感動)。 Swing と AWT の混在ってコンポーネントやメニューの重なり以外に何かあるんだっけ? AWT のダイアログが上に来るのなら基本的に大丈夫だよね?
大丈夫だけど、FileDialogにはフィルタを設定できないという欠陥が・・・
LightWeight って、いったいどこが LightWeight なの???
>>61 OSの機能を使っているコード量がライト。
>>58 最初から悪かったわけではなくu2で発症したことを考えるとなんかありそうだ
ちなみにjdk5.0の時代はもっと放置してた致命的なバグがあったんだぜ・・・
>>61 懐かしいテンプレだな
66 :
デフォルトの名無しさん :2008/04/08(火) 19:02:08
数年ぶりにswingさわったけど、カレンダーコントロールすらないのにびっくりしたよ。 カレンダー実装でおすすめある?
67 :
:2008/04/08(火) 19:25:50
使ったことないけどSwingX
>>66 「JCalendar swing」でぐぐって出てきたのを全部試して比較レポートしてくれると
うれしい人がたくさんいると思う。
69 :
デフォルトの名無しさん :2008/04/08(火) 21:32:47
自分でやれよ
70 :
デフォルトの名無しさん :2008/04/14(月) 17:18:41
教えてください。HTMLファイルを文字列として読み込み、ループを まわして一定のパターンを見つけたら、一定の別のパターンの タグ文字列を入れたいとして、不足している情報をダイアログで入力してもらい、 それをループの側が受け取り、入れるべき文字列を作ります。 モーダルダイアログでは、一応動くものが作れましたが、モードレスで 同じことをしようとしても、中抜けのダイアログになり、できません。 waitとnotifyAllをうまく動かせませんでした。ループの途中で joinを試みましたが、私のやり方ではダメでした。 JDialogを継承したクラスをループの中から別のスレッドで開いて いいんでしょうか?
駄目。 Swingのスレッドモデルを勉強したら分かるかもしれないぞ。 おそらく、1つ目のダイアログが出た後に、ループ側のスレッドが 初めのとは別スレッドから別のダイアログを立ち上げようとして変になっているんだろう。 invokeLaterや、SwingWorkerなどを利用してみましょう・・・
どうせ例示するならinvokeAndWaitの方が適切のような。
73 :
70 :2008/04/14(月) 21:18:01
レスありがとうございます。回るたびに新しいスレッドを 作ろうとしてしまうということですか? invokeLaterは、やってみましたが、 やり方が悪いのか、うまく行きませんでした。SwingWorkerは SUNのチュートリアルを読みましたが、理解できませんでした。 invokeAndWaitは呼び出す側を間違えたというエラーが 出ました。結城さんのデザインパターン、マルチスレッド編の GuardedSuspensionまで読んで分からなかったので、 一旦聞いてみたくなりました。結構いろいろ、ググりましたが 決め手になると思える情報がないように感じました。大村さんの Swingの本の1巻目を買いますと、3巻目だかにスレッドと Swingの関係が扱われていると書かれていますが、Amazonで目次を 見ると、スレッド関連のものが見当たりません。
>>73 オープンソースなのに何でソース読まないの?
イベントスレッドの動き理解してねぇのにソース読ませるのはかえって混乱するだけだろ。
AWTスレッドとかイベントディスパッチスレッド、シングルスレッドモデルとか しらべてみるほうがいいぞ 直接解決するコード教えたところでたぶんほかのところも問題ありまくり この問題は別にSwingに限らないしね GUIのアプリ作る場合は常についてくる
77 :
70 :2008/04/15(火) 10:16:43
昨日、寝る前、結城さんの本をパラパラめくっていたら、 まだ読んでない後ろのほうに、ご指摘の単語が一杯 出ているのを見つけました。最後まで読んだほうが良さそうです。 また調べなおして出直してきます。 皆さんのレスを読んで煮詰まり感が、いくぶん解消されたので じっくり考えようという気分になりました。ありがとうございます。
がんがれ
79 :
デフォルトの名無しさん :2008/04/20(日) 19:02:31
JTable2JTreeやJTree2JTableみたいなクラスはないのでしょうか? 結構需要が多いとは思うのですが、Swing Hacksなどでも紹介はされておらず。。 JTree2JTableは可能ですが、JTableからJTreeにデータ構造を戻せるのか わかりません。 JTableがObject型なので、JTableを変更した場合、同時にJTreeに通知する 手段などあるのでしょうか?
JTreeとJTableじゃなく、 TreeModelとTableModel見て可能かどうか考えてごらん。
MVCから勉強し直した方が良いんじゃない?
硫化水素ガス自殺が流行ってんだってな。 Swing+AWTでry
プロバイダ料金6500円って、ADSLのままになら2100円だったのに……。払えねぇよ
84 :
デフォルトの名無しさん :2008/04/21(月) 20:30:00
>TreeModelとTableModel見て可能かどうか考えてごらん。 もちろんそうです。表現がいけなかったですね。 普通に考えたら無理かなと。
85 :
デフォルトの名無しさん :2008/04/22(火) 01:00:28
>>77 この「煮詰まる」の用法・用量ってあってるっけ?
行き詰るの間違いだと思う
本来は会議なんかで結論がまとまっていくみたいなときに使うね。
>>85 この「用法・用量」って使い方あってるっけ?
>>86 みんな「煮える」って表現とごっちゃになるんだよね。
料理下手の人だと、煮詰めるのに失敗して焦がしちゃう事を連想するんじゃね?
うわ……まさかと思ってググったら…… 「煮詰まる」っつー言葉、誤用されてる事が多いのか。 俺は元々正しい方の意味を知っていたけど(むしろ誤用されている事を知らなかった) うっかりどこかで使っていたら、意味が伝わらなかったりしたのかな。怖いな。 まぁ、俺も偉そうな事なんて全然言えないけども。 そう言えば、「“確信犯”という言葉はもう“計算高い犯罪”という誤用が定着しているから そっちの意味に変えてしまおうぜ」とか言ってる奴が居たけど そういうのはマジやめてほしい。 正しかったはずの俺の方が、何時の間にか間違いになるなんてゴメンだぜ。 せめて事前に @Deprecated アノテーションを付けてだな……
うけたww その気持ち分かるわ〜w
>>91 確信犯の誤用ってのは「悪い事と確信していながら犯罪を行う人」じゃねーか?
計算高い犯罪、なんて意味で確信犯って言ってる奴は見たことねーぞ
>>91 @Deprecated .... System.getenv のようにdepricated指定を外されたりしてな・・・・
>>93 俺もそっちの誤用だと思う。
悪いと分かっていながら犯罪を行う人間と
正しいと信じて犯罪を行う人間だったら・・・
前者の方が何とかできそう感があるよな・・・・
>正しいと信じて犯罪を行う人間だったら・・・ こっちの人間はダメか?
そっちのネタだけで引っ張るなw 戻せ思い出せ!ここはSwingスレ!
答えて欲しかったな・・
updateNかJavaSE7がでればネタはいくらでも・・・
JavaSE7はクロージャ以外の目玉ってなんかありますか?
>TreeModelとTableModel見て可能かどうか考えてごらん。 解決しました。 できました。
>>91 >そういうのはマジやめてほしい。
>正しかったはずの俺の方が、何時の間にか間違いになるなんてゴメンだぜ。
ムリムリw
プログラミング言語でさえ仕様が変わっていくのに
自然言語の仕様をある一時のままでとどめておくなんて不可能だよ。
ある学者が「独壇場(どくだんじょう)」が読みも漢字も本来とは違うと知ったが、
独擅場(どくせんじょう)と正しく(?)使用すると「独占場」ととられてしまう恐れがあるということで、
その学者、結局「独壇(擅)場」って語彙を使わなくなってしまったんだそうなw
辞書によってはもう独壇場で載ってる。
「新しい」を「あたらしい」と読むのも江戸時代のはやり言葉。本来は誤用。
他にも、さんざか→さざんかとかは?
すごい、すごく、ちゃんと使い分けてる?
たいていの言語学者が一笑に付す日本語の正しい・正しくない議論だけど、
どうしても正しい日本語を決めなきゃならないんだったら平安時代の宮ことばにしてほしい・・・
>>88 言わんとする所は「いま一般的な辞書的用法」とかの方が誤解ないだろうね
用法用量つったら医薬品の使い方だろうし、他の意味で使われる例って思いつかないな。ぐぐってもそんなんばっかりだ
煮詰まるを「行き詰まる」で使うのって、60過ぎてポケモンに嵌ってる親父に聞いたら親父の世代でもすでに定着していたそうだ
正反対の意味で判断つかなくて困るってのは判るけど、今頃反発してもどうにもならん気がするな。
「確信犯」の誤用認知は随分知名度上がった気がするけど(2chだけかな?
誤解を少しでも省きたい時は、結局他の言葉に言い換えるしな
103 :
デフォルトの名無しさん :2008/04/24(木) 02:00:44
おいおい、用法・用量ってのはギャグだろ・・・常考・・・
>>101 悪い悪い。なんか言い方が悪かった。
「何時の間にか」は間違い。「ある日を境に突然」が本意だった。
言葉は移ろいゆくもの。そりゃもちろんさね。
だからと言って、まるで法律でも公布・施行するかのように
「明日から××は○○という意味になります。ホニャララ学会で決定されました」
と、ある日突然人為的に決定される世の中はいやなんですぜ、と言いたかった。
もちろん、そんな動きなんて現実にはまだ無いわけで(無いよね?)、杞憂だけども。
言いたい事さえ正しく通じるなら、「正しい日本語」レイヤについては、俺ぁ気にしないね。
おまえの脳内妄想なんか聞いてねぇからグダグダ引っ張ってないで引っ込んでろカス
何だとコラ対面恐怖症のグズ野郎
107 :
デフォルトの名無しさん :2008/04/25(金) 12:34:18
頭がおかしい
109 :
デフォルトの名無しさん :2008/04/26(土) 01:00:22
お前が一番おかしい 昭和生まれは死ね
ほとんど昭和生まれだと思うんだがw
こよいは平成20年なわけだし、まあそうだなよな
112 :
デフォルトの名無しさん :2008/04/26(土) 08:24:39
変なのが湧いてるな GW厨とかいうやつか
GWってなに 休出まうまう
>>113 それは組織の問題か個人の能力が組織の要求に足りていないのかどっちだ?
いま帰宅した 両方ですね 俺と会社、どっちがさきに潰れるかっていう弱小 夢も希望もない方の低能です
イベントディスパッチスレッドで発生した例外を一括して捕捉する方法は ないでしょうか? 死んでしまわれる前になんとか捕捉してログを出すなり状況を記録するなりしたいのですが。
必ずイベントディスパッチスレッドだけで発生した例外?
>>118 ありがとうございます。それでできそうな気がします。
イベントディスパッチスレッドを得るメソッドって標準ではないですよね?
invokeLaterとかで放り込んでイベントディスパッチスレッド上で実行
するのがいいでしょうか。
SwingUtil か何かにあったろ。
どれ?
SwingUtilities#isEventDispatchThread() みたいな名前の奴
EDTを返すわけじゃないんじゃ
AWTですがこちらで質問させてください。 TrayIcon#displayMessageは 一部のプラットフォームでは、メッセージの表示をサポートしていない可能性があります。 らしいですが、WindowsXPでもできるOSできないOSがあるのでしょうか? WindowsXP Media Center Editionをしようしていますが表示されません。 OSの問題なのでしょうか・・
125 :
デフォルトの名無しさん :2008/05/04(日) 10:32:40
SystemTrayのjavadocには以下のように記述されています。 一部のプラットフォームでは、システムトレイが存在しなかったり、 サポートされていなかったりすることがあります。 その場合、getSystemTray() は UnsupportedOperationException をスローします。 システムトレイがサポートされているかどうかを検出するには、isSupported() を使用します。 上記の挙動は確認してますか? SystemTray#isSupported()はfalseを返しているのでは?
いえ、システムトレイ事態は使えていて、メッセージのみ使えないんです。
そういや同じXP搭載マシンでもjava.awt.Desktopが動くマシンと動かないマシンがあるのは有名だね たしか例外は出してなかったと思う この1.6で追加されたクライアントサイドの強化のapiはバグバグとはよく言われてる
128 :
デフォルトの名無しさん :2008/05/04(日) 10:52:36
>いえ、システムトレイ事態は使えていて、メッセージのみ使えないんです。 では、下記では? SystemTray#isSupported()のjavadocには以下のように記述。 『開発者は、すべてのシステムトレイ機能がサポートされていると 想定しないでください。』
excelのツールバーにある図形描画と同等の機能をSwingで実装しろといわれています。 そんなことできるのでしょうか? また参考サイト等ありましたら教えていただけないでしょうか。
>>129 >そんなことできるのでしょうか?
出来ないと断言できる理由が何もない
普通にSwing系の解説サイトでもあさると良いよ
excelの描画と同等ってことは、ベクタデータじゃないといけないのか? SVG描画用のライブラリと組み合わせるとかどうかな?
132 :
デフォルトの名無しさん :2008/06/02(月) 20:04:29
恐らくそういう問題ではないと思う
133 :
デフォルトの名無しさん :2008/06/03(火) 02:44:49
Java2D使えばExcel以上の出来るだろ。 Jude試してみ。
期待されてるのはすぐ使える ActiveX コンポーネンツ のようなリブラリーが存在するかという事だと思うんだ。
135 :
133 :2008/06/03(火) 02:57:24
そこまで志低いんだったらPGやめろ、と言おうかと思ったんだが、 俺それ作って売ろうかな・・・ Java2D弄るの好きだし。
>>133 今、eclipseにAmaterasUMLって言うのが入っていて、エクセルみたいに直線、
四角をD&Dで調整しながら作成できることを確認しました。
これはeclipseプラグインなので、SWTで実装されていると思いますが、
Swingで実装しなければいけない制限があり、Swingでのサンプルソース的なものがあるサイト等ありましたら
教えていただけないでしょうか。
継承・インターフェイスを使った図形クラス管理 マウス・イベント処理 描画 と、まさに初級向け課題として定番だと思うので、授業を思い出して自力でがんばれ
なんと言うかホントJava初心者っぽくて・・・・時間かかりそうだな・・・・ サンプル以前にどう作るかを考える段階じゃないかね・・・・ というか、Excelみたいってのをどう捉えるか要件定義から入ろうぜ。 課題出した奴に詰め寄って、しっかりヒアリングからだ。
ラベル文字を5秒おきに変えたり、RMIでメッセージを受け取ったら背景色変化させたいのですが、 UIアクション以外の内部アクションを発生させる方法はあるでしょうか?
>>141 よくわからないけどSwingUtilities.invokeLaterとか?
JButtonのマウスイベントでボタンのD&Dを実装(setBoundsの連続)しました。 D&Dでボタン同士が重なり、また通過しても2つのボタンは正しく表示されていますが、 Graphics#drawLineで描いた線の上を通させると、ボタンは残りますが線は通過した範囲のみ消えます。 部品+setBoundsでjavaがうまく描画してくれているようなので、線の部品を探しましたが、 そのようなJコンポーネントはありませんでした。 通過後も線を残すためにはどのようにすればよいでしょうか。
>>143 その線はpaintComponent(Graphics g)の中で描いているか?
>>144 マウスイベンクラスないで、親パネルのgetGraphicsをとって、drawLineしています。
>>145 ボタンなどを移動させると、swingはボタンを元の位置から消して新しい位置に描き直さなければならない。
このとき、swingは影響のあるコンポーネント全員に、「すまんが、表示が変わったので、もっかい描き直してくれ」 と通達を出す。
パネルやボタンなどはこれに応えて、背景を塗りつぶしたりボタンの絵を描き直している。
自分で勝手に描いた線などはこのとき一緒に消されてしまうので、自分もswingの通達に応えて線を描き直さなければならない。
具体的には、再描画が必要なタイミングで各コンポーネントの paint(Graphics) または paintComponent(Graphics) メソッドが呼ばれるので、
このメソッド内で drawLine を呼んで線を描き直すようにしておけば良い。
スイングの設計方針を良く分かっていらっしゃる
>自分で勝手に描いた線などはこのとき一緒に消されてしまうので、自分もswingの通達に応えて線を描き直さなければならない。 問題はここを教えてあげることだったんだけど。
>>146 ありがとうございます。できました!
線を描いても、書いた線に画像を通過させても残るようになりました。
書いた線をクリックで選択して、D&Dで動かそうとしていますが、方法が見当たらず苦戦しています。
書いた線の始点終点を保存しておき、クリック箇所の色を取得し
線用の色の場合は、保存した線情報から線を特定し、
D&Dポジションを使用して線を移動させようと考えているのですが、
クリックした位置の色情報が取れません。
Graphicsクラスやマウスイベント情報にそのようなメソッドがなくて…
そもそも書いた線をJButtonのような何かのコンポーネントとして扱うことはできないのでしょうか。
縦横のみならラベルにする手もありますが、斜めの場合はラベルではできないと思います。
150 :
デフォルトの名無しさん :2008/06/04(水) 21:55:52
>>149 別に色を取得する必要はなくて、クリックした点 (cx, cy) と直線 (x1, y1) - (x2, y2) との距離 d を計算して
d が一定値以下なら線の上だと判断する。
だいたいこんな感じ。
if (cx >= min(x1, x2) && cx <= max(x1, x2) && cy >= min(y1, y2) && cy <= max(y1, y2)) {
dx = x2 - x1
dy = y2 - y1
d = ((cy - y1) * dx - (cx - x1) * dy) / sqrt(dx * dx + dy * dy)
if (abs(d) < 2) {
...
}
}
理屈は数学の教科書でも読んでください。
>>151 真面目ですなぁ、、、
if( cx >= min( ...
if( abs( (cy-y2)*(cx-x1) - (cy-y1)*(cx-x2) ) < 0.01 ) {
...
}
}
掴めるか否かは気分次第な超テキトー実装例w
153 :
デフォルトの名無しさん :2008/06/05(木) 00:56:52
そういうことじゃなくて、java2d使えって落ちじゃないの?
154 :
デフォルトの名無しさん :2008/06/05(木) 00:58:06
どうでもいいんだけどさ、JMenuBarに未実装メソッドでsetHelpMenu()なんてあったんだね。 ユーザーがメニューバーで「ヘルプ (help)」オプションを選択すると表示されるヘルプメニューを設定します。このメソッドはまだ実装されていないので、例外がスローされます。 どういう機能なんだろ・・・
>>155 メニューバーの項目をひとつだけ右端に表示する機能じゃないかと想像する・・・
なんだ〜 それならBoxですぐ可能かぁ 期待して損した。
>>153 Line2Dなるクラスがあったのですが、求めているものではないようです。
線オブジェクトみたいなものはあるのでしょうか?
>>155 awtにそのプロパティあったからそれをもとにに作ったのはいいが
プラットフォーム依存でやめたと予想
>>151 それだとクリック毎に全部の線の範囲確認なので、できれば色を取得して
線の上でない場合、の処理を加えたいです。座標でピクセルを選択し、色を取得する方法はあるのでしょうか?
>>160 色で判定とかマジでやめとけ
* 直線描画にアンチエイリアスがかかったら色判定できない。
* 直線の上しかつかめない。(実際のアプリケーションだとほかにオブジェクトが
ない場合はちょっと離れててもつかめるようにすることが多い。)
* 色をとる処理自体軽くない。
>>160 直接画面に描く代わりにBufferedImageに線を描いておけば、BufferedImage#getRGBで色を拾える。
もしMacで動かす場合は、デフォルトでアンチエイリアスがかかるみたいなので、切っておかないと期待した色が出ないかもしれない。
画面上のピクセルを拾う方法もないこともないけど・・・あんまりおすすめできない。
画面がフルカラーでない場合、線を描くときに減色されて色が変わってしまうし。
他のウィンドウやコンポーネントが上に重なってると、色を拾えないし。
(アプレットの場合は)セキュリティにひっかかるし。
JListやJTableなどの、実際にはレンダラーとしてしか存在しないコンポーネントにマウスイベントや、その他のイベントを伝えるにはどのようにすればよいでしょうか? 例えば、JListのレンダラーの一部にボタンを入れて、そのボタンを押す(ように見せる)ときなどです。 自分でやってみたのは、クリックされたポイントからそこにあるコンポーネントを取得し、そのコンポーネントのすべてのMouseListenerにMouseEventを伝える、という方法ですが、とてもいい方法とは思えません。 何かおすすめの方法はありませんでしょうか?
そもそもsunのレンダラにJComponentの子を使ってるっていう設計自体が間違ってるのでそれに依存した実装はよくない。
swingでHTMLを使って文字列を表示する処理を入れているのですが、 たまに一瞬HTMLのタグが見える問題に悩んでいます。 (もちろん、その後すぐに正しく文字列は表示されますが。) HTMLタグの記述が多ければ多いほど、問題が発生しやすいようですので、 HTMLタグの解釈に時間がかかっているのだと思います。 上記の問題はどうすれば解決するでしょうか。 よろしくお願いします。
>>165 です。
HTMLを使って文字列を表示する処理は、別スレッドで行っておりました。
ですので、別スレッドの中で、invokeLater()を使ってEDTの処理として
実行するようにしたら、
>>165 の現象は発生しなくなりました。
でも、この対処法であっているのでしょうか。。
何か別の考えや私の考え違いがありましたら、ご指摘お願いします。
167 :
デフォルトの名無しさん :2008/06/06(金) 10:49:37
>HTMLを使って文字列を表示する処理は、別スレッドで行っておりました。 現象をみれば、そうだろうね。 >でも、この対処法であっているのでしょうか。。 対処法というか、Swingは基本的にEDT上でしか実行しちゃ駄目ですよ。 なので、この"対処法"(EventQueue#invokeLater()でEDT上で処理を実行)というのがSwingの描画においての正道であって、EDTと別スレッドで実行する方がいけない。 SwingとEDTに関して理解できてなさそうなので、Sunに詳しいページがあるから、そこを読んでみるといいよ。 なんらかの理由があって、別スレッドで実行しているなら、上記を理解したうえでしかるべき実装を行えばいいと思う。
>>167 さっそくレスありがとうございます。
>SwingとEDTに関して理解できてなさそうなので、Sunに詳しいページがあるから、そこを読んでみるといいよ。
ありがとうございます。
SwingのAPIを利用するときはEDT上で処理を実行するのが原則というのは
読んだことがあったのですが、おっしゃるとおり、ちゃんと理解していませんでした。
ちょっと横にそれますが、上記に関連して質問させていただきます。
Swingの勉強を始めたとき、原則にしたがってSwingのAPIを使用するときは、
なるべくEventQueue#invokeLater()を使って呼び出していたのですが、
フリーズしなければいいかと思って、いつのまにかinvokeLater()を使った書き方は
しなくなっていました。
一つのアプリの中で、SwingのAPIを使用する機会は頻繁にあり、
SwingのAPIを使用するとき、すべてEDT上で実行しようとすると
そのたびにinvokeLater()を使うことになり、大変コーディング量が多くなると思います。
そのコーディングは物理的に不可能だとは思いませんが、やっぱり大変なので
Swingでアプリを作っている人は、SwingのAPIを使用するとき、invokeLater()を
使ったり使わなかったりしていると思っています。
そこで質問があるのですが、invokeLater()を使ってSwingのAPIを呼び出すのと
invokeLater()を使わないことの切り分けの基準みたいなものがありましたら、
お教えお願いたします。(長々とすみません。)
MVCで切り分けたらいいんでね? VC系の処理はEDTだからinvokeLater()使わずに素で書けばいいし 重い処理は別スレッドのMに渡してがーっと処理して 最後にinvokeLater()でVCのデータ受け取りメソッドを呼んでもらえばいい
170 :
デフォルトの名無しさん :2008/06/06(金) 12:29:30
> そのたびにinvokeLater()を使うことになり、大変コーディング量が多くなると思います。 例えば、main()から実行を開始する場合、invokeLater()に渡す Runnable#run()内で、Window(JFrame等)インスタンスやその他コンポーネントを構築して実行を開始します。 そうすれば、invokeLater()を意識せずともEDT上で実行されますので、通常は、その都度invokeLater()を呼び出す必要はありません。 > Swingでアプリを作っている人は、SwingのAPIを使用するとき、invokeLater()を > 使ったり使わなかったりしていると思っています。 > そこで質問があるのですが、invokeLater()を使ってSwingのAPIを呼び出すのと > invokeLater()を使わないことの切り分けの基準みたいなものがありましたら、 時間がかかる処理で、描画を伴わない場合、EDTと別スレッドで実行し、その処理が実行された後に、 GUIの描画を更新する必要がある場合、invokeLater()を使用します。 例えば、ListModelやTableModelをEDTと別スレッドで生成(Listenerが登録されておらずGUIと無関係であること)後、 そのModelをJList#setModel(),JTable#setModel()で設定する場合、setModel()内で再描画が要求されるため、 setModel()の呼び出しはEDT上で実行する必要があります。 もちろん、EDTと別スレッドで実行した処理がGUIと無関係であれば、上記の処理は不要です。 まぁ、ともあれ、Sunのページを読んで動作原理を理解した後、SwingUtilities#invokeLater(),SwingUtilities#invokeAndWait(), SwingWorkerクラスも調べて、実行していれば自ずと理解できるのではないでしょうか。 切り分けの基準は、169と一緒。
>>169 >MVCで切り分けたらいいんでね?
なるほど。。そこから考えると、すっきりしました。
ありがとうございます。
>>170 >例えば、main()から実行を開始する場合、invokeLater()に渡す
>invokeLater()を意識せずともEDT上で実行されますので、
>通常は、その都度invokeLater()を呼び出す必要はありません。
なるほど。。
>時間がかかる処理で、描画を伴わない場合、EDTと別スレッドで実行し、
>その処理が実行された後に、 GUIの描画を更新する必要がある場合、
>invokeLater()を使用します。
なるほど。。
基本的なinvokeLater()の使用スタイルになりそうです。
ありがとうございます。
>setModel()内で再描画が要求されるため、 setModel()の呼び出しはEDT上で
>実行する必要があります。
とてもいい例を提示していただき、ありがとうございます。
今後、盲点になりそうなところだったと思います。
おっしゃる通り、ドキュメントの理解をきちんとしておく必要がありそうです。
しかし、おかげ様でかなり理解が深まりました。
レスありがとうございました。
>>152 計算が理解できなかったので他の方法を探ってみました。
new Line2D.Doubleで線オブジェクトにして、contains(イベントからのポイント)でいけると思ったのですがダメでした。
javadocを確認したら、線は領域を持たないということで、常にfalseを返していました。
Areaというものがあったので、ラッピングしてみましたがこれもダメでした。
new Area(line).contains(point)
線に対して、指定ポイント上にあるかの判断は標準ライブラリとして用意されていないのでしょうか?
>>172 その線というのは、数学的な無限に細い線(幅が0)を表しているから
単純にArea化しても一緒
その手のやりかたをするなら
Stroke stroke = new BasicStroke( 線幅 );
Line2D line = new Line2D.Double( ... ) ;
Shape shape = stroke.createStrokedShape(line);
shape.contains(point)
とすればたぶんできる
mouseDraggedの発生タイミングって決まっているのでしょうか。 例えば1ピクセル移動ごとに発生とか。
決まってない。 てきとーに発生する。
>>173 ありがとうございます!!!!
できました。これを駆使して、描画した線のD&Dが実装できました。
感謝です。
ボタンを押したら凹んだままになり、再度押すと凸になるボタンてないのでしょうか。 JButtonにはそれらしきプロパティがなかったです。 トグル系もラジオボタンとチェックボックスしかなくダメなようです。
178 :
デフォルトの名無しさん :2008/06/06(金) 18:25:12
>ボタンを押したら凹んだままになり、再度押すと凸になるボタンてないのでしょうか。 javax.swing.JToggleButton
>>172 あれ?線分までの最短距離を出すメソッドがあってそれ一発で済むと思ったけど…
Line2D#ptSegDist() だっけ?
計算内容を理解せずに使うという点では結局どれも同じだと思うけどな
ラベルがあるパネルに背景をBufferedImageでセットしています。 ラベルの表示、非表示機能を実装しようとし、ラベルのsetEnabledをしましたが、 ラベル部分がデフォルト背景(?)の灰色になり、BufferedImageが適用されません。 また、ラベルのマウスイベントも生きているようです。 ラベル非表示をsetBounds(new Rectangle(0,0,0,0))で実現していますが、邪道でしょうか? もっとスムーズな方法があればご教授ください。 やりたいことは、見た目の完全消去(BufferedImageで塗りつぶし)、イベント等も発生させない、です。
>>181 setVisible(false) は?
java2dといわれたら普通に分かると思うんだけど… ただ、感謝もあったし、親切なのはいいことですね
184 :
デフォルトの名無しさん :2008/06/07(土) 00:35:10
計算の方を理解するのはたぶん無理でしょ。 線形代数とかになるけど、結局その式一つを説明するにしても高度な数学wを理解しなければならないことと同じだからね。 化学とか薬学・医学の人すら使わないし、PGは理系文系の混在だからなんともいえない。 数学の理解よりも、分からない人は、そういうのは頭いい人に任せておいて無理しないでjava2dとか使って素直に実装してくれればいいよ。
質問があります。 Swingで日韓の文字を交ぜて表示したいのです。 JEditorPaneのtext/htmlモードでは普通に(タグで指定とかしなくても)うまくいきました。 JEditorPaneのtextモードでは表示してくれませんでした(・・・ナカグロになります)。 JTreeで表示したいのですが、どうすれば良いでしょうか? 環境はOSがWindowsXP、JDK(JRE)が1.6.0_06、 LookAndFeelはWindowsLookAndFeelを使用していますが、使用しなくても支障ないです。
>>186 ありがとう。
原因はハングルをUTF-8でファイルに保存する時に文字コードを破壊していたようです。試しにunicodeにして保存したら、JTreeのフォントがDialogのままで正しく表示されました。
JRE1.6.0_06はfont.propertiesを書き換えなくても普通にハングルが表示出来るようです。
関係あるかわからないけど、C:\Program Files\Java\jre1.6.0_06\lib\fontconfig.properties.srcの中に普通に
serif.plain.korean=Batang
って書いてありました。
JFileChooserを使って、「ファイルを開く」ダイアログを表示するのに 5秒間くらい時間がかかります。 ダイアログが表示されるのが遅い原因は何が考えられますでしょうか? 本に書いてあるサンプルを元にしたので、 次のようなシンプルなコードを記述しています。 JFileChooser filechooser = new JFileChooser("./conf"); filechooser.setDialogTitle("条件ファイルの選択"); // getContentPane()またはthisを指定 int selected = filechooser.showOpenDialog(getContentPane()); ダイアログを開こうとすると、タスクマネージャでCPUの使用量が 2%くらいから50%に一気に上がります。 重いソフトなどは落としてから実行してもやはり表示されるのが 遅いです。 LOOK&FEELは、windowsを選択していたのですが、デフォルトのLOOK&FEELを 使用しても、効果はありませんでした。 開発環境にeclipseを使っているのですが、それが原因でしょうか。 何かお気づきのところがありましたら、ご教授のほどお願いいたします。
190 :
デフォルトの名無しさん :2008/06/09(月) 09:33:18
OSとかCPUとかMEMかかないと・・・
>>189 >>190 すみません、以下、スペックです。
OS :XP Home Edition SP2
CPU:CORE 2 DUO 6600 2.4GHz
MEM:1GB
JRE:1.6.0_06
>>56 のリンク見ると、同じ問題のようですね。
こんな問題があったとは、、、、仕方がありませんので
JRE1.5で動くようにさせます。
レスありがとうございました。
newするところで重くなったんじゃなかったけ? なので、最初にnewして起動処理と思えばある程度納得できる。
193 :
デフォルトの名無しさん :2008/06/09(月) 10:05:47
そのスペックで5秒はおかしいだろ
>>192 ありがとうございます。
あらかじめJFileChooserオブジェクトを生成しておけば、素早く
ダイアログが起動するようになりました。
JRE1.5で動かすように修正し始めていたので助かりました。
>>193 本当に数えたら平均5秒だったんです。
6秒以上のときもあります。。
>なので、最初にnewして起動処理と思えばある程度納得できる。 たしかにそうでした。 画面を表示することが遅くなりました。やはり、5秒くらいかかります。 簡単なツールを作っているので、この遅さは気になるので 1.5で作ることにします。。無念です。ありがとうございます。
これ実行環境の問題なのに?
>>196 少しだけ1.6に依存するコードを書いていました。
今、1.5で動くようになりました。
1秒ほどで起動でき、「ファイルを開く」ダイアログも早く
起動できるようになりました。とりあえず、安心しました。。
いい加減直ってほしいバグだな…
同じパネルに乗っかっているボタンを重ねたときの上下関係って デフォルトではaddした順ぽいのですが、addし直さなくても上下関係を変える方法はあるでしょうか?
setComponentZOrderは?
そもそもボタンを重ねるようなユーザインターフェースってどうかと思うが… setComponentZOrder かレイアウトをOverlayLayoutにするとかかな
もしかしてCardLayoutみたいなことしたいんじゃ?
>>193 FileChooserが重くなる不具合しらんのか?
u2からでてきたやつだよ
ImageIconオブジェクトの作成についてお聞きします。 ImageIconオブジェクトを生成するソースファイル(あるいはクラスファイル)と 同じフォルダにsample.pngを置いておき、次のようなコードを書いても実行しても、 ImageIconオブジェクトを取得できません。 ImageIcon sampleIcon = new ImageIcon("sample.png"); …(1) ↓これもだめでした。 ImageIcon sampleIcon = new ImageIcon("./sample.png"); …(2) ↓次の相対パスの指定なら取得することができました。 ImageIcon sampleIcon = new ImageIcon("bin/test/sample.png"); こちらでもOKでした。 ImageIcon sampleIcon = new ImageIcon("src/test/sample.png"); ※src配下にはソースファイル、bin配下にはクラスファイルを置いています。 ↓もちろん、絶対パスの指定でもImageIconオブジェクトを取得することができます。 ImageIcon sampleIcon = new ImageIcon("C:/eclipse/workspace/sample/src/test/sample.png"); (1)や(2)の方法でImageIconオブジェクトを取得するにはどうしたらいいでしょうか?
つ ClassLoader#getResource
jarファイルの話?それならjarがルートになっているからそうなると思う。 画像はres(リソース)とかimg(イメージ)とかルートの直下にフォルダを作って img/sample.pngとかでアクセスするのが普通なのかな。
208 :
デフォルトの名無しさん :2008/06/09(月) 21:12:03
そもそもSwingの話なのか?
>>205 ,206
お教えありがとうございます。↓でうまくいきました。
ImageIcon sampleIcon = new ImageIcon( getClass().getResource("sample.png") );
ImageIcon sampleIcon = new ImageIcon( getClass().getResource("./sample.png") );
>>207 jarにまとめてから実行してなくて、クラスファイルから実行しています。
画像を C:/eclipse/workspace/sample/img/sample.png ここに移動して ImageIcon sampleIcon = new ImageIcon("img/sample.png"); っていうのも試してみて。押し付けがましいけど、こっちの方がいいと思うから。
>>210 >ImageIcon sampleIcon = new ImageIcon("img/sample.png");
>っていうのも試してみて。押し付けがましいけど、こっちの方がいいと思うから。
いえいえ、ありがとうございます。
画像はimgの中にまとめてみます。
>>208 ImageIcon自体はSwingだから大目にみなされ
クラスパスの理解が足りないだけだから確かに関係はないけど
swingでネットワーク経由の処理要求を常に受けたい場合、 つまり、画面イベントではなく別なイベントループでswingと連動したい場合は、 SwingWorkerのdoInBackgroundでイベントループ(アプリを終了するまでreturnしない)し、 その中でpublish呼び出しし、processで画面更新処理、 という設計にすればよいでしょうか。
SwingWorkerのソースコードみてみると、ワーカースレッドは最大10個までみたい それを恒常的に1個消費するというのはどうだろう・・・ アリといえばアリのような気もするけど、微妙なところ
swingで時計表示(1秒後とに更新)のようなアプリってどうやって実装するのが普通なのか?
SwingのTimerでいんでね?
1つのjavaプロセスで複数のWindowを表示するときって(同じスレッドでnew JFrame()を何回か実行)したとき 全画面のイベント処理スレッドって一個だけになっているけど、 ウィンドウごとに分けること、つまり他の画面更新が頻繁でその影響を食らいたくない場合用に イベント処理スレッドを画面分起動することなんてできるのだろうか?
>>218 無理です ♥
アプリのプロセス毎分離してみては?
>>216 時計だけならSwingのTimerでいいが実際のところバックグラウンドで南下したい場合
普通にデーモンスレッドにすればいいだけでしょ
そこからイベントディスパッチスレッドになげるだけ
JButton#setText() を呼んで描画できたってこととをもってそのコードが スレッドセーフであるとは言えないだろ。setText()実行中に別スレッドが setText()する場合とか考えてみれ。 >イベントディスパッチ以外のスレッドからのJComponentのアクセスは、 >paint以外やらないほうが良いのでしょうか? 「やらないほうがいい」じゃなくて「やってはならない」だ。 それと呼んでいいのはrepaint()ね
そういやjavaSEには同期でpaint()呼ぶメソッドないな。MIDPにはあるんだが。
>>222 ありがとうございます。
「コールすることはできないということです」ではなく
「スレッドセーフではないので保証されなく、呼んではいけない」ですね。
できないって書いてあったので、new Exception().getStackTrace()からスレッドをチェックしているのかと思って。
「できない」という場合、「してはならない」という意味のことが多いな
ベースのウィンドウから別の画面を出したり消したりする場合、 以下よりも frame = new JFrame(); ・・・なんかやって用済み frame.remove(); frame.validate(); frame = null; ・・・また必要になる frame = new JFrame(); 以下の方が良いのでしょうか? frame = new JFrame(); ・・・なんかやって用済み frame.dispose(); ・・・また必要になる frameshow();
>>226 > frame = new JFrame();
> frame = new JFrame();
参照を理解していないようだから、
何の参照か理解すれば、分かるはず。
Swingの問題ではない。
>>227 ちょっとまて
> frame = new JFrame();
>以下の方が良いのでしょうか?
> frame = new JFrame();
こうなってるぞ
>>226 どのみちdispose()はすべきじゃないの?完全に管理下に置いているなら。
あとは空間と時間のトレードオフと思われ。おまけ:
frame.remove(); // -> frame.removeAll();
frameshow(); // -> frame.show();
たぶん画面が必要になるたびにJFrameオブジェクトをつくるか1度だけ作って 不要になったときdisposeだけしてオブジェクトを使いまわすのとどっちがいいのかって ことを聞きたいんだろうけど… 好きにすれば? ってか典型的なメモリとCPUのトレードオフじゃね? そのフレームがどの程度の頻度で表示されるか?とか 想定する実行環境のメインメモリの量は?CPUは?とかいろいろ考えて決めてくれ。 ものすごく頻繁に再表示されるならdispose()しないという選択肢もあるだろうし。
>>224 閑話休題
それでスレッドチェックはできるが
「無茶苦茶」重くなる。
次世代か、現世代かで、(別だったか?)
Exceptionのスッタクトレース生成のコストを
計った事があったけど、かなり重量級処理になった。
誰かがブログに載せてたな。
スレッドのチェックって Thread.currentThread() か ThreadLocal では? なぜスタックトレース?
>>229 disposeはsetVisible(false)と同じことなのでしょうか。
disposeはネイティブスクリーンリソースの開放とありますが、
java内部ではshow()で復活できるようにメモリは破棄しないで保持しつづけるのでしょうか。
完全にリソースを消したかったので、removeAll()を実行しましたが、
画面は表示されたままですが、イベント関係は死んでいるようです。
正しい手順としては、
frame.setVisible(false);
frame.removeAll();
frame = null;
でよろしいでしょうか。
>>233 >disposeはsetVisible(false)と同じことなのでしょうか。
そこが間違い。
dispose()すればウィンドウシステム上のウィンドウ本体(動くGUI)はなくなるけど、
それと同じものを復元できるだけの本質的なデータ(プロパティ)はJVM側に残っている。
だから再びsetVisible(true)できる。
それを残しておくゆとりがないならremoveAll()でもすればいい、ということ。
235 :
デフォルトの名無しさん :2008/06/13(金) 17:48:16
そりゃ違うだろ
ゆとりがないならJFrameを含めて破棄しろよw frame.setVisible(false); frame.dispose(); frame = null;
>>236 frame.removeAll();しなくて大丈夫でしょうか?
frame.setVisible(false);
frame.dispose();
frame.removeAll();
frame = null;
removeAll()がどんだけ破棄の効率に影響するかという点は疑問だが、まあ参照切れそうだしいいんじゃね
frameの子コンポーネントがframe内部以外から参照されてないなら frame = null で済むし frame以外から参照されてたらまずそっちの参照をなくさないと意味ない 参照切るって意味わかってるのかしら…?
GCを信用できない心境ってあるでしょ
>>240 イベント処理クラスが絶対握ってるから、そこの参照取るように終了系のメソッド呼ぶ必要はないの?
簡単に想像できるけど。ちなみにJFrameのfinalizeにも何もないから…終了系メソッドコールは必要でしょう?
>>242 必要ないよ。
そのイベント処理クラスとやらのインスタンスが他から参照されてないなら。
JFrameにはfinalizeがなくてもそのスーパークラスのFrameやWindowにはfinalizeあるよ
>>244 javadoc見たけどないですよ・・・
消えたのか・・・ 1.5見てたよ・・・
ウィンドウ幅は変更せずに、ウィンドウ内の部品や描画した線を全体的に拡大する事がさくっさできる方法はあるでしょうか? イメージとしては、グーグルマップの拡大・縮小です。 また、グーグルのグリップオンでの移動のようなことも簡単でできる方法はあるでしょうか。
アファイン変換でもすれば?
>>249 あれ?Swingでそれやっちゃだめじゃなかった?
コンポーネントの描画を自前で面倒見れるなら別に良いんじゃね?
>>251 Swingのすべてのコンポーネントの処理を自前で処理するのかい?
いやアファイン変換するところだけよ。 Swingの描画はjava2Dで行われてるんだから自分でJava2D使っても一緒だろ。 鏡文字テキストフィールドとかネタで作ったことあるぞ。
>>253 >>248 がいってるのは子のコンポーネントについても拡大縮小されるべきってところだろ?
ウインドウ内の部品についてもということだから
それにJava2Dの話なら別にこのスレでするような内容でもないし
ならJava2Dはどのスレ?
256 :
デフォルトの名無しさん :2008/06/17(火) 13:44:14
257 :
デフォルトの名無しさん :2008/06/17(火) 13:44:52
基本がわからないのなら初心者スレでいいだろ ネタのない現世代Javaでもいいだろうし
なんか昔、縦書きどうやるんですかって質問で、 ただGraphicsを回転させるだけのネタ回答があったな。 マウスポインタの座標そのままで。
>子のコンポーネントについても拡大縮小されるべき 出来ないこともないぞ。描画時にjava2D使ってドローベースでスケーラブルUI実装すれば良いだけだから。 実際そういうGUI作ってる実験プロジェクトが昔あったし。 SwingHacksでも同じことやってたし。
できないことはない といったらなんでもできるというのと同義になっちまうだろ。 そもそもそれはもはやSwingでもないだろ。 極端すぐる。
読み込んでドローしたイメージの倍率を変えたいのですが、どのようにすればよろしいでしょうか? 現在下記の通りに処理しております。 ImageIO.read で読込み new TexturePaint() に読み込んだものを渡す Graphics2D.setPaint ペイントをセット Graphics2D.fillRect ドロー
264 :
デフォルトの名無しさん :2008/06/17(火) 19:38:11
それはSwingなのか?
Windowsの色の選択ダイアログ(グラディエーションのやつ)を実装したいと思うのですが、 あの縦横の色の出し方はどのような計算でしているのでしょうか。 また、ちょっと前のレスでもありましたが、クリックした場所の色を取得することはできるのでしょうか?
Color#HSBtoRGB hue=0〜1を横に saturation=0〜1を縦に
>>267 Javaのウィンドウでないと駄目じゃん・・・と思ったけど
色キャプチャモードに入ったときに
java.awt.Robotで全画面キャプチャしてそれを全面表示したWindowから選ばせる
とかなら可能かも。
>>269 ピッカーじゃなくて色選択ダイアログの話だろ。
JColorChooserみたいなの
>>270 てっきり色選択のダイアログについてる
任意の部分の色を、パレットに取ってきたいって話かと・・・
クリックした場所の色を取得するのではなく クリックした場所を元に表示と同じ計算をしてだしたほうがいいよ Javaに限った話ではないけど
ん、どういうこと?
描画の時、ここは何色、ここは何色・・・ってやってくっしょ? それを逆に計算しろってこと。 邪道な手を使うなら、BufferedImageのGraphicsにコンポーネント書かせて、getRGB(int,int)。最悪ね。
getRGB(int,int)これは色の取得だと思うけど計算なのか? 最悪って程でもないんじゃないのかな。fpsによるけど。
1ピクセルのクリッピング枠にも最大限効率的に対応できるように描画メソッドを書くわけですね、わかります
277 :
デフォルトの名無しさん :2008/06/19(木) 20:59:26
>>276 BufferedImage使っても十分効率的に出来るし、アルゴというか実装次第じゃないの?
全く話がかみあってないなw
>>275 >>274 は「普通は計算してやれ、getRGB()でもできるけど邪道だ」っていってるんだろ…
より低負荷で簡単な方法が目の前にあるなら普通はそっちを選ぶだろ…
BufferedImageに書かせるって時点で本来やる必要がまったくないことを
やってるわけでCPUもメモリも無駄すぎてどうしようもない。最悪。
>>279 解説ありがとう。まさにその通り。
質問の内容のレベルから、頭使わずにできる方法も提供したってところです。
>>281 十分効率的ってのが実用的な速度て動くって意味ならその通りだろう。
問題ない速度で動く。でもそれだけだ。
単純に計算した方が速いし省メモリじゃね?
画像から取得だとピクセルフォーマットに左右されるのがやばい
>>272 から参加してたから、前の方をよんでなかった。
カラーチューザーの話しだったから計算できるのか。
画像とかの色のことだと思ってた。
画像のスポイトにしてもオフスクリーンで描画している画像からのルックアップだな
286 :
使用書無しさん :2008/06/23(月) 07:45:23
MouseListenerでマウス右クリックを実装したいのですが、Windows、Linux、Macで実装が違うと本に書いてありました。 具体的にはどういう違いがあるのでしょうか?
pressとreleaseのどちらをトリガにするかがプラットフォームによって違うので それを判定する必要があったと思う。判定用のメソッドが用意されてる。
右クリックか・・・ Macのワンボタンマウスのことも忘れないでね
右クリックじゃなくて、ポップアップメニュー出すかどうかの判定が欲しいんじゃね?
宣伝だろ
MouseEvent#isPopupTrigger てのがあるねい
しかしそれではアプリケーションキーやSHIFT+F10には対応できない
>>290 もう、忘れちゃって、2本指でタップしていただけませんでしょうか。
あと、mighty mouse。
297 :
287 :2008/06/23(月) 17:20:55
おしゃる通りPopupMenuの処理なのですが、こんな感じでWindows以外もよろしいでしょうか? @Override public void mousePressed( MouseEvent e) { 左ボタンとPopup共通処理 if(SwingUtilities.isRightMouseButton(e) || e.isPopupTrigger()) { showPopup(); return; } 左ボタンの処理 } @Override public void mouseReleased(MouseEvent e) { if(e.isPopupTrigger()) showPopup(); }
JComponent#setComponentPopupMenu っていうのもあるよ
299 :
287 :2008/06/23(月) 18:29:29
300 :
使用書無しさん :2008/06/23(月) 23:43:23
301 :
デフォルトの名無しさん :2008/06/24(火) 00:19:37
まったく口惜しくないんだが、この感情をどうすればいいのだろうか?
このコテハンうぜー
304 :
デフォルトの名無しさん :2008/06/24(火) 00:39:28
URI wwww
宣伝うざい
しかもSWTスレでもあばれてるな SWTじゃSwingみたいに作れないでしょうとか そしてSwingスレでも馬鹿にした言い方はまるでGKに似てるな
>>306 せっかくあぼーんしてんだから話題に出すなよ。
しかし、宣伝にしても全く買いたくなくなる口調だから、 多分アンチだろ・・・・・
ボタンの上に線を描くことはできないでしょうか。 ボタンの親パネルのpaintないでdrawLineしてもボタンの下に隠れてしまうので、 ボタンのpaintComponentないで、super.paintComponentした後drawLineしましたが ボタンの上に描画できませんでした。
>>309 どういうことをしたいのかわからないとなんともいえないけど
とりあえず glass pane でぐぐってみたらどうだろう
やりたいことはたぶんglass paneとは違う気がする
>>310 ありがとうございます。
やりたいことは、エクセルの描画ツールで線の太さを選択できるダイアログ?がありますが、
あれを作りたいと思っています。
画像を作ってボタンに張ればいいのですが、太さのパターンが増えたとき画像を作るのが面倒なので、
画像なしボタンの上に線を描画できたら簡単かなっと思って質問いたしました。
Iconインタフェイスを実装してボタンに貼ればいいと思う
>>312 なあ、この時点でむしろ面倒になっていると思わないか?
JOptionPane.show***でボタンを表示させない方法ってあります? showOptionDialogでボタン配列をnullにしたけど「了解」がでちゃう
316 :
デフォルトの名無しさん :2008/06/24(火) 16:15:09
Image image = createImage(32, 32); Graphics g = image.getGraphics(); g.setColor(Color.WHITE); g.drawLine(0, 0, image.getWidth(this), image.getHeight(this)); button.setIcon(new ImageIcon(image)); g.dispose();
>>312 描画のところは好きなようにやってくれ
Icon lineIcon = new Icon(){
public int getIconWidth() { return 32; }
public int getIconHeight() { return 32; }
public void paintIcon(Component c, Graphics g, int x, int y)
{
int centerX = getIconWidth() / 2;
g.drawLine(x + centerX, y + 3, x + centerX, y + 28);
}
};
JButton button = new JButton("Line", lineIcon);
エクセルで線を2本描画しCTRLで2つ選択してドラッグすると、2つともドラッグできますが Swingでやる場合、簡単なグループ化的なドラッグ方法は用意されているでしょうか。 またない場合、良いアプローチ法はありますでしょうか。
Excelの表と同じものを作ればおなじようになるよ なんか最近へんな質問が多い気がする
複数ドラッグは簡単だが問題はどうやって視覚的フィードバックを与えるかだな。 java2Dでドラッグ対象のコピーとってグラスペインに描画って感じか。
図形オブジェクトを複数選択して移動する話じゃないのか? 図形オブジェクトがコンポーネントになってれば「選択されてるコンポーネント(群)」を 移動するだけだと思うのだが…
>>312 その場で描画できる程度の画像を作るのが面倒とは
はじめてSwingアプリを作ることになり色々調べてはいるものの 理解が及ばないところがあるため質問させて下さい。 異なるサーバから表示用データを周期的に取得するスレッドが複数あり、 そのデータをSwingUtilitie.invokeLater()で、表示用フレームに反映させようと しています。 このとき、EDTは要求が同時に付いたときも順に処理してくれるのでしょうか? それとも要求待ち受け様のsyncronizedメソッド等を自作し、順にinvokeLaterを投げる ようにすべきなのでしょうか?
イベントディスパッチスレッドは単一のキューだから大丈夫だよ EventQueueに追加してるところでsynchronizedしてる
325 :
デフォルトの名無しさん :2008/06/25(水) 21:22:57
東部夏時間??
327 :
デフォルトの名無しさん :2008/06/25(水) 21:31:26
なるほど、「Event Dispatch Thread」か 初めての割りに、よくこんなもの知ってたな
AWTにもEDTあるけどな
>>324 Swingはスレッドセーフじゃないと漠然とした情報があっただけなので
ここもなのかなぁ・・・と、ちょっと不安でしたorz
ご回答ありがとうございます。
ソース読むといいよ IDE使ってるならCTRL+クリックとかでおっていけるでしょ
単なる興味ですが、プロパティの変更通知するオブジェクトは ”changesという名前のPropertyChangeSupport クラスのインスタンスが含まれている” という変なルールなんでしょうか? マーカーインターフェースとかのほうが、よっぽどわかりやすいのですが・・・。 この仕様が出来た当時は、こういったスタイルが主流だったのでしょうか
>>329 スレッドセーフじゃないからこそ全部1つのスレッドで順番に処理してるんだろーが…
>>331 PropertyChangeSupport 使わなくても通知できるからそれじゃ識別できないのでは?
swing コンポーネントとかはそれ継承した SwingPropertyChangeSupport 使ってるし
変数名も changeSupport とかになってるしねぇ…
changesってどっかのセミナー資料とかみてるからとか
>>335 別にそんなに変なことは書いてないだろう?
「beanでプロパティの変更を通知可能にしたければこのようにすればいいよ」って書いてあるだけで
「このように実装されているものだけがプロパティの変更を通知可能なbeanです」とは書いてないし…
337 :
デフォルトの名無しさん :2008/06/30(月) 11:07:43
背景をキャプチャーして Windowを透明にする方法以外に Windowを透明にする方法はあるでしょか またswtなどに透明にできるコンテナはあるのでしょうか
JButtonにプログラムからクリックイベントを発生させることってできますか? マウスがボタン上にない場合は、できればマウスは動かさないで・・・ 要は単純にイベントだけがほしいのですが。
>>337 jdk6updateN だと com.sun.awt.AWTUtilities#setWindowOpacity(java.awt.Window, float) 使える。
ラベルのテキスト文字がラベル幅内に収まらないとき ラベル幅を超えてすべての文字が出るようにしたいのですが 手段はあるでしょうか?
>>338 AbstractButton#doClick
>>340 ・ラベルのテキストの先頭に "<html>" を付けると複数行に折り返して表示される
・ラベルをJScrollPaneに包むとスクロールバーでスクロールできる
・setToolTipTextを設定するとマウスを乗せたときにポップアップする
・そもそもラベルの幅を広くする
>>342 ありがとうございます。
ラベルの幅をかえる場合、現在のフォントと文字列から実際の幅を計算する手段はあるでしょうか。
SwingUtilities#computeStringWidth
>>343 label.getPreferredSize()
レイアウトマネージャの再発明をしそうな予感
>>338 複数から呼び出される処理ならば
イベントでがりがりかくのではなくて
外にメソッドで出しといたほうがいいよ
そしてそれを呼び出すようにしたほうが柔軟性が高い
あとでほかの場所からも同じ処理をした上で
追加で行う処理とかでてきたりするものだ
drawLineするときにstrokeかなんかでJComponent#setBorder見たいに外枠をつけることってできますか??
>>348 こんなの?
((Graphics2D)g).draw(stroke.createStrokedShape(new Line2D.Double(x1, y1, x2, y2)));
ダイアログであるボタンを押したときに自動でクローズしたいのですが、 方法として、ダイアログのボタンリスナーアクションで、親のパネルを取得して全コンポーネントに対し 「了解」のボタンだったらdoClick()するようにしたのですが、どうも「了解」のボタンは含まれないようです。 こんなことせずにも、簡単なものがあれば教えていただけないでしょうか。 JPanel p = (JPanel)((JButton)e.getSource()).getParent(); for (Component c: p.getComponents()) { if (c instanceof JButton) { if (((JButton)c).getText().equals("了解")) { ((JButton)c).doClick(); } } }
>>350 単に閉じたいだけで特に了解ボタン押す必要ないんなら、
Window w = SwingUtilities.windowForComponent((Component) e.getSource());
w.dispose();
でどうかな
352 :
使用書無しさん :2008/06/30(月) 18:17:16
>>350 何でそんなまどろっこしい方法するの?
public void actionPerfomed(ActionEvent e){
if (e.getSource()==buttonA){
dialogA.dispose();
}
}
みたいなのじゃだめなの?
いつまで糞コテなの?
糞コテ馬鹿丸出し
>>343 Font font = Component.getFont();
FontMetrics fm = JComponent.getFontMetrics(font);
int stringwidth = fm.stringWidth("なにがし");
こんなのもあった。
ダイアログでない別の画面を開いてから、それを閉じる間 元の画面の操作を無効にしたいのですが、どうすればよいでしょうか。 visible(false)だとなくなってしまいました。
それがフレームなら、glasspaneにMouseListener登録するのが楽でいいかもねー
俺はダイアログのコンポーネントをglasspaneに描画してglasspaneでイベント握り潰してるけど
ダイアログにJFrameの画面を描画するというような、そんなことってできるのでしょうか? それができればまったく問題無しなんですけど。
JDialogではいかんのか?
JFrameの中身のコンポーネントを描画することはできなくもない
階層ありポップアップある数階層のJMenuにアイテムを1つ追加して ポップアップに対しvalidateを呼んだあとshowしましたが、 追加が反映されませんでした。最初から作り直さないとダメなんですかね?
>>363 ある共通要の設定画面があり、
時と場合で、出しっぱなしの他画面操作OKだったり
出したらその画面を終了するまで、他の画面はノータッチ、との要求が上がっています。
要求に対しての馬鹿さについてはすんません。
ただJFrame継承の画面があり、こいつで何とか実現しないといけなくなったのが現状で・・・
setEnabled(false) してしまえ
>>365 俺が言いたいのはJPanelで共通化されてればいいだけでしょ?ってこと
そしてJDialogやJFrameですきなようにはりつければいい
コンポーネントをglasspaneやWindowサブクラスに貼れることを理解してないんじゃない?
369 :
デフォルトの名無しさん :2008/07/04(金) 00:00:31
クリップボードについてお聞きしたいのですが コピーしたときのイベントではなく 選択されたときのイベントを得ることは可能でしょうが (たとえばブラウザでテキストを選択するときのイベント)
クリップボードと関係ないだろ CaretEventでもみてみるといい
371 :
デフォルトの名無しさん :2008/07/05(土) 07:57:54
Swingを使う人は java使いで一番やさしいね
swingのバリデーターって皆さんどうやってますか? 自分の場合は、画面に対応したBean(StrutsのActionFormみたいなの)を作ってOKボタン等を押した時に 画面からBeanに変換するときにエラーになったら画面にエラー内容をリスト表示するようにしてるんですけど ちょっと非効率な気がしています。 何かかっこいいライブラリか何かでかっこよく解決できないですかね。
まずかっこいいの定義からだな
jgoodies
イベントを強引に呼ぶ方法ってありますか? SwingはMVCを採用していますが、既存のアプリケーションに接続する時、 GUIモデルのインターフェイスにアダプトさせるのはめんどくさいので、 リスナでデータの同期を行いたいのですが、 コンポーネントを初期化して、その次にリスナを登録しますが、 この次に強引にイベントを発生して同期を行いたいです。
fireXXXEvent()
それってコンポーネントのメソッドですよね。 モデルから飛ばす事は出来ないんですか? Swingのオブザーバパターンはモデルとリスナの間で採用されているはずです。 モデルから飛ばせないならば、ビューがプログラミングに必要以上に絡んでくる事になります。
ごめん日本語が難しすぎて良くわかんないんだけど、モデルの持ってる値をviewに反映させたいってこと? だったらBeansBindingあたりを調べれば幸せかもしれない。的外れだったらスマソ。
モデルをBean化してpropertyChangeイベントに対応させる。 ビューはpropertyChangeListenerにする。
Java Swing の質問 普段はタスクトレイに常駐してタスクトレイのアイコンをクリックしたら 起動(画面を表示する)というのはできるのですが、これをショートカットキー (例えば Alt-zなど)で起動する方法があったら教えてください
それSwingじゃなくてAWTだけどAWTもここか。 java6以降じゃないと出来んよ。 詳しくはjavadoc嫁。ググレ。
>>381 ホットキーの登録っててできるようになったんだ?
ホットキー対応したんだ 帰ったら試してみよっと
嘘つき!!
キツツキ!!
お手つき!!
餅つき!!
hotkeynasai
Windowsでメモ帳とかがデフォルトのフォントで使っているFixedSysを使いたいんだけど どうすればいいでしょうか?
フォント一覧取得してそれにでてこないの?
でないっす。
動的によみこんじゃえ
TrueTypeしか読めないんじゃね?
Fontsフォルダにあるのしかつかえんよ
java6から自分で用意したフォント登録できるようにならなかったっけ?
外注がC#で作ってきた糞重い、グリッドビュー(700×30)をswingのJTable で書き換えたらかなり速くなって思わずニヤニヤしてしまった。 まぁ、今更Javaでいくことにはならないんだけどね。
.netは10年前のjavaだ。
401 :
デフォルトの名無しさん :2008/07/16(水) 00:22:57
>Windowsでメモ帳とかがデフォルトのフォントで使っているFixedSysを使いたいんだけど >どうすればいいでしょうか Swing ではなく、SWT使用すればオペレーションシステムの ネイティブのリソースを使用するのでフォント一覧取得以外のフォントも できるよ。 しかも、ルックもよい!
SWTの開発環境のおすすめは? VE?
SwingでEclipseのビューのようなペインやタブの位置をドラッグ&ドロップで自由に移動できるようなものは作れないでしょうか?
というかドロッガブルなコンポーネントって結構簡単に作れるぞ。
難しいのは受け手だな
java.awt.Dialogやjava.awt.Frameのx(閉じる)ボタンを表示しないことって、 できますか?
無反応には出来るけど非表示は駄目だったと思う。 Windowだとのっぺらぼーだしな……
>無反応には出来るけど非表示は駄目だったと思う。 Windowだとのっぺらぼーだしな…… x(閉じる)ボタンの非表示にしてるサンプル、どこかで見た記憶があるんだけど。 どこだったか。
Windowサブクラス作ってmacのシート再現するとか
>Windowサブクラス作ってmacのシート再現するとか シートは実装したことがあるから、それでもいいんですが、 Windowの移動自体は可能にしておきたいんです。 例えば、長時間(時間不定)の処理をしている間にメッセージ等で 進捗表示する場合に使用したいんです。 こういう場合、xボタンが表示されていると、これ押すとどうなるの? という気持ち悪さがあるので。 ショートカットキーでWindowを閉じる場合は別の話で。
別に気にしない ということにしておけばおけ
>別に気にしない >ということにしておけばおけ まぁ、そういうことにしておきます。
414 :
デフォルトの名無しさん :2008/07/17(木) 10:24:01
Swing ではなく、SWT使用すればオペレーションシステムの ネイティブのリソースを使用するので ダイアログのx(閉じる)ボタンの非表示も できるよ。 しかも、ルックもよい!
SWTの開発環境のおすすめは? VE?
ボタンが押されたときにJTableを再表示するように作ったのですが、 選択されている行のみrendererを呼び出してくれません。 人為的にselectedRowを再描画する方法は無いでしょうか?
tableChanged
>>417 そういう動作見たことないんだけれども,どういうコードかいたんだ?
420 :
417 :2008/07/19(土) 16:54:58
>>419 JPanel pane = (JPanel)getContentPane();
JTable table = new MakeTable();
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane spane =new JScrollPane(table);
JSplitPane nsplit = JSplitPane();
nsplit.setRightComponent(spane);
pane.add(nsplit);
JTableの行をダブルクリック
pane.remove(nsplit);
nsplit.setRightComponent(spane2);
pane.add(nsplit, BorderLayout.CENTER);
nsplit.setVisible(false);
nsplit.setVisible(true);
ボタンの処理
pane.remove(nsplit);
nsplit.setRightComponent(spane);
pane.add(nsplit, BorderLayout.CENTER);
nsplit.setVisible(false);
nsplit.setVisible(true);
@JSplitPaneの右パネルにJTableを表示します。
AJTableの行をダブルクリックするとJSplitPaneの右パネルをJTableでないJPanelに書き換えます。
Bボタンを押すことにより@の状態に戻ります。
JSplitPaneの左パネルはJTreeであり、いつも同じです。
2つのパネルを切り替えたいのならカードレイアウトつかったら?
テキストコンポーネントのようなものを自作する際、折り返しなどはどのように実装すればよいのでしょうか? 確か前にそれをやってくれるクラスを見かけた気がするのですが・・ ないようであればゴリゴリやります。
JTextAreaじゃだめなの?
いえ、正直なところ今現在自作しているわけではないのですが、思い出せなくて気持ち悪かったので質問しました。
>>422 LineBreakMeasurerかな
うほーまさにこれです! すっきりしました。ありがとうございます。
TextLayout,LineBreakMeasurer,LineMetrix,GraphVecter...etc
EclipseでSwing関連を書いてるとメソッドの補完候補が多すぎておもってぇのなんのって・・・
低スペック厨乙
SwingするならNetBeansだろ
もっとましなコード吐いてくんないかなnetbeans
NetBeans以外はもっとひどいだろ
質問です AwtやSwingにはユーザーからの情報を保存するキャッシュ的なものはありますか? 例えば、背景色の選択・変更を行った後、再訪問した時にもその色を背景色にセットされたまま。 というアプレットは作れますか? 作れるということであれば、どの様な方法か教えてください
作れるが、やり方くらいググれ。宿題は自力でやりなさい。
SwingAppFWにそのものの機能があるな
436 :
デフォルトの名無しさん :2008/07/21(月) 03:07:24
437 :
デフォルトの名無しさん :2008/07/22(火) 19:57:09
SWTってOS関係なしに動作する?
いや、決められたOSの上で動く JavaVMだけサポートされていてもダメだよ というかSWTスレいけ
439 :
デフォルトの名無しさん :2008/07/22(火) 20:42:05
TextSS
Swingで複数の画面を作成しており、子画面から親画面の内容を更新することが多々あります。 その場合、親画面に各部品フィールドをパッケージアクセスで持ち、全画面を同じパッケージ内のクラスにし、 子画面から親画面のフィールドに直接アクセスをして更新しています。 こんな設計でよろしいのでしょうか?こういう場合のクラス配置、アクセス方法のお約束などはあるのでしょうか?
直接的な回答ではないけれど、親とか子とか特定のコンポーネントとの繋がりはあまり持たせない方がいいよ。
>>440 そんなことしたら親画面のレイアウトとか部品とか一切変更不可になるじゃん
親画面に、setStatusText(String text)とかインターフェイスを作って子から呼べばどう
呼ばれた親がどのコンポーネントをどう更新するかは自由に決められるでしょ
>>440 子と親がどんなデータモデルになっているかによるけど…
- 子と親で同じモデルオブジェクトを持つ
- 子は子画面での編集によりモデルを変更してそれを親に通知(PropertyChangeListerとかね)。
- 通知を受けた親はビューを更新。
みたいな構成はとれない?
>>443 親と子で同じオブジェクトを持つのは危険かと思います。
てゆうか何その設計。狂ってますよ。ちゃんと勉強してください。
1つのモデルを複数のビューから参照するのは別に変な設計でもないと思うが
swing って次バージョンから互換性が切られちゃうものが多いってほんとですか? java歴2ヶ月でようやく覚え始めたばかりだったのに(T_T)
>>446 10年くらい互換性はほとんどもってるよ
たまーにAPI的にまずいところとかあってなおされてるけど、
ほとんどは互換性のためにそのままにしてる
おかげでキャストが多くなりがちなのが厄介だが
>>447 有り難う。自分の無用な心配し過ぎなんですね>互換性
でもsun.comのドキュメント(マニュアル)ページにいく度に警告を読ませられるのは
なんだかなあ。。経験浅い人には結構痛いですわあれ。。(><)
このクラスの直列化されたオブジェクトは云々とかいうやつか? 直列化を使わなければまったく関係ないよ
ん?互換性ってSwingだったら直列化の話でしょ? 内部の変更が起こりうるからObjectOutputStream&ObjectInputStreamによる入出力は危険ですよ だから変更には柔軟なXMLEncoder&XMLDecoderを使えってことじゃないの?
>>445 同じインスタンスでしょ?
まぁビューからモデルを参照するくらいならいいのかな。
MVCをちゃんと守っていればの話だけど。
アプリケーション層でそれやると、バグが検出不可能になりますよ。
たくさんのインスタンスから参照されてる一つのインスタンスのどの状態についても、
参照してるインスタンスの動作を保証しないといけないから、これはめちゃくちゃになる。
じゃーシングルトンなんてのは存在そのものが悪?
>>440 です。
複数画面構成のアプリケーションを作成しており、ある画面アクションで自身とは違う画面の部品にアクセスする処理が多いです。
マウスアダプタもインナークラスではなく外出しにしているため、
アダプタやその他の画面のコンストラクタで、JFrameインスタンスを渡して内部でアクセスできるようにしています。
データの変更、他インスタンスの保持が面倒で、こんなことなら全てインナークラスで実装すればよかったと思っています。
プライベート変数にもアクセスできるので。
こんな考え方おかしいですかね。
>>453 イベントはどうしてもGUI部品と密接になりがちだから分離するとますますひどくなるのは常識かと
GUいつくるときにNetBeansとか使ってないのかな
JlabelのsetBackgroundで背景色を設定しても、背景色に変化がありません。 getすると変更した色が変えるので、値の変更字体はうまく言っているようです。 何か考えられることはあるでしょうか?
>>455 なんでGUI部品と密着になるの?
GUI、つまりSwingだったらビューとコントローラだけど、
これは完全に別レイヤーだろ。
リスナはモデルに対して依存するべきで、ビューは切り離すべき。
>>454 public static final intとかも悪いよ。カプセル化出来てない。
singletonでインスタンスを共有するのと例えば初期化引数でインスタンスを共有するのとでは意味が違う。
オリジナルの引数かコピーかという違いがある。
同じオブジェクトを参照する事が保証されない。
例えばクラス内でnewとかしたら一発で終わる。元の参照変数とは違うところを参照してる事になってしまう。
インナークラスとか基本的に禁忌だろ。
クラスは絶対に分離すべき。
わけの分からんオブジェクト持つなよ。
例えば、javaのライブラリを見てみれば分かると思うが、ちゃんとリスナは分離してある。
お前らオブザーバパターン理解してないだろ。
>>458 理解したうえで現実的に無理だといってるんだが
つまりNetBeans等GUI生成ツールは使い物にならないってことですね
使い物になるGUI生成ツールなんてあったか?
java beansの事をオブジェクト指向だと思ってるのか? あんなもん歪んだオブジェクト指向だよ。NetBeansなんて使ってはいけない。 どうしてコンポーネントにリスナが依存する必要があるんだ? javaはコンポーネントとモデルを切り離してある。ビューの変更はオブザーバパターンを利用して通知してる。 ビューの変更はモデルに影響するから、他のリスナなどはビューに依存する必要がない。 ビューなんか知らなくてもいいし、ビューの情報が知りたければe.getSource()すればいい。 すごく汚い方法だけど、仕方ない場合もある。 わざわざフィールドにコンポーネントへの参照をとって、依存する必要が全くない。
464 :
デフォルトの名無しさん :2008/07/30(水) 00:00:55
Opaqueって「おぱきゅー」って発音するんですか?
>>461 イベントの通知そのものはだれも問題にしてないでしょ
結局そのあとそのコンポーネントをがりがり触る必要が出やすいから
分離すると開発しにくくなってしまうというだけ
アクセサどれだけ生成するんだよと
コンポーネント増えたり変更されたら終わりじゃないかと
フロントエンドってのはロジックと違って頻繁に手が入るからな
>>466 ですよね。
別出しにしたイベントクラスをインナークラスにしておけばよかった。
SwingWorkerも内部において、doInBackground内で、すぐに別だしビジネスロジッククラスを呼び出すクラスの分け方が
なんだかんだで、コーディングしやすい。
>>463 ありがとーーーーーーーーーーーーーーーーーございます。
なきそうだったので助かりました。
>>466 仮にアクセサが必要だったり、同じオブジェクトを共有しなければならないなら、
それらのクラスは最初から分離されるべきではないという事です。
なんでコンポーネントを触るのか理解出来ない。モデルを触って通知させろよ。
コンポーネントが増えても描画方法が変更されてもモデルはノーダメージです。
お前はMVCモデルが全く理解出来ていない。
ラベルの色が変わるとかサイズが変わるとか コンポーネントの状態をいじることってのは頻繁にあるんだが そんなの外出しにしていてはまともに開発するのは難しいよ すべてのプロパティに対してアクセサ用意するのかよ 現実解というもの勉強してよ
それはオブジェクト指向ではないな。 ビューの属性をリスナでいじるなんて気が狂ってるよ。 お前、コンポーネントを継承したサブクラスにコードベタ書きしてるだろ。 良くプログラミングの本とかに書いてあるやり方。 良く使うフィールドとメソッドは一まとめにしてカプセル化する。 これしか必要じゃない。 いちいちアクセサ用意しなきゃいけないような気がするのは、 オブジェクトを構造体、つまりデータの塊としか思ってないから。 仮にアクセサをつけないといけないとして、それが妥当でないならばカプセル化を目指すべき。 オブジェクトはなるべく不変であり、遷移する状態が少ない方が管理がしやすい。 現実解もなにもない。 君は設計から間違った考え方をしてるから、わけの分からんコードを書くハメになる。 MVCモデルをちゃんと勉強してください。 おれの方が君より100倍早くコーディング出来ると思うわ。 悪い設計はメンテナンスが出来ない。お前、テストコードとか書いた事ないだろ。
ああ夏か・・・
>>471 ビューの属性変更を例えばアクションイベント等以外で書くの?
ビューの属性って何? Dimensionとか? 何がしたいのかさっぱり分からないが、 仮にだが、スライダを動かすと何かコンポーネントが縮んだり伸びたりするような事がしたいのか?
>>474 おれもよくわからんがプロパティのことだと理解しようと思ったが
詳しいことは
>>471 にきいてよ
その100倍頭いいぼっちゃんすごいな・・・ 自分の書いたことすら忘れるとは
478 :
デフォルトの名無しさん :2008/07/30(水) 21:42:56
>>465 ありがとう。
今まで恥ずかしいこと言ってった・・・
だから気が狂ってるって言ってるだろ。 属性というものを気にする事自体気が狂ってる。 クラスはインターフェイスのみを公開し、フィールドはすべて隠蔽する。 publicなフィールドが許されるのはRectangleとかPointくらい。 あれはjavaの格言にも書いてあるが、速度の問題でそうしたのだろうと。 おれはpubliclフィールド嫌いだけどね。 というか自分のフィールドに対しても直接アクセスせずに、プライベートなアクセサを作る。 それの方が変更に強い。
>>479 プライベートなアクセサ か。参考になる。
プライベートなアクセッサって普通じゃね? アクセッサは条件のチェックする場合があるからアクセッサ使ってるわけでそれがたまたま公開する必要がなかったと・・・。 というか夏厨がMVC,MVC言ってるがjavaのMVCは本当のMVCじゃないぞ。
>>482 条件チェックとか、事前条件をコードに書くんですか?
やめてください。せめてアサーションでお願いします。
契約によるプログラミングを学ぶ為に、バートランドメイヤーのオブジェクト指向入門を読んでください。
javaが本当のMVCではないのは知ってるし、
どっかのページに書いてあるよ。
modified MVCって言ってる。
つまりコンポーネントという単位にビューとコントローラを一緒にしてる。
理由はそれらは関係が密な事が多いから。
公開するあるなしに関わらず100%アクセサを書く。
そうした方が柔軟になるから。
マーチンファウラーは、ひとまずはフィールドに直接アクセスしといて
必要になったらアクセサを書くと言ってるがそれでも良い。
理由はEclipseには自己カプセル化のリファクタリング機能があるから。
484 :
デフォルトの名無しさん :2008/07/30(水) 22:18:32
>>484 バートランドメイヤーの本を読んでからお願いします。
486 :
デフォルトの名無しさん :2008/07/30(水) 22:27:25
プライベートなアクセサがダメとか思ってる時点でカプセル化というものが分かってなくて、 結局構造体の延長でしかない。 デザインパターンも勉強してないだろうし、インターフェイスがなぜあるのかも分かってないと思う。 単純なんだ。関連のあるフィールドとメソッドと一緒にして凝集度を高める。これだけ。
100倍坊やはJButtonクリックしたらJLabelの色を変えるコードさらしてみ 上で言ってること全部矛盾するから
お前のところの設計者に聞けw お前ら土方が必死にならないといけないのは設計者がカスだからだよ。 マーチンファウラーは「よい設計はラピッドな開発の為に存在する」と言ってる。 つまり彼は設計こそがすべてと言っても過言ではないと言っているのだ。 ちなみにアランケイも崇拝している。 The best way to predict the future is to invent it.
491 :
デフォルトの名無しさん :2008/07/30(水) 22:43:58
>>489 JLabelにはモデルがない。
http://java.sun.com/products/jfc/tsc/articles/architecture/ どうしてMVCモデルというものが提案されたのか考えて見てほしい。
理由は簡単だよ。
まずはコンポーネントにベタ書きのコードを書く。
そしたらクラスの抽出が出来た。それがモデルだった、それだけの話。
初期化でモデルを入れて、自分をリスナ登録する。多くの場合ね。
例えばJTableとか、ソースコード読んでみれば分かるよ。
JLabelはモデルが知れてる。String程度だ。モデルを分離する必要がない。
だからJLabelに関していえば、直接モデルに訴えかければいい。
仮にJLabelからモデルを抽出するとすれば例えばこうなる。
class ColoredString{
String str_;
Color color_;
ColoredString(String str){
str_ = str;
}
setColor(Color cr){
color_ = color;
}
..
}
モデルを抽出する必要がないと言っている。setForeground使うんだろうけど(そんな事したことないで分かりませんけど)、
Viewに直接訴えかけるというのは邪道だね。
だけど、Swingの方でこんな小さなクラスならモデル抽出する意味ないわ、っていう事にしたんだから従うしかない。
麻布卒は、帰っていいよ。
>>480 プライベートなアクセサなんてカプセル化として当たり前だから
そういうレベルの話をしてるわけではないのだよ
>>492 できねーならもうつっこむのやめれ
>>493 オブジェクト指向の話になったのでつい熱くなってしまった。
今は反省している。
ROMります。
結局
>>453 の考え直した方向で正しいんだよね。
>>492 のように限界がするくるから。
MVCがどうだとかモデルに対してどうだってのはイベント発行後の話であって、
今回の流れには関係ないわけだし。
くだらね。
いつ限界が来た?
Swingのこの設計は妥当。
限界でも何でもないし、妥当な設計をしてるからそれを使うだけだろ。
モデルのあるオブジェクトについてはモデルに対してアクセスすべき。
インスタンスの保持が面倒とか意味分からないわ。
リスナに隔離すればいいだろ。
元のモデルを汚す必要がないし、データの変更ってなんだ・・・
コンポーネントが変更されればちゃんとモデルに通知される。
なんでMVC理解してないやつばかりなの?
理解する気がないのか?
とりあえず
>>492 に紹介したページを読んでから考え直せ。
インナークラスとか気狂ってるわ。
とうとう発狂してしまったようです インナークラスがなぜでてきたかわかりもしないで
久しぶりに「夏ってスゲーなー!」って思ったw
ひぎぃ、やめてくだしあ 眠いんで寝るわ。 お前らレベル低すぎて付き合い切れない。
猛暑が続いているので仕方あるまいな。 STOP!地球温暖化。
>>500 閉鎖しててわからん
使用しているサービスクリックしたらおっぱいでふいた
そもそもC++をベースとして言語仕様つくったJavaは常に現実的な解として成長してきたんだし JavaBeansにしても後付け仕様、Swingにしても10年以上前の話で、 互換性が最重要である以上どうしようもなかったんだがね。 学生かぁ。 正しいものが常によい選択されるわけではないという社会の基本を勉強できてよかったね。 趣味ならばいくらでも開発に時間をかけることが出来るが、食っていくにはそれも無理で 納品する成果物もさまざまな妥協の産物なんだよ。
夏だな。
机上の理想論でしかない。
>>506 のいうとおり結局、妥協の産物でしかない。
> C++をベースとして言語仕様つくった 文法だけは確かにC/C++に似てるが…
>>506 されるわけではない、のではなくて、正しいものが分からないからする事が出来ないの間違いだろ。
> 趣味ならばいくらでも開発に時間をかけることが出来るが、食っていくにはそれも無理で
> 納品する成果物もさまざまな妥協の産物なんだよ。
ここらへんが狂ってる。
設計が悪いと開発が遅くなるに決まってるだろ。
設計の段階である程度の妥協はあるかも知れないが、MVCを放棄するとか笑える。
クラスの分離もお前ら出来ないだろうし、クラスが構造体としか見えてないから、結局カプセル化出来ない。
保守性がない、バグだらけ。ちょっといじったら変更が伝搬してあぅあぅになる。
そうやって中途半端な経験を積むとすぐに経験がどうとか、現実はどうとか偉そうな事を言い出すが、
結局のところ、何も分かってない、あるいは勉強する時間がとれないから自分の得た経験が正しいと主張したいだけ。
そうだな、言ってみれば図面通りに電子工作をやって、電子回路分かったと勘違いしてるようなもの。
日本の企業なんかクズしかいない。
設計者から実装者まで全員クズ。
おれはプログラマになるならヨーロッパに行く。
これだから日本のITはしょぼいんだよ。
文系がプログラマになるとかwww
>>509 いってらっしゃい。土産は食い物がいいかな。
哀れすぎて抱きしめたくなっちまうよw
夏厨って本当にいるんだなぁ 閉鎖してないほうのblogみてもすごいね
>>512 おれはブログ1つしかやってませんよ。
testosteroneってやつです。またpublicにしたんで読んでもらえれば^^
>>513 君おもろいね。次は、「このスレのヤツらは英語も読めない低脳」とでも言うのかネ。
なぜそういう話になるのか。 ずいぶん自虐的ですね。
>>513 がんぱってる感じは出てるのだが、、、もっとたくさん英文嫁
>>517 そういう自分は何もしないくせに他人にだけ偉そうに更なる努力を問うところが低学歴っぽいな。
ニュースのコメを見ててもそう。
しかも一般受けするであろう、「一般大衆の気持ち」を予測して代弁しているだけであってあれは個人的な意見でもない。
パソコンが分からない人に限ってXPはすぐ落ちるだなんだと言い出す。Vistaは重いだの言い出す。アホかと。
じゃあお前らMicrosoft入って変えればいいだろと言いたいね。
結局なんやいうやつは自分では何も出来ないクズなんだよ。
英文なんか読んでも英語なんか書けないよ。
おれは日本人にしては相当英文を読んではいる方だと思うよ。
辞書も使ってないし、頑張ってもいない。適当な「たわごと」だって書いてあるだろ。
低学歴は字も読めないwもちろんまともなプログラムも書けないw設計も出来ないw
ttp://naoko.wankuma.com/designpatterns/designpatterns_0020_flyweight.html 君たちはバグや変更がどう伝搬するかが分かっていない。
そもそも分布定数回路や電波工学を勉強していないから伝搬という概念が分からない。
マクスウェルを理解しない人が伝搬を説いても空虚なだけだ。
英語が出来ない人が英語を説いても空虚なようにw
この前、同じオブジェクトを共有するのは当たり前だろとか言ってた池沼がいて、
そんな事としたらえらい事になると言った。
シングルトンで、かつ不変オブジェクトである事が約束されるならそれもいいと言ったが、
最後に書いてあるな。
> ただし、Flyweight パターンで、Factory が管理するようなモノは、状態遷移がないものに限ります。
> Factory から取り出されるモノは、どこで呼んでも同一なわけですから、
> どこかの呼び出し元で変更を加えられてしまうようなモノだと、他の箇所に影響を与えてしまうからです。
OSが重いなりバグがあるなら自分で作ればいい。 政治に不満があるなら東大入って政治家になって変えればいいだろ。 日本のオリンピック選手は弱いっていうんだったら自分でやって金メダルとってこいよバカ。 テレビが面白くないっていうんだったら見なければいいし、 それでも見たいっていうんだったらフジでもTBSでも入社して革命起こしてくればいい。 このスレで「現実解」、「社会」という言葉を聞いて吐き気を催した。 そんなものは存在しえないよ。現実解というのはネガティブな言葉だから、「折り合い」あるいは「境界」というのともまた違う。 完全にネガティブ、出来っこないという初めからの決め付け。 能力不足を現実のせいにする。 同じなんだよ。 いつもそうやって言い訳して、努力をしてこなかった。 現実的にはこんなもんだろ、と思って「妥協」してきた。 攻めずして攻めたような気になってきた。 だから日本のソフトウェア業界はしょぼい。 同じソフトウェアを作るとして、 Googleのチームと君たちでは書くコード、設計が同じになると思いますか? 答えはNOです。 開発速度は一人あたり1000倍の差が出るでしょう。
今度は1000倍かよ。 少なくともお前は一般的な技術者と比べて頭悪いんだから関係ないこのスレからでていけ。
>>518-519 えーと、釣りですか?それとも本気?
どっちにしてもイタいんですけど…。
>>521 夏はしかたないんだよ。
sophomoreってやつなんだよ
UIDefaultsに格納されているUI関連のデフォルトプロパティはどの時点で読み込まれているのでしょうか? 例えばButton.backgroundなどです。
すみません。解決しました。 ComponentUI#installUI()でやるのが基本みたいですね。 複雑な仕組みなのだろうとすぐに質問してしまいました。すみません。
いいかげん夏厨はスルーしろよ。食いつくから釣られるんだろうが。
JTextComponentで、「このElement以下のみ表示」というようなことはできますでしょうか?
なあなあ、MVC化してどうしてカプセル化出来るんだ?
>>527 MVC 化はカプセル化が目的じゃない。結合の粗密の問題。
疎結合も何も、モデルから通知する必要があるから分離しただけだろ。 通知された時に再描画する方が効率的だから。
それはjavaの都合であってMVC関係ない気がするが・・・
基幹業務アプリケーションってMVCの効果が出にくいと思うんだけどみんなはどう? …っていうかこういう話をしているスレってどこかない?
>>531 結局JavaBeansのプロパティをどこにマッピングするかという情報だらけになるからね
533 :
デフォルトの名無しさん :2008/08/06(水) 09:25:30
現在はSWTのほうが主流だぞ いつまでもSwing使ってんなよ
どこの 2004 年から来た人だ。
535 :
デフォルトの名無しさん :2008/08/06(水) 13:21:14
>>526 このElement以下ってどういう意味ですか?
Documentの階層で、『あるノード以下』という意味です。 それ以外を削除することでそれっぽい事はできますが描画するルートを変えたいだけなのでちょっとですねぇ…
>>536 ElementとViewのjavadoc読むと良いよ。
ただ、勉強はできるけど、応用が利かないアホな厨房にとって、
モデルの共有は禁忌らしいけどな。
>>537 場合による。ミディエータかリスナになら共有されてもいいというのが新理論。
エクセプションをキャッチできなかった場合ダイアログを出したいのですが、 エクセプションのコールバックイベントなどあるのでしょうか?
エディタのタブ背景をプロジェクトによって色分けするプラグインありますか? 前半で似たような名前があるとタブを見ただけでは解かりにくくて。
>>539 Thread#setUncaughtExceptionHandler
Thread#setDefaultUncaughtExceptionHandler
>>540 それSwingと関係ある?スレタイ読んだ?
マルチの相手をするな
Swing Hackのようなおもしろい事やってるサイトがあれば教えてください。
SwingHackはhackシリーズとは思えない内容の悪さで有名
聞きたいのはSwingHackの批評ではなく、目からウロコ的な技術をいろいろやってるサイトです。 おもしろいというのも人によると思うので、完全に主観で結構ですのでよろしくお願いします。
547 :
70 :2008/08/13(水) 13:40:20
ダイアログの中抜けがひとまず解決しました。原因は意外なところにありました。 自作のダイアログはJDialogを継承(extends)していますが、そのコンストラクタで new JDialogしていたのが直接の原因だったようです。普通にsuper(引数列)したら 正常に表示されました。ループの中でnew MyDialogして、入力が終わったら、 disposeしています。ただ、読み仮名の受け渡しにYomiGanaクラスを作り、 ループとダイアログのスレッド間に対するGuarded Suspensionパターンを使う必要は あったようです。まだダイアログの動作が不安定で完全解決ではありませんが、 当初意識していた問題は回避されたようです。今のところinvokeLaterやinvokeAndWaitは 使わずに済んでいます。 皆さんの励ましで、結城さんのデザインパターン入門マルチスレッド編は読み終えることが できました。勉強になりました。ありがとうございます。
548 :
70 :2008/08/13(水) 13:51:38
書き忘れましたが、今のところループの中ではスレッド起動をせず、 同じスレッドの中でnew MyDialogでよかったようです。
自作の編集画面をモーダルで表示させることは可能でしょうか。 ネットで調べてみましたが、はっきりとできるともできないともかかれていませんでした。
自作の編集画面をJDialogに乗せてJDialogをモーダルで表示すればいいんじゃない
>>550 new JDialog()のaddにセットしたらjava.lang.IllegalArgumentException: adding a window to a containerでエラーになりました。
new JDialog(jframe, true)だと、画面が2つ出てしまいうまく動いてないようです。
これら2つの呼び方は間違っているでしょうか?
編集画面のコンポーネントをJFrameに乗せるのではなくJDialogに直接乗せる
>>552 こんな感じですかね。
JDialog d = new JDialog();
d.setModal(true);
for (Component c: jframe.getComponents()) {
d.add(c);
}
なんで最初からJDialogにaddしない jframe要らんのちゃうか
>>554 ごもっともなのですが、要求されていることがめんどくさく、設定によってモーダル非モーダルに選択できるようにといわれていまして、
このような仕様になっています。
いろいろ画面を開いたり消したりを連続していると、OutOfMomoryになります。 終了するときはdispose()しています。ただfinalizeが呼ばれないのでメモリ消去できていない気がします。 これはアプリ側でdisposeしたフレームを参照しているところがどこかしらあるからということになりますでしょうか?
setEnabled(false);にしてグレーアウトしたJMenuItemをクリックすると、 そのマウスイベントが呼ばれるのは仕様でしょうか?
そういう動作をするとしたら仕様だろうねえ
559 :
:2008/08/14(木) 17:42:28
アクションイベントなら、setEnable(false)にしたら呼ばれんと思うけど マウスイベントなどの低レベルのウィンドウシステムのイベントはどうしても呼ばれるんじゃないの。
DefaultTreeCellRendererのgetTreeCellRendererComponentでラベルを返しているのですが、 ラベルの文字を増やしサイズを大きくし、それをreturnしていますが。最初の幅以降が「...」になります。 jdk1.6です。 「...」にしないで変更された幅で表示するにはどうすればよいでしょうか?
試してないけど、毎回サイズ変更したら?
>>562 毎回サイズを更新していますがダメです。setSize()、setBounds()両方で、幅を固定で100にしているのですが、
...になってしまいます。
revalidateしてもだめ?
つーかDefault〜を拡張してるならsuper.〜でサイズはちゃんとやってくれたと思うんだけどなぁ
>>564 ダメです。なんで・・・。
元の文字
あああ
変更後
あああ...
getTreeCellRendererComponent(... {
JLabel label = new JLavel();
label.setBounds(new Rectangle(0, 0, 100, 10));
label.revalidate();
return label;
>>565 の書いてる通り、DefaultTreeCellRendererの拡張なら
super.getTreeCellRendererComponent(...);
setText(...);
return this;
これでいいんでない?
getPreferredSize() をオーバーライドしてみたら?
TransferHandlerで、アプリケーション内のコンポーネントへのドロップか、デスクトップ上へのドロップかを判別するにはどのようにすればよいのでしょうか?
ちょっと説明が分かりにくいですね。 やりたいのは実際には存在しないがこれから生成することができるデータをドロップのアクションから生成&ファイルの移動で、例を挙げると ZIPファイルのエントリーのツリーがあり、それはまだ解凍されていないが、DnDのアクションを受け、そのドロップ位置がデスクトップ上であれば該当するディレクトリへ解凍し移動する。 という感じのことです。
連投すみません。 現状を説明するのを忘れていました。 現在はドラッグ開始時に呼び出されるcreateTransferable(JComponent c)内でファイルを解凍、テンポラリーファイルとして保存しておき、それを含めたファイルリストのTransferableを作成。 という方法で実現はできていますが、このcreateTransferable内でそんな重い処理をするのはまずいので何か別の方法はないかと思い質問させていただきました。 理想としては現状の処理をドロップ時に行いたいのです。 このような細かいのはやはりjava.awt.dnd.*を使うべきなのでしょうか?
java.awt.dnd.*を直接使っても同じだった気がする 解決方法は知らない
デスクトップへのDnDはSWT使わないと無理なはず。少なくともawtじゃ無理。
>>573 そうでしたか。これからdndパッケージ調べてもし解決法が見つかればまた書き込みます。
>>574 デスクトップへのDnD自体は可能なんですよ。DataFlavor.javaFileListFlavorのTransferableを作ればいいだけです。
問題は作るタイミングなんです。ドラッグ開始で作ってたら他の関係のない動作の時まで不必要な処理を行わなければいけなくなるので・・
>>567 以下の通りにしても、「aaaaaaa...」になります。revalidateを入れても入れなくても同じです。
ただ、ツリーで「+」「-」を一度でも押すと、幅調整がちゃんとなり問題なく表示されます。
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
setText("aaaaaaaaaaaaaaaaaaaaaaaa");
tree.revalidate();
this.revalidate();
return this;
>>576 手元ではならないよ。
要するに、その部分じゃないんじゃないの?
コード全体をどっかにアップしてよ。
>>577 本当に単純なんです。
イベントリスナ込みの機能になってますが、まだ実装していないので悪影響無しかと。
public class MyRenderer extends DefaultTreeCellRenderer implements ActionListener {
public final Component getTreeCellRendererComponent(final JTree tree, final Object value,
final boolean sel, final boolean expanded, final boolean leaf, final int row, final boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
setText("aaaaaaaaaaaaaaaaaaaaaaaa");
tree.revalidate();
this.revalidate();
return this;
}
public final void actionPerformed(final ActionEvent e) {
}
}
これをJtree.setCellRenderer()にセットしているだけです。
>>578 そういうんじゃなくて、
こっちで手を入れないでコンパイル→実行できるヤツを上げてよ。
自分で思っているところじゃないところがおかしいんでしょ?
>>578 それJTreeにセットして実行した?
まったく問題ないよ。
ちなみに
tree.revalidate();
this.revalidate();
は必要ないよ。
それからずれるけどTreeCellRendererがActionListenerを実装するのはどうかとおもうw
モデルのchangeNodeを実行したとたんに直りました!
ボタンAのキーエンターが押されたとき、マウスイベントを発生させたいのですが方法がわかりません。 ご教授をお願いします。
>>582 それはどんな理由で、マウスイベントでなくてはいけないの?
ほかの方法の方が良いのではないの?
>>583 本当にその通りで、マウスのイベントアクション処理を呼びたいだけなんです。
ただ別出しにすると面倒で(数があるので)やるべき処理ではないとは理解しています。
暫定処理として動かすためにです。とりあえず。
よろしければ方法を教えていただけないでしょうか?
>>584 よくわからないがjava.awt.Robotでも使えば?
ボタンAのキーエンターがいまいちよくわからないんだけど・・ JButton a = new JButton(); getRootPane().setDefaultButton(a); こういうことじゃないの?
ボタンにショートカットを設定したいってことか?
デフォルトボタンにしたいってことかな?
久々にエスパーが必要な質問だな
>>572 createTransferableでつくるTransferableは
解凍するための軽量な情報を盛り込んで適当に作っといて、
Transferable#getTransferData(DataFlavor)が呼ばれた時のflavorが
DataFlavor.javaFileListFlavorだった時に解凍処理を盛り込めばOKじゃないの?
getTransferDataFlavors()で返すDataFlavor配列は
ローカルオブジェクトのFlavorをjavaFileListFlavorより先にしとけば
Swing内にドロップしてもファイル転送されないでしょ。
解凍処理は一旦createTempFileかなんかの一時ファイルへZipを解凍して、
その一時ファイルのアドレスを入れたList<File>をgetTransferData()で返せばよさそう。
デスクトップへのドロップ時には、解凍されるまでSwing固まると思うけど。
>>590 なるほど!!TransferHandlerでやることばかり考えてTransferableの方でって考えがなくなってました。
それは確かに容易に実装できますね。
解凍処理については元々そのようにするつもりでした。進行状況表示させてモーダルにでもすることにします。
本当にありがとうございます!
jlabelって座標で位置指定できないんですか・・・orz
593 :
デフォルトの名無しさん :2008/08/19(火) 22:38:56
ヒントがかえって混乱させそうなので補足。 JavaのGUIにはレイアウトマネージャってのがあって、あるコンテナに含まれるそれぞれのコンポーネントのレイアウトをそいつが決める。 で、座標指定するってことはそれらを無効にする必要があるため、JLabelが乗ってるコンテナをsetLayout(null)してあげて、そのあとJLabelをsetBounds(int,int,int,int)かなんかで位置、サイズ指定する。 こんな感じ。
うわ。とっても余計なお世話だったw
>>597 いえいえ、とても助かりましたwありがとうw
まあnullレイアウトは使わない方が良いんだけどな。 動的レイアウトに対応できなくなるから。
>>595 nullにすると他のも全部手動で設定しなきゃいけなくなるから
OverlayLayout使って他のComponents入れたPanelと
ラベルだけ入れたPanelを入れて、
ラベルだけのPanelにemptyBorderを設定すればうまくいく、
かもしれない。
nullレイアウトはつかわんほうがええ 絶対座標が使いたいならAbsoluteレイアウトつかえ 実際のところ絶対座標が必要な場面ってのはないけどね
>>585 ありがとうございます。
できれば、マウスカーソルの移動はさせたくないので、内部的に適宜イベントを発生させたいなと考えています。
ComponentのprocessMouseEventはprotectedなので、イベントリスナーの実装クラス内で呼び出すことはできないと思いますが、
内部的に他のComponentのイベントを発生させることはできないのでしょうか?
>>602 >>584 に「別出しにすると面倒」ってあるけど、それが最適な方法だと思う。
リスナーを登録するときに持っておくのもある。「別出し」とあまりかわりそうにないけど。
MouseListener mouseListener = listener;
button.addMouseListener(listener);
listener.mosePressed(new MouseEvent(...)); // 必要なメソッドを呼ぶ
MouseEventを使っていなければnullでもOK
あとは、Component#getMouseListeners()でできそう。
リスナーが一つしかないなら、決め打ちで
button.getMouseListeners()[0].mouseClicked(new MouseEvent(...)); // 必要なメソッドを呼ぶ
これで「とりあえず」できそう。
余談。最近、JButtonにアクションリスナーがあるのにマウスホイールリスナーも使った。
修正 listener.mosePressed(new MouseEvent(...)); // 必要なメソッドを呼ぶ mosueListener.mosePressed(new MouseEvent(...)); // 必要なメソッドを呼ぶ あと補足、listenerは内部クラスが前提になっている。 MouseListener mouseListener = new MouseListener() { public void mousePressed(MouseEvent e) { ... } });
修正2 × MouseListener mouseListener = listener; button.addMouseListener(listener); listener.mosePressed(new MouseEvent(...)); // 必要なメソッドを呼ぶ ○ MouseListener mouseListener = new MouseListener() { public void mousePressed(MouseEvent e) { ... } }); button.addMouseListener(mouseListener); mouseListener.mousePressed(new MouseEvent(...)); // 必要なメソッドを呼ぶ
これ見てて思ったけどSwingのテストPGってrobot使うの?もしくはnew MouseEvent()で仮想イベント発生?
AWTUtilities.setWindowShape使ってみてたんだけど、PopupまでShapeの形に区切られるね@Win 正式版では修正されるのかな。
>>606 まぁたまにあるといえばあるが、そんなに多くないかな
質問内容見る限り本当にRobot必要とは思えないけど
>>607 setWindowShape した場合はデフォルトで
setLightWeightPopupEnabled を false にしないとって話かな?
Swing側でデフォルト値変えてよって話ならバグ報告すれば対応してくれるかもしれん……
>>606 使った事ないけどSwingUnitってのがある。
java.awt.Frame,java.awt.Dialog#setUndecorated(true)を実行すると、 resizableプロパティがtrueでも、マウス操作でウィンドウのリサイズが不能になります。 この挙動はjavadocに記載されていませんが、これは仕様?仕様漏れ?バグ?でしょうか? setUndecorated(true)を使用しながら、ウィンドウのリサイズを可能にする方法はありますか?
デコレーションがなくなったらそりゃーリサイズできないでしょ? もしリサイズさせたいならMouse**Listenerで実装しないとね。
そのBTSの報告者は、612とは逆に、ソラリスだとデコレーションなくしても リサイズできちまうぞー、と報告してるのね。
>>613 ありがとうございます。
環境はWindowsです。RFEってことは、将来改善されそうですね。
今まで報告したバグも放置されっぱなしな事が多いですし、期待してませんが。
>>614 >デコレーションがなくなったらそりゃーリサイズできないでしょ?
この意味が分からないのですが、デコレーションがなくなったら何故リサイズできないのでしょうか?
デコレーションとリサイズに関連性があるのでしょうか?
setUndecorated()とリサイズが併用できないのであれば、
MouseListener,MouseMotionListenerで自前で実装しますが、
簡易的な回避策等はありませんか?
617 :
デフォルトの名無しさん :2008/08/30(土) 17:10:32
今ウィンドウに配置されているテキストエリアやボタンを、”送信”ボタンを押したときにすべて削除して 新しいレイアウトにしたいのですが、どうすればいいでしょうか?
ヒントだけ。 getComponentsである部品に載ってる子供が全て分かるので、それぞれ取り除く。 あるいは、CardLayoutを使って中身をそっくり別物にする。
619 :
デフォルトの名無しさん :2008/08/30(土) 17:55:28
>>618 レスありがとうございます。
今やっているのは
this.getContentPane().add(パネル1, BorderLayout.SOUTH);
で最初にパネル1を表示させ、(パネル1はFlowLayoutでテキストエリアとボタンがついています)
ボタンを押すと
if(ボタンが押されたら){
remove(パネル1);
this.getContentPane().add(中央パネル, BorderLayout.CENTER);
this.getContentPane().add(北パネル, BorderLayout.NORTH);
this.getContentPane().add(西パネル, BorderLayout.WEST);
this.getContentPane().add(南パネル, BorderLayout.SOUTH);
}
という形でやっているのですが、ボタンを押すと固まってしまいます。。
すいません。最小化して再表示したら出来ていました。。 スレ汚しすいませんでした。いちいち最小化なんてor2
本当に削除と追加を繰り返す実装が必要なのかどうか考えたほうがいいかもな
imageならImageObserverあったけどコンポーネントにあったっけ?
623 :
デフォルトの名無しさん :2008/08/30(土) 18:45:06
while(comp.isShowing() != true){ repaint() }
>>620 念のためいっておくと最小化と再表示が必要なのは君のコードが悪い。
それはおいておいて、とりあえずCardLayoutのマニュアルを読んでくれ。
625 :
デフォルトの名無しさん :2008/08/30(土) 23:27:43
どんなコードがいいんでしょうねぇ
本当に画面のコンポーネントを動的に削除したりするのが目的なの? そもそも本当はCardLayoutのような切り替えがほしいだけじゃないの? ってみんな指摘してるでしょ そこはどうよ
すいません。 レス有難うございます。625は自分ではないです。申し訳ありません。 カードレイアウトで処理することを目指して見ます。
Componentを非表示の状態で何かに内容を描画したいのですかどのようにすればよいのでしょうか? 具体的にやりたいことは、タスクトレイから出てくるようなアニメーション付きのポップアップです。 手順は今のところ以下のようにしています。 ・対象コンポーネント(Window)を一旦表示状態にする。 ・BufferedImageに対象コンポーネントを描画。 ・対象コンポーネントを非表示に。 ・ダミーウィンドウ(画像を描画するだけのウィンドウ)を表示。 ・javax.swing.Timerでダミーウィンドウのアニメーション(位置変更&画像切り取り)開始。 ・終了したら対象コンポーネントを表示しダミーウィンドウdispose 一旦表示するといっても一瞬ですので気づかない程度ですが気持ちが悪いのでなにか他の案があれば教えてください。
フレームAから、フレームBを生成したとき、 フレームBを閉じたら、フレームAにフォーカスを充てるようにしたいの ですがどうしたらいいのでしょうか? また、上記のとき、フレームBを閉じてしまうと、 フレームAも同時に閉じられてしまいます。 フレームAが閉じられないようにするにはどうしたらいいでしょうか? アドバイスお願いいたします_(..)_
ちなみに、フレームBを閉じたとき、隠すようにすれば 画面上からはフレームBは消え、フレームAも画面上に残すことはできます。 しかし、これは根本的な対策ではないと思います。。
631 :
629 :2008/09/03(水) 10:29:04
>>628 非表示にする前にgetGraphicsしておくとか。
>>632 元々表示されていないものなので、「非表示する前」というわけにはいかないのです。
試しに子コンポーネント取得でpaintさせたらうまくいきました。 for(Component c:window.getComponents()){ c.paint(g); } すみません。
>>629 なんで閉じてもいないフレームがかってにとじられるんだ?
該当部分のソースをさらしてみ
エスパーすると EXIT_ON_CLOSE を DISPOSE_ON_CLOSE にすればいいんじゃない
Window#addNotifyで表示可能に出来るみたい。
ハイ 質問 \○_
KeyListenerで3つのキーの同時押下の検出についてなんですけど
(2つキーが押されている状態でもう1つキーを押すとか)、
最後に押したキーの検出がうまくいかないのだな。
うまくいかないってのは、環境にもよるけど
OS:Ubuntu
JDK:Sun JDK 1.6.0_06
のとき
3つ目のキーを押しても押されてないことになる組み合わせがあったり、
ちゃんと押されたことを検出する組み合わせがあったり。
OS:Windows Vista
JDK:Sun JDK 1.6.0_06
のとき
試したうちでは、どの組み合わせでも
3つ目のキーを押しても押されてないことになる。
ソースはここ。
http://docs.google.com/Doc?id=ddpgzg76_21f7tvdd4z
ハードウェア構造上の問題で3つの同時押しを検出できないキーボードがある Nキーロールオーバーでぐぐるといい
>>640 そゆこと (;_;)
ちょっとしたゲームを作ってたんだが、それはせんかたないね。
Thx.
お高いキーボードをPS2でつないでる場合はNキーはいるけどそれを期待し てゲーム作るわけにはいかないよね… 厄介な伝統的問題だ。
>>642 PS2でもUSBでもいろんなキーボード触るとわかるが
同時押しが出来るできないはさまざま
PS2だからUSBだからということにはならないし、高いから大丈夫というわけでもない
644 :
629 :2008/09/03(水) 20:12:44
>>635 // AFrameのソース
helpBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
EventQueue.invokeLater(new Runnable() {
public void run() {
BFrame.getInstance().setVisible(true); // BFrameの表示
}
});
}
});
// BFrameのソース
public static BFrame frame = null;
public static BFrame getInstance(){
if(frame == null){
frame = new InformationSoftFrame();
//frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); frame.setSize(540, 560);
frame.setTitle("ヘルプ");
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setIconImage(infoIcon.getImage());
}
return frame;
}
public InformationSoftFrame(){
createInformationSoftGUI();
}
public void createInformationSoftGUI(){
・・・
}
645 :
629 :2008/09/03(水) 20:15:53
>>635 レスありがとうございます。
↓をコメントアウトしたら、うまくいくようになりました。。
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
もともと、setDefaultCloseOperation()の引数には、
JFrame.EXIT_ON_CLOSEを指定していたのですが、Bフレームを閉じると
Aフレームも同時に閉じられてしまうので、JFrame.HIDE_ON_CLOSEを
指定するようにしてました。
デフォルトでは、
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);だと思っていた
ので、↑この行はあってもなくても同じだと思っていたのですが、
どうもそうじゃなかったみたいですね。。
でも、たしかどこかで、フレームのデフォルトの挙動は
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);だと
読んだ記憶があるんですけどね。。
EXIT_ON_CLOSEは閉じるとかそういう話ではなく、アプリの終了だろ・・・
647 :
629 :2008/09/03(水) 20:37:12
すみません。
間違ってました。
フレームのデフォルトの挙動は、
JFrame.EXIT_ON_CLOSEではなくて、JFrame.HIDE_ON_CLOSEでした。
あと、
>>645 で↓のように書きましたが、
>↓をコメントアウトしたら、うまくいくようになりました。。
>frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
書き間違いで、正しくは、下の通りです。
↓をコメントアウトしたら、うまくいくようになりました。。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
結局、Bフレームは隠してるだけというわけなんですね。
648 :
629 :2008/09/03(水) 20:38:47
>>646 >EXIT_ON_CLOSEは閉じるとかそういう話ではなく、アプリの終了だろ・・・
まさしく、そこを勘違いしてました。^^;
そのフレームの終了という意味で、BフレームでEXIT_ON_CLOSEを指定していたので。
EXIT_ON_CLOSEは、アプリケーション全体で終了を意味していたのですね。。
きーぼーど?りあるふぉーす一択だろJK
java swingは最初からwindowsにJREがインストされてたら、もっと使われるのだろうに。 最近、.netフレームワークをインストールしないといけなかったりするソフトも 増えてきたし、関係なくはなってきてるが。
MacにはJRE入ってるんだよね?
古いのがね。 winはJ/Direct騒動でXPSP1あたりから外された。 ただメーカー製OEMだと5.0がプリインスコされてる場合がある。
Mac。 今のLeopardなら、JRE6ですよ。 Windowsに関しては、 PCメーカーのツールが利用している時は入っていたりする。 (Microsoft製のJVMはJavaと呼ぶと混乱の元)
それにしてもSwingというかJavaのアプリは増えないね。 やっぱりWindowsに標準で入ってないと厳しいのかな。 FreeBSDでも動くみたいだし、もっと増えて欲しい。
jarのアイコンが変更可能だったら素敵なのに
ショートカット作ってそれに好きなアイコンを設定したらええ。
jarのexeラッパ無かったっけ? Swingは多機能なのはいいんだけどGUIレイアウトの敷居が・・・
exewrapとかいろいろあるね。 Jigloo or Netbeansで十分かな
>GUIレイアウトの敷居が・・・ 同意。 簡単なレイアウトだったら、レイアウトマネージャを使ってレイアウトしてみるけど、 ちょっと複雑になると、絶対値で指定するようになるんだよね。。
? ならないよ?
662 :
デフォルトの名無しさん :2008/09/05(金) 19:54:56
>>651 Sunが訴訟起こして止めさせたからなー。
>>655 俺ももっと増えて欲しいと思う。
でもきょうび一つのOSしか使っていない人が少ないしな
デスクトップでのrun anywhereは大したメリットにならないし
Javaで作るメリットが無いのが痛い
>>662 そのままにしておけばマイクロソフト独自のWindows専用のjavaが氾濫していたんだろうなあ?
そしてjavaの統一性の無さにユーザーが苦労することになったのだろう。
最近MIDPしか弄ってない俺はささっとMIDP3.0を触りたい。 やっとタブペイン使えるんだぜ?
>>660 絶対値は普通一番使わないものだろう・・・
>>664 結果サーバーサイド市場とるまでに消えてたね。
J/Direct なんて非標準 API あったところで必要な奴以外は使わんだろ。 com.sun 系バリバリでコード書いてる奴なんていないのと同じ。あれはマクネリのいつもの基地外行為。 あの情勢で消えるとか見当違いもはなはだしい。
>>668 VisualJ++とかすさまじい挙動にしてたのしらないのか・・・
そもそもJ++の吐いたバイトコードsunのVMで動かすとむちゃくちゃ重いしそのうちVM死ぬんだぜ。
>>666 おおざっぱなレイアウトはマネージャ使って、さらに細かいところは絶対値指定しない?
レイアウトによるよ。 シンプルなレイアウトなら使わない。 絶対値での指定は、おれもたまにやる。
>>669 JDK 1.0 時代はそもそも Sun の VM もコンパイラ自身が劇重で自爆してただけだろ。
すさまじい挙動なんてあったか? for 初期化で宣言した変数が for 外の同名変数と重複になるくらいしか覚えていない。
AWT 絡みのライブラリレベルならいくつかあったが、それは今の話とは関係ないしな。
とりあえずあの時代であのコンパイル速度は爆速だった。
>>671 絶対値指定はしない
環境変わるとすぐ表示崩れるから
同じWindowsでもクラシック、XP、Vistaで描画がそれぞれうまくいかなかったりするし
>>674 >環境変わるとすぐ表示崩れるから
それはレイアウトマネージャ使っても同じことが言えるよ。
同じOS、Windowsでもクラシック、XP、Vistaすべてにきれいなレイアウトの画面を
作成するには、レイアウトマネージャ使っても難しいときがあるよ。
ボタンに文字がすべて表示されなかったり、レイアウトマネージャによっては
コンポーネントの配置が崩れてしまうこともある。
なので、レイアウトマネージャ使っても画面描画に関しては、Write once, run anywhereは
成立しないものだよ。
つまり、OSのあるバージョン内で正常なレイアウトを確認、保障するようにするしかなく、
同じアプリでも、レイアウト表示を考慮して、XPとVistaでソースを分けることも出てくる。
どっちにしろ、環境考えないといけないのだったら、レイアウトマネージャ使おうが、
絶対値指定しようが特にこだわることではなく、ケースバイケースで使い分けるべきだと
おじさんは思うがなあ。
>>675 > 作成するには、レイアウトマネージャ使っても難しいときがあるよ。
> ボタンに文字がすべて表示されなかったり
それはレイアウトマネージャ使う側の意識が不適切な前提をおいてりゃそうなる。
一定以上の幅を期待したりとか一定以下のフォントサイズを仮定していたりとか。
なんかデジャブな流れw レイアウトマネージャの良いところは、部品を気軽に追加削除できるところだと思う もちろんちゃんと作ってればの話だけど
1スレに必ず1人は現れるからな 絶対座標厨が
>>678 仕事だとあるんだけどね、絶対座標でっていうのが。
基本設計の画面設計書に書かれちゃってて。
本当はイヤだけどしかたなく配置して、指定が抜けてるのを見つけてはレイアウトマネージャで
配置したりしたな。
あとはプレーンにレイアウトマネージャで配置して、そのプレーン自体は絶対座標で配置したりとか。
>>675 よほどキチキチに詰めなければ崩れたりしないと思うが。
あとは Look&Feel を OS 依存のものにしなけりゃいいんじゃね?
すごいな。 俺は絶対座標を使えという指示は受けたこと無いな。 恵まれてるんだろうか。 以前絶対座標で書いてる人みたことあったけど、 XPの標準とクラシックとで見事にインセットの違いで描画がずれてたな。
>>678 癇癪厨w 絶対座標厨って、なぜにおまえがそんなに怒るw
なんかカチンと来たらしい人が出ました
いや、レッテル貼るほど、癇癪起こしてるやつがいたんで。ね?w
誰も怒ってないような
自分がよくわかってるくせにw
絶対座標だと何がいけないの?
絶対厨って言って、うるさいやつが出てくるからねw
>>688 いけなくないけど、LaF変えたりフォント変えただけで表示ズレるので
自由に設定できるアプリ作りたいなら絶対座標にしない方が無難。
>>659 exewrap、JREも含める事ができるんだね。
配布サイズの問題はあるけど、かなり良さそう。
情報感謝!
>>691 >exewrap、JREも含める事ができるんだね。
exeファイルの中にJREを含めることができるということ?
詳しく。。
>>692 調べたけど、JREフォルダの中につっこんで使用するということだな。
privateJREはよく使われてるからな
JPanel に add した JLabel を一度描画したあと 全て消してもう一回同じ位置に別のものをかきこむいい方法はないでしょうか? 何回も書き込むと描画内容が下へ下へ行ってしまいます。
? add した JLabel に setText()
古いJLabelをJPanelからremove
生成コスト考えると、setTextでおk
699 :
695 :2008/09/09(火) 20:34:26
JTreeにaddTreeSelectionListenerでTreeSelectionListenerをセットして、 valueChangedが呼ばれたら右の画面を好きに変えればいい
701 :
699 :2008/09/09(火) 20:48:12
何をどうしてみたら上手くいかないんだ?
703 :
699 :2008/09/09(火) 21:43:44
>>702 >>701 のソースをちょっと変えたものをかきます。
左側には japan-tokyo という tree を作成しています。
下のソースは、tokyo を選択すると右側に何か描画されるように
書いたつもりですが、方向的には合ってますか?
もしあってたら、
”//ここにどう記述していいか分からん。。。”てところに、
どんな風に書いていいかちょっと試行錯誤中です。
なんかうまくいかないです。。。
よろしくお願いします。m(_ _)m
----以下ソース----------------------------------------------------------------------
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.*;
public class JSplitPaneTest extends JFrame implements TreeSelectionListener{
JSplitPaneTest() {
DefaultMutableTreeNode japan = new DefaultMutableTreeNode("Japan");
DefaultMutableTreeNode tokyo = new DefaultMutableTreeNode("Tokyo");
japan.add(tokyo);
JTree tree = new JTree(japan);
String[] data = { "右側" };
JList list = new JList(data);
704 :
続き :2008/09/09(火) 21:45:04
//選択時の処理 tree.addTreeSelectionListener(this); JSplitPane splitPane = new JSplitPane(); splitPane.setDividerSize(5); splitPane.setLeftComponent(tree); splitPane.setRightComponent(list); getContentPane().add(splitPane); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("JSplitPaneTest"); setSize(200, 150); setVisible(true); } //選択時の処理 public void valueChanged(TreeSelectionEvent e) { JTree tree = (JTree)e.getSource(); DefaultMutableTreeNode node; node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if (node != null){ //選択時の処理を記入 if((String)node.getUserObject() == "tokyo"){ //ここにどう記述していいか分からん。。。 } } } public static void main(String[] args) { new JSplitPaneTest(); } }
>>703 public class JSplitPaneTest extends JFrame implements TreeSelectionListener{
DefaultMutableTreeNode japan;
DefaultMutableTreeNode tokyo;
JTree tree;
JList list;
JSplitPaneTest() {
japan = new DefaultMutableTreeNode("Japan");
tokyo = new DefaultMutableTreeNode("Tokyo");
japan.add(tokyo);
tree = new JTree(japan);
String[] data = { "右側" };
list = new JList(data);
tree.addTreeSelectionListener(this);
.....
}
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node;
node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if (node == tokyo) {
String[] data = { "新しい内容" };
list.setListData(data);
}
}
.....
>>705 ありがとうございます!!!!
感謝です!!!!
707 :
デフォルトの名無しさん :2008/09/19(金) 23:26:39
縦方向のFlowLayoutみたいなのってJFCにゃないもんかねぇ?
708 :
デフォルトの名無しさん :2008/09/19(金) 23:32:51
ないねぇ BoxLayoutじゃ駄目?
709 :
デフォルトの名無しさん :2008/09/19(金) 23:40:18
ま、趣味で作ってる分だし、それでいっかな。
趣味的にはレイアウトマネージャ自体を作るという選択も FlowLayoutのソースを参考にしてx軸とy軸の役割を入れ替えれば
JavaFXの話題は無いのか
やるなら専用スレ立てるかどっかでやってくれ
そういやJavaFX、めっきり聞かなくなったなぁ。 スレ立てたら集まるかな? って、ここでする話題じゃないね。 スマン。
>>710 その手は思いつかんかった。
そういやSwingの仕組みとかを解説した本やサイトっておすすめのとかある?
Model View ControllerをJavaではどう実装してるかとか。
探してもSwingのライブラリの使い方とかばっかりで……
『Javaアプリケーション作成講座―Swingプログラミング徹底攻略 (単行本)』著:赤坂玲音
がいいとか聞いたけど廃版だし……
>>715 eclipseでF3押してSwingのソースに飛んでちょこちょこ読むのが
一番てっとりばやいと思うよ
>>710 の手だけど、他のレイアウトマネージャを内包して、
本質的な配置ロジックはそいつに委譲、返ってきた結果を使って、
表示は自分でx,y,width,heightを入れ替え(あと、反対側の辺から
計った値に変えたり)して使う、みたいなのでいけるかな。
左右だけ入れ替えるのは3年くらい前に作ったことあるけど
左右入れ替えるだけなら setComponentOrientation(RIGHT_TO_LEFT) とか・・・
ComponentOrientation#isHorizontal()なんていうメソッドもあるんだな。
>>719 それ指定しても無視されなかったっけ?
たしかテキストの方向に関しては無視されたような。
>>717 国際化対応するのなら、独自のコンポーネントでもComponentOrientationを設定した方が良い。
例えば、アラビア語圏のようなRtoL文化圏のロケールがデフォルトで設定されていれば、
生成されるコンポーネントやLayoutManagerは、RtoLにレイアウトされます。
JFCのほとんどのコンポーネントはRtoLに対応しています。
JScrollPane, JTree,JTableHeader,JComboBox,JSpinner,JSlider,JTextComponent,JLabel等々。
SwingConstantsのLEADING,TRAILINGは、そのために用意されているといってもよいかもしれません。
例えば、国際化対応する場合、JLabelやJTextFileldでLEADING,TRAILINGを使用することで、
ComponentOrientationへの依存を減少できます。
>>720 >たしかテキストの方向に関しては無視されたような。
無視されませんよ。
>>715 >そういやSwingの仕組みとかを解説した本やサイトっておすすめのとかある?
>Model View ControllerをJavaではどう実装してるかとか。
本やサイトを、かなり読みましたが、ソースを読みまくるしかない気がする。
概略であれば、Sunのサイトを漁るの良いでしょう。ただし、一箇所にまとまってませんが。
>探してもSwingのライブラリの使い方とかばっかりで……
ですね。これは、10年近く前から状況が変わってませんね。
>『Javaアプリケーション作成講座―Swingプログラミング徹底攻略 (単行本)』著:赤坂玲音
がいいとか聞いたけど廃版だし……
以前、新たな発見があるかもしれないと思って、中古を買って暇つぶしに読んでみようかと思いましたが、
Amazonの書評で、書評数が少ないものの、酷評されているため、やめました。
715が購入したら、感想を聞きたいです。
>>721 ん、isHorizontal() ってゴニョゴニョして無理矢理 false 返させても反映されなかったような記憶が……
>>723 Component#setComponentOrientation(),Component#applyComponentOrientation(),
JComponent#updateUI()を参照してください。
個人的には、isHorizontal() をオーバーライドしたComponentOrientationサブクラスのインスタンスを
生成して不要なリソースを確保する理由に興味があります。
宜しければ、それが必要になるシチュエーションを教えてください。
isHorizontalって、isLeftToRightと違って縦書き用でしょ 縦書きまだサポートされてないんじゃ
>>723 , 725
724です。
すみません。早とちりしてisHorizontal()をisLeftToRight()と読み違えてました。
isHorizontal()(縦書き)は、未サポートです。
いつも思うんだけど、なんでTableSelectionListenerってないんだろうね JTableからselectionModel取得して行選択イベントリスナー、columnModelのcolumnModelListener取得して列選択イベントリスナー。 めんどくさい・・・
728 :
デフォルトの名無しさん :2008/09/24(水) 01:52:10
SWTのGridLayoutっぽいのをSwingで使いたいんですけど、どこかにありませんか? あと皆さん、Swingでどんなレイアウトマネージャー使ってます? やっぱNetBeans使ってGroupLayoutが一番なんですかね? 出来ればGUIエディタなんて使わずに簡単に扱えるレイアウトマネージャーが欲しいのですが・・
SWTは使わないから間違ってるかもしれないけど 今調べた限りでは GridBagLayoutが近いかな。 GUI作るのにIDEは使わないけど、 GridBagLayoutで中にJPanel入れてFlowLayout使うとかが 多いかな。
JTableの列ヘッダ部分(JTableHeader)はJScrollPaneにのせる事で始めて描画されますが、 その後JScrollPaneのcolumnHeaderを別の物に変更(scrollPane.setColumnHeaderComponent(Component c))しても それらが乗っているコンテナを可視化したりするとJTableHeaderが勝手にscrollPaneのcolumnHeaderに設定されています。 これはどこで変更されているのでしょうか?
>>730 Javadoc の JTable#configureEnclosingScrollPane の説明文を読む
ありがとうございます。熟読してまいります。
>>716 やっぱりそうかな。
標準ライブラリはいい教科書になるってよく言うしね。
>>722 Sunの資料はたまに読むんだけど
あそこのサイト何かごちゃごちゃしてて迷子になっちゃう。
まとまってればいいのに。
自分用にまとめたサイトで持つくろうか。
『Javaアプリケーション作成講座(ry』
Amazonでは酷評なのか。
なら、読まんとこっかな。
どっかのサイトでかなり褒められてた気が……
読む人に依るのかな。
アンガトサン
再び質問です。 JScrollBarでバーをドラッグ中に、内部では定期的(?)にマウスの位置を取得し、バーの位置を表す値が変化しますが、その取得の頻度を変更する方法はないのでしょうか?
内部ではマウスイベントが来るたびに更新してるだけだと思うが 取得するのは自分で取得しに行くんだから好きな頻度で取得すればいいのでは 何をしたいのかよくわからない
そのマウスイベントの発生周期はもちろん変更できませんよね? 単純にJScrollPaneにComponentのせているのですが、そのコンポーネントの描画処理がとても重く、スクロール中にあまり頻繁にリペイントして欲しくないんです。 paintあたりをオーバーライドして、ある時間が経過していなければpaint無視という感じにするしかないのでしょうか?
こんな感じでどう 昔よくあった、ボタン離すまでスクロールしない、というやつ class NonLiveScrollPane extends JScrollPane { protected JViewport createViewport() { return new JViewport() { public void setViewPosition(Point p) { if (!getHorizontalScrollBar().getValueIsAdjusting() && !getVerticalScrollBar().getValueIsAdjusting()) { super.setViewPosition(p); }}};}}
コード例までわざわざありがとうございます。 移動中は全く描画しないのは寂しいので、それを応用して回数を減らさせることにします。
739 :
728 :2008/09/25(木) 01:34:42
>>729 なるほど。。GridBagLayoutの中にFlowLayoutはいいアイデアかも!
やってみます!ありがとうございます
質問です。 今のJPanelにコンポーネントが何個か表示されていて、イベントが起きたらそれを一つ増やしたい場合どうすればいいですか? 例えば、最初にボタンが5個表示されていて、イベントが起きたら10個にする、という具合です。
イベントを拾ってJPanelにコンポーネントをaddしたらいいんじゃない?
すると次に 「JFrameのサイズを変更しないと追加したコンポーネントが表示されません。なぜですか?」 という質問がくるわけだな?
>>741 JFrameのサイズを変更しないと追加したコンポーネントが表示されません。なぜですか?
>>743 イベントが起きる前にウィンドウを最大化しておけば良いよ。
>>743 pack()しなおしたらいいんじゃない?
>>742 を見るによくある質問みたいだけど。
調べた?
>>745 pack()したらユーザがウインドウのサイズを変更していた場合にも強制的にサイズ
変更されちゃって使いにくいUIになっちゃうな。
Swingならコンテナ(この場合JPanel)に対してrevalidate()を呼べばいいんだっけ?
コンポーネントをマウスで移動したりしてソリティアみたいな動きにしたのですが、どこから手をつければいいのでしょうか? public abstract void componentMoved( ComponentEvent e ) のコンポーネント・イベントがあるみたいなんですがこれですか?
そもそも、「コンポーネントを動かす」という動作は、その特定のコンポーネントがサポートしていない限り行えません。 単純にそのコンポーネントにMouseMotionListener,MouseListenerなどでマウスの動きを監視して、動かす動作がなされたらそのコンポーネントを移動、というようにすればいいです。
コンポーネントをドラッグ・アンドドロップにしたいってこと?
ググってみてもあまり解説ないですね。一応、英語のチュートリアルにも目を通してみたんですけど、サンプルもありませんでした。 コンポーネントをマウスで移動する(ソリティアみたいなの)は、低レベル処理のような感じがするんですけど、自分で一から実装するものなんですか?
あ、ちなみにこの例ではコンポーネントを実際に動かしてるけど、glassPaneに移動の様子を描画して、正しい動作であれば実際に移動みたいなこともよくする。
まさにソリティアですね。 2DのGUIはあまりやってなかってんで参考にします。 実はAWTでよかったんですけど(マルチスレッドとイベントをたくさん使うので)、ありがとうございます。
>>752 なるほど、ドラッグで、ウインドの(いちいち描画される)リサイズみたいなヤツですか?
それだと、swing限定で、awtで実装するとなると大変ですね。やっぱり低処理なんですか。
一応、swing限定であれば、internal frame のコンポーネントは機能的に同じ感じはしてたんですけど…
スレッドとかバンバン使うんでswinはなんとも…swingだとプロトタイプ用途かな。
スレッドをバンバン使うからawtで、という発想がまったく理解できないけど…
え?swingはシングルスレッド(でイベントと描画処理)じゃないの? 非同期処理とかやるときは、invokeLater()以外でやるとすればどうするの。
>>752 そういえば、split pane の区切りバーみたいなヤツですか?
そのinvokeLaterでやれよ
スレッドがわかっていない
>>754 がいるスレはここですか
すみません、質問させてください。 JPanelの中にJLabelをいくつか配置した構造を作っています。 JLabelをクリックした際にMousePressイベントが呼び出されるのですが、 下にあるJPanelやJLabelのMousePressイベントも呼び出すにはどのようにしたらよいでしょうか?
それぞれのaddZZZListener()に入れるインスタンスを同じのにする。
ところdえ、EDTって何の略ですか?
765 :
デフォルトの名無しさん :2008/09/30(火) 02:47:05
東部夏時間てのは、頭のてっぺんが禿げてるってことか?
768 :
デフォルトの名無しさん :2008/09/30(火) 03:17:40
>>766 違います。東部夏時間とはイベント処理スレッドのことです。
swing的にはevent dispatch thread
>>751 コンポネントを動かすのは、awtで実装するのは難しそうですね。
>>770 なんでそう思うの?
>>751 の全てのコンポーネントをAWTの物に変えて、setOpaqueやらsetDefaultCloseOperation()やらを消したらそのまんまで実行できるよ。
setDefaultCloseOperation()の変わりにWindowListenerとりつけるの忘れずにね。
というかマルチスレッドだからAWT使うって・・・
コンポーネント動かすとかより先にすべきことがいろいろあると思うなぁ。
protected void processMouseEvent(MouseEvent e) { super.processMouseEvent(e); } 途中のコードは省略しますが、ここでsuperを呼び出さなくても動くんですけど、呼び出さないとどういう影響が考えられますか?
どのJComponentを拡張したの? スーパークラスでやってることを調べたらいいと思うよ。
各コンポーネントのZオーダーの問題も考えるとやっぱり複雑ですね。 addZZZListener()とprocessEvents()は連動していて(イベント伝達は内部では同列に管理されていて)、 superしないとListenerの方には伝達されないんですか?
そりゃそーだ。
extends JPanel だと簡単なんですけど、JComponentから継承して自作コンポネントを作るのはととても大変ですね。 getUI()とか、swing特有の設定がたくさんありすぎてわからないんですけど、結局何を設定すればいいんですか?
結局 paintComponent だけ書けばいいと思うよ あとはマウスリスナとかキーリスナとかで
getUIはUIを委譲してるだけだから別に気にしなくてもいい。 paintComponent(Graphics g) getPreferredSize() この二つが比較的多いかな。
JComponentから継承してsetOpaque(false);とかsetDoubleBuffer(true)とかやってるんですけど、 なぜか表示されると、そのコンポネント(のインスタンス)が1ドットのサイズになってしまうんですけど、いくらsetSize();をやっても変化ないです。 どうすればいいのでしょうか。
getPreferredSizeをオーバーライドして自分の望むサイズを返せばよい
setLayout(null);なんですけど、getPreferredSize()を上書きするとその推奨サイズに固定されませんか? それと、ご指摘のことをやっても1ドットでした。 レイアウトマネジャと、swingの複雑な作法が混ざっていて、バク探し以上にかなりカオスですw
今のところextends JPanelでしのいでますが、JComponentから派生したいのにこれだとJPanelのルールに縛られてしまいます。 やっぱりgetUI()とかupdateUI()の上書きになるんじゃないですか? 英語チュートリアルは長くて、siwng固有の作法(getContetPane().add()とかpaintComponent()の作法)も複雑だし、完読出来てません。
たぶんあなたには自作コンポーネントは早い。どうしても作りたいならソース晒せ。
JTableに,複数のクラスのオブジェクトのメンバ変数の値を混ぜて 表示したいのですが,どのようにやるのがスマートでしょうか? DefaultTableModelのコンストラクタに渡すString[][]を生成するコードを書いていたのですが, もっと簡単にできるのではないか,と思いまして 例えば店・人・商品クラスがあったとき, それぞれの店の売り上げ,店主名,店主の歳,最も売れた商品の値段を一緒くたに出したいのです というか,そもそもこういったデータはどう保持・参照するのがよいのでしょうか SQLでも使うべきですかね
自前のTableModelを作るべき
>>785 ありがとうございます
自前のTableModelを作ろうとは思っておりました
データ保持部分とそれからの取り出しについて
もう少し詳しい回答をいただけないでしょうか
AbstractTableModelを拡張するのが楽だよ 大抵はそれで事足りる。 肝心のデータはどういう形式で持ってるの? リストかなんかでそれぞれ別々に保持してるのかな?
JTableにどう表示したいのかイメージがわかないなぁ。こんな感じ? | 店名 | 売り上げ | 店主名 |年齢|商品の値段| |○×商店 |\4,200,000|○田△三|50歳| \100| |スーパー△◇|\4,200,000|☆野◎●|41歳| \199|
>>787 はい,その方向でやってみます
現在,各オブジェクトはメインのクラスがいくつかのArrayListで持っています
ArrayList<Shop> shops, ArrayList<Person> persons...
みたいな感じです
しかしこれだと規模が小さければよいのですが,クラスやフィールドが増えてきたりした場合に
かなり厄介になりそうな気がしました
オブジェクトとそのフィールドの中身を取るのにもう少し柔軟にクエリを発行して
JTableに流し込めるとよいのですが,具体的な方法が思い浮かびません
各オブジェクトのフィールドではなく,もっと中央に何らかのデータベース的なものを
置くべきでしょうか
>>788 はい,そのような形です
テーブル使う時はだいたい1行に1オブジェクトってのが多いな 今回のなんてもろそうでしょ? 従業員クラス作って、商品の値段のリスト作って、店クラスにでも持たせて、そのオブジェクトのリストをTableModelで一つもつ。 そうすると別に厄介じゃないよ。
>>790 ありがとうございます
今のところは1行に1オブジェクトではなく,複数のオブジェクトからのデータが混じっています
788の例ですと,店・人(従業員)・商品からのデータで,つまり参照しているクラスは3つありますね
1行に1オブジェクトがそういう意味でなかったらすみません
人(従業員)クラスや商品クラスは既にあるのですが,この中の特定フィールド値のリストを
別のところに作っておけということでしょうか?
階層構造にして1行を1つのBeanにしとけ 把握がらくだから
>>階層構造にして1行を1つのBeanに すみませんがここをもう少し詳しくお願いします
>>793 792本人じゃないけど、下記みたいな行を表現するクラスやインタフェイスを実装して、
TableModel内で管理するってことだと思うよ。
つまり、Shop,Person,...みたいなListを個別に持つ必要はないってこと。
そんな風にTableModelを実装すると管理も面倒だし、メモリリソースも無駄。
class RowData{
private Shop shop;
private Person person;
//アクセサを適宜実装したりしなかったり
}
よく分からないのですが、java beanではそのようなにプロパティで管理するモデル を(class RowDataみたいなクラスを)「Table Model」って言うんですか?
違う TableModelとはテーブルの情報を保持するもの
java beanは、具体的にはMVCでいうModelを担当するはずだったはずですけど、どこか具体的に解説しているところないですか? javadocのjava bean 技術解説のところもイマイチ抽象的なので、swingやserverとかの具体事例を交えて解説しているお勧めなとこはないでしょうか。
>>794 >つまり、Shop,Person,...みたいなListを個別に持つ必要はないってこと。
それだと、RowData[]で管理するわけで結局Listなんじゃないですか?
>>797 JavaBeansはMVCとは関係ないよ
プロパティアクセスとそれに伴うリスナーの規約に過ぎない
そしてSwingはBeansをベースに作られている
>>798 個別にListもつと不具合の種でもあるからひとつにまとめて行を確実にもつのは大事なこと
うわ,見てない間にかなり進んでたようですね
>>794 ありがとうございます
これはJTableに表示したい組み合わせ(クラス・フィールド)をがっちりハードコーディングしている
のでしょうか?
それですと,組み合わせごとにRowData Beanを作らなくてはならなくなったり・・・しないでしょうか?
>>800 大した手間じゃなかろ。
それに、組合せごとにAbstractTableModelの具象クラスを実装するのは変わらないんだから。
今思いついたんだけど、こんなクラス作って、
BeanTableModel<T extends AbstractRow> extends AbstractTableModel{
private ArrayList<T> rowList = new ArrayList<T>()
public Object getValueAt(int row, int col){
return rowList.get(row).getValueAt(col);
}
}
(細かいところは省略)
として、行クラスとしてこんなの作ったらよくね?
abstract public class AbstractRow{
abstract public Object getValueAt(int col);
abstract public void setValueAt(Object val, int col);
}
組合せごとにAbstractRowを実装すれば、TableModelの実装は1つだけで済むよ。
>>801 確かにぱっと見るとたいした手間ではなさそうです
フィールド値による絞り込みで,「所在」が「日本」であり,かつ「店主の姓」に「山田」があるもののみリストせよ
とかいう場合にどうするかちょっと考えてみたいと思います
VEってもう古いの?
うん
807 :
デフォルトの名無しさん :2008/10/06(月) 01:20:48
今は何?
NetBeansじゃねぇの?
NetBeansでポトペタやってEclipseでリファクタリング。
810 :
デフォルトの名無しさん :2008/10/06(月) 17:52:59
ネット豆の作るコードが気に食わねえ
どう気に食わない? かなり柔軟に設定できるが。
VEはもっとひどいが
>>810 NetBeansの作るコードが気にくわないというのは、カスタマイズの方法がわからないというだけじゃねぇの?
ほとんどプロパティのコードのところで制御できるんだが。
Netbeansは.formファイルがないと編集できない時点で論外 最初からNetbeansだけで組むならいいかもしれないが VEのほうがまだましに見える
VEはまともに開発が出来ない時点でソースがきれいだろうが論外 作りたいのはアプリなのでNetBeansのほうがましに見える
NetBeansでGUI作ってEclipseで編集している俺様最強。
NetBeansは信者がすごい
>>817 Eclipseのほうがすごいと思うけどな
JComponentサブクラスのソースにjAccessibleContextが、ずらずらと記述されていて、 気になっているのですが、javax.accessibility.*パッケージって何ですか? 何ができるのですか? javadocにも抽象的な説明しか記載されていませんし、検索してもサンプル等を見つけられないので。 参考URLでも良いので、ご存知でしたら教えてください。英語でも良いです。
javadocのアクセシビリティの項目からのリンクに詳しく書いてなかったっけ?
>820 >javadocのアクセシビリティの項目からのリンクに詳しく書いてなかったっけ? javadoc内に詳しいといえば、詳しく書かれているのかもしれませんが、 前置きなしに使用されている単語などが漠然とし過ぎていて、個人的には理解できないものでして。 もっと根本的なところから説明されているサイトがないものかと。 できれば、詳細な説明と「こういうコードを書くと、こんなことができるよ」的な、 基本的な短いサンプルがあると理解しやすいのですが。
あれは必要な人が使うものだから分からんレベルのお前さんには関係ないよ。 javadoc読んで分からんなら必要ない人だ。
Javaのバージョンが1.5という縛りでSwingのLAFをNinbus変更する方法はないですかね?
Ninbusは単体で配布されてるが5じゃつかえないの?
Nimbus
GUIはNetBeansで作ってコーディングはeclipseでやりたいんですけど、 どうやったらいいですかね。 今はForte+eclipseです。
GUIはnetbeansで作ってeclipseでコードいじれば良い。馬鹿か?
Forte・・・だと?
俺も昔はForteだったよ。eclipseに移ったけど。 あのころに比べればnetbeans6がかなりまともになってる。
いまだにForteって信じられんな
Swing使ってるなら3.5からはNetBeansに移行するのが自然だと思うのだが
>>829 VEの放置っぷりがすさまじいよね
で、なんでEclipseでコーディングやりたいの?
エディタの親切さがNetbeansよりも上
833 :
826 :2008/10/20(月) 07:44:07
eclipseのソースの取り込みがForteは楽だったからForteでした。 Netbeansで取り込もうとしたけどうまくいかなかった。
そういえば、project importer って使ったこと無いな。
UIの形を連続的に変化させたり、フェードイン・フェードアウトをスプライン曲線風にスーッとアニメーションしたいんだけど 何で組むべきかなぁ javax.swing.Timerとか使えばいいのかね
よかよ
Swingもこれほど時間が経つのに、いまだにデスクトップに 透過PNGをそのまんま表示することすらできないという現実 頭が痛いぜ・・・
デスクトップはswingと何の関係が…?
ウィンドウ透過できるようになったんじゃ?
>>840 なったの?JWindowとかにsetOpaque(true)して効果ある?
>>839 意味がわからない。Swing GUIはデスクトップ以外でどこで使われるというんだ
なったよ。 JWindow window = new JWindow(); window.getContentPane().add(new JLabel(new ImageIcon("透過PNGファイル.png"))); window.pack(); com.sun.awt.AWTUtilities.setWindowOpaque(window, false); window.setVisible(true); とかで透過できるはず。
正式のu10以前から入ってて結構騒がれたんだが・・・今まで気付かなかったのか。
>>843 com.sun.awt パッケージって事は一応ベンダ固有の拡張APIって位置づけなのか。
>Note: the com.sun.awt.AWTUtilities class is not part of an officially supported API and appears as an implementation detail. <snip> Supported and public API will appear in the next major JDK release. だそうな。
アップルもGNU CLASSPATHもどうせ勝手に実装するだろう。 AWTなんて元々ピア部分はもろ実装依存だし。
編集可能なJComboBoxで、用意した選択肢以外の項目が手で入力されたことを 検出する方法は、どうすればいいんでしょう? getSelectedItemで得たものを 自分で照合しないといけないんですか? よろしかったら、教えてください。
if (comboBox.getSelectedIndex() == -1) とか?
850 :
848 :2008/10/24(金) 19:31:56
レスありがとう。試してみます。
851 :
デフォルトの名無しさん :2008/10/27(月) 23:16:00
JBUTTONのbackgroundの色にグラデーションをつけることは出来ますか?
Look & Feelに依存するから、一般的にやるのは難しいだろうね 自分でBasicButtonUI拡張して作ってみたら?
JTextPaneでselectionの範囲に色が付きますが、 複数行を選択したときに行末より右の部分にも色が付くようにしたいです。 どうやればいいでしょう?
getSelectionHighlighter を差し替えた DefaultCaret を JTextPane に setCaret してやる……んだったかな うろおぼえ
swingで作られるウインドウってWindowsとMacで外観が違ったりするの? JREのバージョンによって違うのは自分の環境でたまたま発生したけど…
少なくとも、L&Fの設定によるんじゃね? 最近のはプラットフォームのネイティブを真似たモノがデフォ。 昔は、MacOSXはAquaで他はMetalだったはず。 あと、使うフォントのマッピングが違うとずれるかもね。 JREのバージョンによる差は、似せ具合の作り込みの差とかいろいろ。
>>856 SystemLAFがデフォになったの?
SunのJREではMetalがデフォ ただしフレームはL&Fに関わらずシステム依存 じゃないかえ
なぜネイティブのL&Fがデフォルトではないかよく考えてみるべきだった
JFrameでサイズ指定すると、タイトルバーや四方の枠線も含めたサイズを指定することになるよね。 そうではなく、内側の、描画が反映される範囲のサイズで指定したい。 また、画像描画などの位置を、ウインドウの最上端からのピクセル数ではなく、 タイトルバーの下からのピクセル数で指定したい。 いかなる環境で動作させても、JFrameのタイトルバーの幅は同じピクセル数であるというのなら、 単純にサイズ指定のときにその幅をプラスするだけでいいと思うけれど、 おそらく実際には環境によってタイトルバーの幅が違うとおもうし、 仮にこれでうまくいくんだとしても強引なソースになってしまう。 タイトルバーの幅や四方の枠の幅を調べたり、もしくは調べるまでもなく 内側の領域の数値を指定してサイズ変更する方法があったら、教えてください。
861 :
デフォルトの名無しさん :2008/10/31(金) 20:23:56
862 :
861 :2008/10/31(金) 20:31:28
ど忘れしてたから確認してきた 多分Insetsのことだと思うけど違うかな
863 :
860 :2008/10/31(金) 22:09:12
おおー! Insets でググったらわかりました! ありがとうございますー!
>>860 コンテンツ区画の推奨サイズを指定してpack
Insets分を加えてJFrameのサイズを指定するよりスマート
> また、画像描画などの位置を、ウインドウの最上端からのピクセル数ではなく、
> タイトルバーの下からのピクセル数で指定したい。
これは普通コンテンツ区画上のコンポーネントかコンテンツ区画そのものかに描画するだろうから
ウインドウの左上端が原点になることはないのでは?
866 :
860 :2008/10/31(金) 23:14:29
お返事ありがとうございます。 勉強しながらのプログラミングなので、まだわかっていない事が多いです… コンテンツ区画というのは、JFrame内の、描画や配置ができる範囲ですよね? 現在作っているのが、固定画面アクションゲームのマップエディタです。 昔Visual C++で作った固定画面アクションゲームの、 マップデータを作るエディタを、JavaのGUIの勉強がてらに作っています。 最低限のマップチップ配置&キャラクター配置をして、 それをバイナリファイルに保存することまで作りました。 しかしJFrameに直接 Graphics2D.drawImage() で描画しているため、 JFrameの枠線・タイトルバーを考慮しない座標になっているため、 これを回避するために、>860の質問になりました。 Visual C++ でいうと、ウインドウに直接 BitBlt() しているような感じです。 >862さんの言う Insets を使った方法でおそらく回避できると思いますが、 コンテンツ区画というものを理解したほうが、より「力押しではないプログラム」になりそうですので、調べてみます。
>>866 例えば大雑把にはこんな感じに
import java.awt.*;
import javax.swing.*;
public class Hoge {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JComponent() {
public void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.drawLine(0, 0, getWidth(), getHeight());//とりあえずコンポーネントの原点から右下端までの線分
}
});//描画するためのコンポーネントをコンテンツ区画に配置する
f.getContentPane().setPreferredSize(new Dimension(400, 400));//コンテンツ区画サイズが400x400
f.pack();
f.setVisible(true);
System.out.println(f.getSize());//フレームのサイズはコンテンツ区画のサイズにInsetsを加えたものに
}
});
}
}
> JFrameに直接 Graphics2D.drawImage() で描画しているため
これを直接でなくコンポーネントを定義してそのコンポーネントの中で描画する
上の例ならg.drawLine()しているところ
直接JFrameに描くのではなくコンポーネントに描画機能を付けてそれを配置するようにすれば
例えばコンポーネントの周りにデコレーションを付けて表示するとか
ボタンとかの他のコンポーネントもフレーム上に配置するとかする時にでも
それぞれのコンポーネントはフレーム上のどこに配置されているかを気にせずに描画することができるようになる
>>867 はコンテンツ区画いっぱいに一つのコンポーネントが広がった状態になるので
コンテンツ区画サイズ=コンポーネントサイズになっているけれど
複数のコンポーネントを配置するようなら
特定のサイズを必要とするコンポーネントに対してその推奨サイズを設定して
コンテンツ区画全体のサイズは指定せずにpackだけしてやれば
レイアウトマネージャが適当に全体のサイズを計算してフレームサイズに反映してくれる
そのときに推奨サイズが反映されるかどうかは設定されたレイアウトマネージャの性質次第だけど
870 :
860 :2008/11/01(土) 05:35:07
わっ、サンプルコードまで書いていただけるとは、感謝感激です! SwingUtilities.invokeLater() というのは初めて見ました、 描画したいコンポーネントをスレッドとして渡す… って使い方でしょうか。 いただいたサンプルコードをしっかり理解できるように調べて、 色々書き換えてみて勉強させていただきます。 >869さんもありがとうございます、がんばって読んでみます。
SwingUtilities.invokeLaterはSwingを使う標準の手続きです mainの中でこれやらずに直接Swingコンポーネントを使ったりすると危険だよ Sunのドキュメントにも書いてある
>>860 まさか他のスレッドからコンポーネントにアクセスしてないだろうな・・・
JTextFieldの幅がキャレットが描画される分を考慮していないので、テキストの描画がうまくいかない場合がある。 それで困っている人がいたら、getPreferredSize()をオーバーライドして super.getPreferredSize().width++とやるとピッタリになる。 たぶんテキスト関連の他のコンポーネントも同じかと思う。
Javaはオフにしてますから
875 :
デフォルトの名無しさん :2008/11/04(火) 08:54:19
JREをインストールしてないって意味かな
>876 Javaとjavascriptの違いが分からん人かと。
878 :
デフォルトの名無しさん :2008/11/06(木) 09:29:14
ところでなんでSwingって名前なの
同じコンポーネントクラスでも、オブジェクトごとにlafを設定する方法はありますでしょうか?
881 :
デフォルトの名無しさん :2008/11/08(土) 00:12:06
自分も基本Javaはオフです。 Swingもオフにできますか?
Javaをオフにするというのがわからないが、 Javaプログラムが動作しない環境で、 Swingだけが動作するというのがあったら、むしろすごいな。
884 :
デフォルトの名無しさん :2008/11/08(土) 09:47:35
Synthについて質問です。 テキスト関連のコンポーネントのテキストの描画方法を変更したい(テキストにグラデーションをかける、など)のですが、SynthGraphicsUtilsのpaintTextは描画に用いられていないようなのです。 変更を加える方法はありますでしょうか?
Synthのソース読んでみましたがどうもComponentUIから実装しないとだめっぽいですね 例えばJTextAreaでしたら、SynthTextAreaUIと同じものをBasicTextAreaUI拡張して作成して、paint()メソッド前でごにょごにょ あとはXMLの方でdefaultPropertyでui設定。。。 テキストコンポーネント毎に書くとなると相当面倒みたいですね。お騒がせしました。
Swing Hackみたいにがっかりする内容じゃないっぽいね
洋本読んだけど、 Swing一通り学んだぐらいの中級者以上の人には かなりいい内容だと思うよ。 エフェクトとか、そこまで必要かよ!みたいな内容も 勉強としては読む分にいいんじゃないかな。 ただ6000円は高い気がする。
>>890 filthyrichclientsの英語のPDF版を買おうと思ってたから、和訳が出るならそっちにしようかな。。
ただ、6000円だったら、PDF版にしようか迷うなー。
個人的には、EffectiveJAVAの新刊が早く和訳されるといいなと思う。
>>888 >>889 ところで、よくSwingHacksは、がっかりな内容だったって意見を目にするし、
filthyrichclientsもがっかりそうだと言っていますけど、
例えば、どういう内容だと良いのでしょう?
たしかにSwingHacksは、個人的には技術的に得るものはなかったものの、
SwingやJAVA2Dの書籍自体が少ないので、読み物としてそれなりに楽しめたけど。
>たしかにSwingHacksは、個人的には技術的に得るものはなかったものの、 たぶんみんなこれ思ったんだよ おまけのJavaSoundなんて入れないほうがいいくらいひどいし それくらいならSwingにもっとページをさけよと
895 :
デフォルトの名無しさん :2008/11/11(火) 01:32:54
void func(Graphics g) というメソッドを作っていて、この引数だけからgのサイズ x, y, w, h を得る方法はないでしょうか? Rectangle getClipBounds()がありますが、APIを見るとイマイチ分からないのですが、 クリップが設定されてないときとは、明示的なsetClip(null)以外にいったどのようなときなのでしょうか。
>>892 >たぶんみんなこれ思ったんだよ
>おまけのJavaSoundなんて入れないほうがいいくらいひどいし
>それくらいならSwingにもっとページをさけよと
あぁ、これは特にそう思った。
いま、目次をざっと見たけど、10,11,12章は特にいらない。
読み物としてもつまらなかった記憶がある。
つまらないといえば、JTable,JTree,JList,JTextComponentといった、
Swingの核とも言えるようなものも、hackというには、ありきたり過ぎでつまらんと思った。
ただ、Swingを使い込んでない人(初級から中級位かな)には有用だと思うけど。
結局、タイトルがいけなかったのかね。
"Hacks"とかつけなければ良かったのかも、"hack"がつくと、
どうしても買い手の期待値があがってしまうね。
ところで、filthyrichclientsの著者や、Swingチームのトップは、
今年Adobeに行ったけど、Swingは今後どうなんだろう。
SwingUtilitiesのinvokeLaterを使うのが許されるのは、小学生までじゃねぇの? EventQueueのinvokeLaterを直接呼んだほうがよくない?
小学生がほざいてるよw
たしかにhacksって名乗るほどhackしてなかったな もっとUIいじりまくりコンポネントをぐりぐり自作lafぐらいまで あったらhackっぽくなるんだろう
>>900 >もっとUIいじりまくりコンポネントをぐりぐり自作lafぐらいまで
>あったらhackっぽくなるんだろう
それもいいんだけど、個人的には、コードをそのまま利用できなくてもいいから、
「おぉー、これは!」と思えるような意外な発想とか、着眼点とか、
通常、そういう使用方法や実装のサンプルがないapiの意表をついた
使用のサンプルとか、そういうのが少しでもあれば面白かったと思ったかな。
何がhackに値するかは難しい。。。
iTunesみたいなUIの動きを Swingで実現できたら激しくHackだと思う。
高度なアニメーション、半透明とかかな。 GUIをアフィン変換して変形したりできれば、それなりに面白そうなものが出来そうだけど
使いにくそうだなw
たしかSwingXでそんなサンプルがあったなー ありゃ度肝抜かれたわw
>>893 >>894 Commentにも目を通した?
まぁ、今後、どちらの話が真実になるかは知らんけど。
そもそも、何のコンポーネントも追加されたりしないし、バグは修正されないしで、
今までだって、Swingって停止状態な気がするんだけど、気のせい?
swingパッケージはコンポーネントの集合だってことを忘てないか。 Graphics2DやJava3Dとかと全く別者で、ごっちゃにしてる奴がいるけどこいつは何?
コンポーネント単位で追加されたのって JSpinner ぐらいだっけか?
910 :
デフォルトの名無しさん :2008/11/12(水) 00:29:22
swingに精通してんならコンポーネントぐらい自分で作ってみろよww
911 :
デフォルトの名無しさん :2008/11/12(水) 01:05:45
コンポーネント自作してみたいんだけど、Javaのコードだけで自作できるの?
>>911 Swingが何で出来てると思ってたんだよ
この一連の流れで言ってるコンポーネントって、java.awt.Componentのこと? それともJComponentや、そのサブクラスを含めた総称としてのコンポーネントのこと? それと、なぜJava2DとJava3Dでなく、Graphics2DやJava3Dが出てきてるの?
914 :
911 :2008/11/12(水) 01:30:51
>>915 何の勉強。。
コンポーネント、コンポーネントって言ってるけど、
何を指してるか意味不明だし、なんでGraphics2DやJava3Dと異なる軸が
出てくるのか分からないから、聞いてみただけなんだけど。
あほらしいから、もういいや。
>>916 コンポーネントを分かってないようだけど大丈夫か?
もう一回Hacksを読み直した方がいいかもな。
>>911 JTextFieldにマウスもっていってコントロール押しながらクリックしてみろ!
Sun が SwingX への資金を打ち切りやがった。 Sun は Swing から JavaFX にシフトするみたいだ。 Swing は見捨てられた。Swing はもう終わりだ。 みたいな感じ?
921 :
デフォルトの名無しさん :2008/11/12(水) 21:46:46
ところでSwingXってなんですか?
swing labs のプロジェクト全体のことだったんですか。
じゃ、特定コンポーネント向けのアルゴリズム集の全体ってところですか。 コンポーネント自体じゃなさそうですけど。 使ったことないんですけど、便利そうですね。
とりあえず「全体」にしたいのなw
SwingXがペヤングだとしたら SwingLabsは、まるか食品みたいなもんだ。
928 :
デフォルトの名無しさん :2008/11/14(金) 09:48:55
おまえ、何年生まれだよw
>>920 Java FXって内部でSwingを呼び出してるわけじゃないの?
完全に独自ライブラリ?
>>929 SwingLabsで、SUNと外部開発者は協力してたはずなのに、
SUNは一方的にJava FXに都合のいいように、Swingの描画機構を
書き換えやがった、チクショー、もうこねぇよ、って話。
>>930 どうも。そうするとSwingLabsの人々は変更された機構に合わせて
自分たちのコードを書き直さないといけないのが嫌だということなんだね。
まあSunも一言言うなりしてもよかったと思うが・・・
でもこれでSwingが死んだというのはちょっと言い過ぎに見えるというか
どこが終わったのかさっぱり判らん
SwingLabsの人々にとって死んだと言うことなら話は通るけど
SwingLabsはSunの中の人とSun以外の外部開発者がいて、 将来的にSwingLabsの成果物は Swing に取り込まれるのが目標で、 そのために両者が協力していく場としてSwingLabsがあったというか。 SwingLabs内のSunの中の人が勝手に描画機構を削ったって事らしいので 「自分たちのコードを書き直」せばいいとか、forkすりゃいいって問題でもないらしい。 Swing に取り込まれる可能性が低いのがわかってりゃモチベーション上がらんし 人も集まらんし。
933 :
デフォルトの名無しさん :2008/11/14(金) 21:34:04
怒るのも分かるけど、そいつらはJavaFXの方を全く知らんのだろ。 SUNはswingもjavafxも両方精通しているわけだし、将来的にjavafxはjavascriptと同じくavaと連携するんだろうし、だからそういう決定をしたんじゃないの? だから一方的にひがんでるだけじゃないの?
934 :
デフォルトの名無しさん :2008/11/15(土) 14:02:54
Microsoftならここで互換性を残す
935 :
デフォルトの名無しさん :2008/11/15(土) 20:02:29
Swingの目的はメジャーなWindowSystemの 最大公約数の機能を提供する事じゃないの? あんまり凝った機能を作ったとしても普通に載らない気がしないでもない。
昔のAWTはそうだったけど いまやシステムトレイとかはいってきてるしそうでもないと思われ
Swing と直接関係ない話だが SystemTray.isSupported() とか GraphicsDevice.isFullScreenSupported() とか Window.isAlwaysOnTopSupported() とか プラットフォームにサポートされてるか チェックしなくちゃいけないものが増えてきたな 次は透過ウィンドウか
swingもawtも同じコンポーネントだしGraphics使ってるしどこか大きな違いはあるのか?
>>939 重量コンポーネントと軽量コンポーネントについて勉強して出直してこい
SwingはAWTコンポーネントの上になりたってるものだけどな Widgetの話をしているのかAWTパッケージの話をしているのかいつも曖昧だな
942 :
デフォルトの名無しさん :2008/11/16(日) 12:18:38
swingはその両方が中心の話題じゃないのか。たまに「awtはsiwngじゃない!siwngじゃないんだ!!」と決め込んでる奴もいるがw
>>941 SwingはAWTの上になりたってはいるが、AWTコンポーネントの上にはなりたっていない
>>943 自分の文章を読み返した方が良いと思うぞ。
939からの流れであることを考慮してほしいな
947 :
デフォルトの名無しさん :2008/11/16(日) 23:28:10
>>943 使う分には気がつかないが、自分でswingコンポネントを開発してみると分かるよ。ま、君じゃ無理だろうけどねww
俺開発してるけど分かんない!
setUndecoratedしたJFrameをリサイズしたいんだけど,いい方法あるかな?
setSize
ごめん,ユーザがマウスでウィンドウ枠をドラッグできるようにしたいわけだ
ウィンドウ枠を消したいのに、枠をドラッグできるようにしたいとは、これいかに まぁ、自分で枠っぽいコンポーネントでも置いて、 ドラッグに反応してsetSizeするしかないんじゃないかな、と俺は思う
>>952 システムが提供してる機能を自分で無効化してるんだから、自前で実装するしかないだろ…
今仕事で、既存のswingの機能追加をやってるんだけど パネルで枠作っても表示されなかったりしてレイアウトがうまく作れない。 レイアウトのサンプルサイトとかみてながらやってるんだけど、 お勧めのサイトか参考書あったら教えて
956 :
デフォルトの名無しさん :2008/11/17(月) 17:20:32
レイアウトマネージャーは何使ってるの?
>>956 BorderLayoutとFlowLayoutを使っています
>>955 レイアウト試すなら、NetBeans使うのが一番楽。
NetBeansのコードがそのまま使えればそれを使えばいいし、使えなければコピペすればいい
>>958 今からインストールしてやってみる
これってEclipseのVEみたいなもの?
960 :
デフォルトの名無しさん :2008/11/17(月) 18:11:41
ビジュアルエディタより軽くて高性能
>>953 システムの提供する枠(特にタイトルバーとか)は表示させたくないが
サイズ変更はさせたいという場合があるもので。
もちろん枠っぽいものを書いて置いて,setCursorとかでカーソルを変えながら
ドラッグイベントを取ったりすればいいんだと思うんだけど
定式化されたやり方があるかなと思ったもので。
ないなら自分でやるしかなさそうだね
>> 959 一時的に使うなら、インストーラよりも、zip落とすのがいいと思うよ。 リンクは下のほうにある
>>954 「システムが提供する機能」が枠を表示しないようにすると全て使えない
というのも、ちょっとどうなのかと思うが・・・装飾なんだから。
とはいえここはJavaDoc嫁ということで。
964 :
959 :2008/11/17(月) 18:50:27
NetBeansを使ってみたんですが、ソースのフォーマット(?)が既存のコードに無い記述方式を 使っているので、うまく移行できません。 パネルを宣言するのも下記のような記述になります。 org.jdesktop.layout.GroupLayout jPanel3Layout = new org.jdesktop.layout.GroupLayout(jPanel3); この記述を変換することは可能でしょうか?
javax.swing.GroupLayout に置き換えればいいんでね
Java2DやSwingの定番のベンチマークツールってある? jdk1.6u10 でどの描画がどの程度速くなったかちょっと比較してみたいっていう 程度の用途なんだけど…
>>964 デフォのレイアウトがフリーデザインになってるから
右クリックで表示されるメニューでレイアウトの変更をするといいよ
それともJavaのバージョンが古いくてもjavaxにしたいってこと?
969 :
デフォルトの名無しさん :2008/11/18(火) 00:17:56
アクセラレータであるJTableにフォーカスを当てるって可能ですか?
970 :
デフォルトの名無しさん :2008/11/18(火) 00:24:05
JFrameにJButtonやJTextArea、JLabelを貼り付けて表示するプログラムを作っていて、 数十回に1回はウィンドウが真っ白(JFrameをsetVisibleしただけのウィンドウ)になる事が あるんだけど、これはコンポーネントの貼り付け方による不具合と見るのが濃厚でしょうか? 一応イベントディスパッチスレッド(SwingUtilities.invokeLater()を使ってJFrameを生成しています。)
971 :
デフォルトの名無しさん :2008/11/18(火) 01:03:16
972 :
970 :2008/11/18(火) 01:20:30
>>971 発生タイミングはsetVisibleでウィンドウが表示された瞬間既に
真っ白になっています。ただ表示させただけです。
ボタンを押すとかテキストを入力する等のイベントでは全く問題ないです。
973 :
970 :2008/11/18(火) 01:23:11
>>971 書き忘れてしまいましたが、何故かウィンドウを最小化→元に戻すと
表示が直っています。
またウィンドウが真っ白な状態でもKeyListenerやActionListenerは
拾っており、ウィンドウの描画だけがされていないようです。
GLJPanelのパイプライン最適化っていつ実施されるんでしょう?
975 :
デフォルトの名無しさん :2008/11/18(火) 01:54:16
swingって最近どうなの?8年くらい前にちょっとやったけどなんか進化したの? どれくらい実用されるようになった?技術的には速度とかはどうなん? 競合はFlash?Linuxとかでも問題ない?
>>964 レイアウトの勉強しる。
レイアウトをBorderLayoutやFlowLayoutに変えればいい。
>>975 速度はかなり改善された。機能上のめだった変更はない。
Linuxでも問題ない。競合は通常のウィンドウアプリ。
Flash対抗はJava FX
>>975 最新のSun JVM (6u10) だとVistaのSuperFetchみたいな機能で起動も速くなる。
実用では2ちゃんブラウザのV2Cとかは、全OSで愛用者がいるヒットアプリになってる。
>>975 Netbeansあたりを動かして見れば、Swingアプリの現状がわかると思われ。
980 :
デフォルトの名無しさん :2008/11/18(火) 02:45:26
どっかアプレットとかでなんかぐりぐりデモしてるとこないのかな? なんかめっきり見つからんな。いまならアプレットももりもり動きそうな気が するんだけど、なんか実行環境とかに問題があるんだっけ? なんか最近のFlashとアプレットとJavaScriptの位置づけというか力関係って いまいちわかんないんだよなあ。 Flash→デザインきれい。動きもGUIで作れるし、スクリプトもできる。動画送れる。 Java→ごりごりコーディングすればいろいろ作れる。ツールはあんまない感じ。 JavaScript→Ajax!。HTMLを動的にいじれる。互換性対応がだるい。 ActiveX→直接利用より基盤技術か?株トレードとかリアルタイム重視のとこで使われてたり。 こんな印象があるけど、詳しい人コメ頼む
981 :
デフォルトの名無しさん :2008/11/18(火) 02:56:23
力関係 Flash > JavaScript >>>>>>>>>>>> Javaアプレット > Active X
>>980 Flashはツールの力が大きい。
SunはJavaFXを作ったけど、ツールはAdobeソフトのプラグインなんで、Flash/AIR越えはできんな。
983 :
デフォルトの名無しさん :2008/11/18(火) 06:09:28
Javaのデスクトップ用のアプリ環境は、jdk1.4で改善されて、今のjdk1.6では 速度や実用などハード・ネイティブなところはほとんど問題とされないぐらいになっている。 winなら表はjava.awtかも知れないけど、内部ではdirectxやopenglでグリグリに変わっているから実質java使うかmfcつかはソフト上効率差はない。 あと、SUNがデスクトップに本腰を入れてきたから、今作業中だけどほぼライセンス・フリーで使えるツール・ライブラリ・パッケージの整備が盛んでappletとかflushとかは java.awtの敵でもなんでもない感じになっちゃっている。 どれほど作りやすいかは、自分でawtやswingのコンポーネント作ってみれば分かるんじゃないか?
984 :
デフォルトの名無しさん :2008/11/18(火) 06:11:45
グリグリのデモは、java openglのネジの奴と、java2dのswingsetがいいんじゃないか。 swingsetのデモなんかjdk1.2の頃のだけどwwアプレットのデモとかは本家にあると思う。
985 :
964 :2008/11/18(火) 11:55:02
なんとかレイアウトはできるようになりました。
ありがとうございました。
>>965 javax.swing.GroupLayout以前にjavax.swing.*をimportしてたから必要すらなかった・・・
>>968 どうやらjavaのバージョンが低かったみたい最新のjdkにしたら解決した
>>976 昨日Swingの教科書って本買って家で勉強しとります
なんかお勧めの参考書あったら教えてください
986 :
デフォルトの名無しさん :2008/11/18(火) 12:03:21
仕事でやってるんだろ? 勝手にjdkのバージョン上げちゃっていいのか?
>> swingsetのデモなんかjdk1.2の頃のだけどww SwingSet2 とか SwingSet3 を知ってるか?
諸君、JDKのswingset2は今すぐ消しとき。 警察に踏み込まれてHDDからswingset2が発見されたら、君の社会的立場が危うくなる時代がすぐそこまで迫っている。 デモならswingset3にしとき。これには児童ポルノは含まれていない。 ※ いや、Sunはどうも真面目に心配しているらしい。
SwingSet2 も SwingSet3 も LAFは変わったけど、内容は相変わらず初期SwingSetと大差ないよね。
>>974 それがきたときやっとJavaの描画がまともになるんだけどねぇ
>>986 常識的に考えて5.0はEOD移行期間に入ってるんだから
JDK6で組むのが普通だろう
>>990 速度がupdate10であほみたいにあがったよね
>>989 hania.jpgか。
ヒステリックな時代だねぇ。。
>>993 いいかげん、この少年、少女のイメージ差し替えれば良いのにね。
おっさんの奴にさ。
995 :
デフォルトの名無しさん :2008/11/19(水) 04:03:15
スイングはtreeとかtableとかのコンポネントを使うには気にならないだろうけど、 本当はGraphics2Dとコンポネント開発(のフレームワーク)だったりするんだよ? imageとかに特化している場合はimageioとかのパッケージになるけど、swingはコンポネントに特化している。 文句をいわずに使うんだったら関係ないけど・・swignsetから勉強しなおしだなw
SwingSet3の検索結果28件・・ もう誰もJavaなんて使ってないのね
997 :
デフォルトの名無しさん :
2008/11/19(水) 08:20:03 速度も速くなったことだし、デスクトップのクライアントもサポートするみたいだし、これからじゃないか? ところで次スレw