Java低速GUI Swing 7at TECH
Java低速GUI Swing 7 - 暇つぶし2ch1:デフォルトの名無しさん
08/02/28 08:40:23
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。

Java低速GUI Swing 6
スレリンク(tech板)
Java低速GUI Swing 5
スレリンク(tech板)
Java低速GUI Swing 4
スレリンク(tech板)
Java低速GUI Swing 3
スレリンク(tech板)
Java低速GUI Swing 2
スレリンク(tech板)
Java低速GUI Swing
スレリンク(tech板)l50

2:デフォルトの名無しさん
08/02/28 08:41:32
関連スレッド
Java 高速GUI SWT 3
スレリンク(tech板)
【JMF】Java Media APIs【JOGL】
スレリンク(tech板)

3:デフォルトの名無しさん
08/02/28 08:42:26
VisualStudioのようなポトペタ開発環境がほしい!!
NetBeans
URLリンク(www.netbeans.org)
Eclipse+VisualEditorPlugin
URLリンク(www.eclipse.org)
URLリンク(www.eclipse.org)
Jigloo
URLリンク(cloudgarden.com)

4:デフォルトの名無しさん
08/02/28 18:05:07
AWTもターゲットに入ってていいんだよね?

Q. AWT と Swing 混ぜちゃ駄目って聞いたんですけど
  混ぜちゃ駄目なんですか・・・・?
A.
 今まででは、「駄目」というのが正解です。
 が、現在開発中(未リリース)のバージョンではSwingとAWTの混在ができるようになっています。
 正式リリースがされるまで、情報の錯綜があって混乱すると思いますが
 普通の人にとっては「まだ駄目」という状況だと思ってください。

Q. Nimbusって何よ。
A.
 次期Swingの標準となるとされているLAFです。
 元々は、SUNのGnome環境のテーマに使われていた見た目を移植したものになります。
 実装にはXMLベースでLAFを定義できるSynthLookAndFeel を利用しています。
 jdk6の開発版で試す事ができます。

Q. こんなプログラムを作れって言われたんですが・・・
A.
 宿題スレへどうぞ。

Q. なんでスレタイに低速って入ってるの?
A.
 まだまだ速くなるってことさ。

5:デフォルトの名無しさん
08/02/28 19:14:30
死ねよ

6:デフォルトの名無しさん
08/02/29 13:24:35
削除依頼出しとけよ

7:デフォルトの名無しさん
08/02/29 13:35:25
すごくめんどくさいです。

8:デフォルトの名無しさん
08/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());
}
}

9:デフォルトの名無しさん
08/02/29 22:42:27
>>8
super.paintComponentは呼ばないの?


10:デフォルトの名無しさん
08/03/01 00:18:55
>>5-6
お断りだ

11:8
08/03/01 00:40:27
super.paintComponentは呼んだほうがいいんですか?
呼んでもうまくいきませんでしたが。


12:デフォルトの名無しさん
08/03/01 00:57:33
>>11
じゃあsuper.paintComponentを呼ばずにそのコードのどこでラベルが描画されていると思っているんだ?
呼んだとしても自分の描画コードがせっかくsuper.paintComponentが描いた文字を塗り潰しているとは考えないんだろうな。
デフォルトコンストラクタしかないけどsetTextとかでラベルは設定しているんだと思って、そこにはつっこまないぜ。

13:デフォルトの名無しさん
08/03/01 01:22:31
>>11
super.paintComponentを、背景を塗った後で呼んだ?


14:デフォルトの名無しさん
08/03/01 20:27:28
最近グラデーションする人多いのね

15:デフォルトの名無しさん
08/03/01 21:17:28
テーマのOCANが始めからグラデーションかかってるけどラベルはかからないんだっけ?

16:デフォルトの名無しさん
08/03/01 23:18:49
テーマがお侠って元気そうでいいな

17:デフォルトの名無しさん
08/03/02 01:40:52
> 15
かからない。ボタンとメニューとスクロールバーくらいだっけかな。

> 8
そもそもこういうのはUIクラスで実装すべき。

18:デフォルトの名無しさん
08/03/03 10:28:27
updateN build12のNimbusだとJPanelの背景が白くなっちまうぜ
こんちくしょう

19:デフォルトの名無しさん
08/03/03 11:15:03
NimbusってSynthベースだっけ?
Synthでは描画コードちゃんと自分で実装しないと真っ白になるけど。

20:デフォルトの名無しさん
08/03/03 11:23:50
Solaris の Java Desktop はなかなかきれいで Linux の GNOME/KDE より速い (俺体感)。

21:デフォルトの名無しさん
08/03/03 11:27:32
JDSはgnomeでしょ

22:デフォルトの名無しさん
08/03/05 13:41:51
>>19
でもbuild 10だと普通だし、白くならないんだよねー

何が変わったんだろ

23:デフォルトの名無しさん
08/03/09 01:59:36
画像を256色に減色したいのですが、単純に
BufferedImage dest = new BufferedImage(width,height,BufferedImage.TYPE_BYTE_INDEXED);
dest.createGraphics.drawImage(src,0,0,null);
このようにしたら各色6段階で256色にはなりますが、当然見るに堪えません。
各色4byteずつ使って256色としたいです。
自分で減色アルゴリズムを実装するしかないのでしょうか?
それとも既存のクラスで可能なのでしょうか?

24:デフォルトの名無しさん
08/03/09 02:03:11
RGB各色4byteずつ使ったら合計で12byteにならないか?
それだと256色じゃなくて4096色じゃないか?
何か勘違いしてる?

25:24
08/03/09 02:08:38
何か勘違いしてた。ごめ。

>>23
そんな便利なものはなかったと思うので、
自分で減色するしかないんじゃないかな

26:デフォルトの名無しさん
08/03/09 02:15:48
すみません。確かに説明が悪かったです。
ARGBの4バンドで各1byteずつ、つまり1色4bytes
こう書くべきでしたね。

やっぱりそうですか~
理解が大変そうでクラスライブラリに頼りたかったのですがそんなものまではないんですね。
勉強してみます。ありがとうございました。

27:デフォルトの名無しさん
08/03/09 05:05:49
ScrollPaneがScrollしたというイベントはどのListenerで知る事ができるんでしょうか?

28:デフォルトの名無しさん
08/03/09 09:45:50
JScrollBarを取得して、それにAdjustmentListener登録でいんじゃね?

29:デフォルトの名無しさん
08/03/09 15:49:01
viewPortからも取れるよね

30:29
08/03/09 15:50:38
む、イベントが発生しないと意味なかった。失敬

31:デフォルトの名無しさん
08/03/10 10:32:21
IndexColorModel内のRGBデータフィールド(int rgb[])は絶対に変更できないのでしょうか?
どのコンストラクタでも、引数のrgbデータは直接は用いず、全くsetterもないので方法が思いつきませんでした。
あるインデックスの色だけ変えたい場合には
 getRGBs(int[] rgb)
でコピーし、再びオブジェクト作成しか方法はないのでしょうか?

32:デフォルトの名無しさん
08/03/10 14:12:50
Swingの話じゃないなぁ
Java2Dの書籍とかドキュメントとか見直してみたら?

33:デフォルトの名無しさん
08/03/10 18:01:03
>>31
IndexColorModelのカラーパレットは変更できないから新たに作るしかないような

前スレでスレタイにAWTの文字が入ったのに消えちゃったからな
>>1の過去スレリストでも改変されてるし黒歴史扱いか

34:デフォルトの名無しさん
08/03/10 18:17:25
AWTがはいっていたとしてもJava2Dは別の場所での話しでしょう
ここはGUIコンポーネントについての話であって汎用部分の話ではないわけで

35:デフォルトの名無しさん
08/03/10 18:30:20
>>23
氏ね

36:デフォルトの名無しさん
08/03/10 18:37:53
ネタもねぇのに贅沢な連中だな

37:デフォルトの名無しさん
08/03/10 19:34:29
ネタがあろうがなかろうがスレ違いはいらん

38:デフォルトの名無しさん
08/03/10 23:28:20
>>33
そうですね。IndexColorModelをパクることにします。
ありがとうございました。

39:デフォルトの名無しさん
08/03/13 00:36:25
SwingXおもしろいねー
いらんもんがかなりあるけどなんだか楽しく作ってる感じするね

40:デフォルトの名無しさん
08/03/13 12:36:13
JFileChooserで下部のコンボボックスで選択したファイルタイプを取得する方法はありますか?

41:デフォルトの名無しさん
08/03/13 12:57:51
JFileChooser#getFileFilter() じゃなくて?

42:デフォルトの名無しさん
08/03/13 13:43:57
すみません!getSelectedFileのノリでgetSelected...で探してました。ありがとうございます。

43:デフォルトの名無しさん
08/03/14 14:22:02
JFrameを継承したアプリケーションを作ることは一般的に推奨されないようですが、それはなぜなのでしょうか?
ビューはビューとして完全に分離させないといけないからでしょうか?

44:デフォルトの名無しさん
08/03/14 14:25:42
「JFrameを継承したアプリケーションを作ることは一般的に推奨されない」
って言ったやつに聞けよ…

45:デフォルトの名無しさん
08/03/14 14:32:57
一般に推奨されないかどうかは知らないが、
ビューはビュー、モデルはモデル、コントローラはコントローラと、
役割ごとにクラスを分けるのはそれなりに合理的かと

でも別にいけないことはないだろう
全部のメソッドをひとつのクラスに入れてオブジェクト指向なにそれ?でもいいわけだし

46:デフォルトの名無しさん
08/03/14 14:45:00
ありがとうございます。確かSwing Application Framework関連の読み物に書いてあって、ずっと引っかかってたから聞いてみたんです。
それの示す意味は、JFrameは継承するな、ではなくその中にアプリケーション関連のコンテクストを何でもかんでも詰め込むなよ、という意味なんでしょうね。
ちゃんと分離できているのであればokってことで認識しておきます。ありがとうございました。

47:デフォルトの名無しさん
08/03/14 15:00:33
まぁswingは基本的にコンポーネントを継承しなくてもほとんどのカスタマイズができるから
あまりコンポーネントから継承する理由がないんだよな…
個人的には完全に自作するコンポーネントや複合ウィジェットみたい
なものでしかコンポーネント類からの継承は使わないかも

48:デフォルトの名無しさん
08/03/14 15:20:04
Swing Application FrameworkつかったらJFrameは継承しないとだめだろうなぁ

つーか、事実上GUIエディタつかわないと効率よく開発できないんだから
その流儀に従うだけ、というのが正解

49:デフォルトの名無しさん
08/03/14 19:32:14
継承したところで、それ用に作られてる一部のメソッド以外をオーバライドなんて怖くて出来ないし
単にコンストラクタでパブリックメソッドを呼び出すくらいなら、コンポジションを使った方が堅固。
しかし、作ったクラスに対して、自作のメソッドとコンポネントのメソッドを両方呼び出せると便利だし
一方、あのコンポネントの大量のメソッドを委譲するメソッドをひたすら書くのは死ねるので
まあ、継承してもしかたないかな...みたいな感じだが
JFrameなど作ったその場で表示してあとは放置するようなものは、継承を使わなくても書けるので
(焼け石に水だけど)使わない方がいいじゃない?みたいな感じじゃね?

50:デフォルトの名無しさん
08/03/14 19:34:13
>>49
コンポーネントにアクセスするのが大変にならないか?

51:デフォルトの名無しさん
08/03/14 19:37:10
>一方、あのコンポネントの大量のメソッドを委譲するメソッドをひたすら書くのは死ねるので

そういうのはeclipseに自動生成させればいいよ
だからって別にやらないけど

52:デフォルトの名無しさん
08/03/14 23:07:51
>>45
この考え方はClass間の相互依存が強くなって、カプセル化など構造化プログラミングに真っ向から逆らってる。

53:デフォルトの名無しさん
08/03/24 22:49:55
URLリンク(lessisbetter.org)
を参考にしてプルダウンメニューを作っています。
CompoundBorderを用いることで元のボタンのボーダーに装飾をつけているようなのですが、CompoundBorderを用いる時点である程度のマージンが発生してしまいます。
よってできあがったものは通常のボタンのサイズにPullDownBorderのインセットを加えた値より大きなものとなってしまいます。
この方法では完全な実装は不可能なのでしょうか?

54:デフォルトの名無しさん
08/03/24 22:57:20
うほっ勘違いっす。
BorderFactory.createCompoundBorder(getBorder(),new PullDownBorder());
ここのgetBorder()で単純に元のボーダーを取得せずに
BorderFactory.createCompoundBorder(((CompoundBorder)getBorder()).getOutsideBorder(),new PullDownBorder());
こんな感じでボタンだけのボーダー取得してやりゃ解決ですね。
すみませんでした。

55:デフォルトの名無しさん
08/03/26 21:52:09
JSE 6 にしたら JFileChooser がすっげー遅くなったような気がするんだけど
切断してるネットワークドライブでも見に行くようになったのか?

56:デフォルトの名無しさん
08/03/26 21:59:35
>>55
URLリンク(bugs.sun.com)
かなり前からですんで。

57:デフォルトの名無しさん
08/03/26 22:19:41
ちょw まじですかwww

58:デフォルトの名無しさん
08/03/27 10:40:50
一応正式リリース版なはずのjava6で、こんな致命的なバグが8ヶ月も修正されないってのは、
Sunの技術の低さか、そうじゃないとしたら、Swing(のWindows LaF)軽視、デスクトップアプリ市場放棄だろ。


59:55
08/03/27 10:51:45
AWT の FileDialog の方は何の影響もないね。むしろ JFileChooser の不自然極まりない
ダイアログよりネイティブのダイアログなんでかなりまともに見える (久しぶりに使ったんでちょっと感動)。

Swing と AWT の混在ってコンポーネントやメニューの重なり以外に何かあるんだっけ?
AWT のダイアログが上に来るのなら基本的に大丈夫だよね?

60:デフォルトの名無しさん
08/03/27 11:34:44
大丈夫だけど、FileDialogにはフィルタを設定できないという欠陥が・・・

61:デフォルトの名無しさん
08/03/27 11:54:02
LightWeight って、いったいどこが LightWeight なの???

62:デフォルトの名無しさん
08/03/27 12:40:48
>>61
OSの機能を使っているコード量がライト。

63:デフォルトの名無しさん
08/03/27 12:52:02
>>58
最初から悪かったわけではなくu2で発症したことを考えるとなんかありそうだ
ちなみにjdk5.0の時代はもっと放置してた致命的なバグがあったんだぜ・・・


>>61
懐かしいテンプレだな

64:デフォルトの名無しさん
08/03/27 12:52:49
>>59
機能不足過ぎる

65:デフォルトの名無しさん
08/03/28 03:26:16
>>62
馬鹿だろお前

66:デフォルトの名無しさん
08/04/08 19:02:08
数年ぶりにswingさわったけど、カレンダーコントロールすらないのにびっくりしたよ。
カレンダー実装でおすすめある?

67:
08/04/08 19:25:50
使ったことないけどSwingX

68:デフォルトの名無しさん
08/04/08 20:58:34
>>66
「JCalendar swing」でぐぐって出てきたのを全部試して比較レポートしてくれると
うれしい人がたくさんいると思う。

69:デフォルトの名無しさん
08/04/08 21:32:47
自分でやれよ

70:デフォルトの名無しさん
08/04/14 17:18:41
教えてください。HTMLファイルを文字列として読み込み、ループを
まわして一定のパターンを見つけたら、一定の別のパターンの
タグ文字列を入れたいとして、不足している情報をダイアログで入力してもらい、
それをループの側が受け取り、入れるべき文字列を作ります。
モーダルダイアログでは、一応動くものが作れましたが、モードレスで
同じことをしようとしても、中抜けのダイアログになり、できません。
waitとnotifyAllをうまく動かせませんでした。ループの途中で
joinを試みましたが、私のやり方ではダメでした。
JDialogを継承したクラスをループの中から別のスレッドで開いて
いいんでしょうか?

71:デフォルトの名無しさん
08/04/14 19:43:09
駄目。
Swingのスレッドモデルを勉強したら分かるかもしれないぞ。

おそらく、1つ目のダイアログが出た後に、ループ側のスレッドが
初めのとは別スレッドから別のダイアログを立ち上げようとして変になっているんだろう。
invokeLaterや、SwingWorkerなどを利用してみましょう・・・

72:デフォルトの名無しさん
08/04/14 21:00:45
どうせ例示するならinvokeAndWaitの方が適切のような。

73:70
08/04/14 21:18:01
レスありがとうございます。回るたびに新しいスレッドを
作ろうとしてしまうということですか?

invokeLaterは、やってみましたが、
やり方が悪いのか、うまく行きませんでした。SwingWorkerは
SUNのチュートリアルを読みましたが、理解できませんでした。
invokeAndWaitは呼び出す側を間違えたというエラーが
出ました。結城さんのデザインパターン、マルチスレッド編の
GuardedSuspensionまで読んで分からなかったので、
一旦聞いてみたくなりました。結構いろいろ、ググりましたが
決め手になると思える情報がないように感じました。大村さんの
Swingの本の1巻目を買いますと、3巻目だかにスレッドと
Swingの関係が扱われていると書かれていますが、Amazonで目次を
見ると、スレッド関連のものが見当たりません。

74:デフォルトの名無しさん
08/04/14 21:20:48
>>73
オープンソースなのに何でソース読まないの?

75:デフォルトの名無しさん
08/04/14 21:26:19
イベントスレッドの動き理解してねぇのにソース読ませるのはかえって混乱するだけだろ。

76:デフォルトの名無しさん
08/04/15 00:30:46
AWTスレッドとかイベントディスパッチスレッド、シングルスレッドモデルとか
しらべてみるほうがいいぞ

直接解決するコード教えたところでたぶんほかのところも問題ありまくり

この問題は別にSwingに限らないしね
GUIのアプリ作る場合は常についてくる

77:70
08/04/15 10:16:43
昨日、寝る前、結城さんの本をパラパラめくっていたら、
まだ読んでない後ろのほうに、ご指摘の単語が一杯
出ているのを見つけました。最後まで読んだほうが良さそうです。
また調べなおして出直してきます。
皆さんのレスを読んで煮詰まり感が、いくぶん解消されたので
じっくり考えようという気分になりました。ありがとうございます。

78:デフォルトの名無しさん
08/04/15 13:58:47
がんがれ

79:デフォルトの名無しさん
08/04/20 19:02:31
JTable2JTreeやJTree2JTableみたいなクラスはないのでしょうか?
結構需要が多いとは思うのですが、Swing Hacksなどでも紹介はされておらず。。
JTree2JTableは可能ですが、JTableからJTreeにデータ構造を戻せるのか
わかりません。
JTableがObject型なので、JTableを変更した場合、同時にJTreeに通知する
手段などあるのでしょうか?

80:デフォルトの名無しさん
08/04/20 19:28:32
JTreeとJTableじゃなく、
TreeModelとTableModel見て可能かどうか考えてごらん。


81:デフォルトの名無しさん
08/04/20 20:05:44
MVCから勉強し直した方が良いんじゃない?

82:デフォルトの名無しさん
08/04/20 21:07:56
硫化水素ガス自殺が流行ってんだってな。
Swing+AWTでry

83:デフォルトの名無しさん
08/04/20 23:28:55
プロバイダ料金6500円って、ADSLのままになら2100円だったのに……。払えねぇよ

84:デフォルトの名無しさん
08/04/21 20:30:00
>TreeModelとTableModel見て可能かどうか考えてごらん。
もちろんそうです。表現がいけなかったですね。
普通に考えたら無理かなと。

85:デフォルトの名無しさん
08/04/22 01:00:28
>>77
この「煮詰まる」の用法・用量ってあってるっけ?

86:デフォルトの名無しさん
08/04/22 01:15:48
行き詰るの間違いだと思う

87:デフォルトの名無しさん
08/04/22 02:11:31
本来は会議なんかで結論がまとまっていくみたいなときに使うね。



88:デフォルトの名無しさん
08/04/22 11:07:17
>>85
この「用法・用量」って使い方あってるっけ?

89:デフォルトの名無しさん
08/04/22 17:54:23
>>86
みんな「煮える」って表現とごっちゃになるんだよね。

90:デフォルトの名無しさん
08/04/22 17:57:27
料理下手の人だと、煮詰めるのに失敗して焦がしちゃう事を連想するんじゃね?

91:デフォルトの名無しさん
08/04/22 20:18:43
うわ……まさかと思ってググったら……
「煮詰まる」っつー言葉、誤用されてる事が多いのか。

俺は元々正しい方の意味を知っていたけど(むしろ誤用されている事を知らなかった)
うっかりどこかで使っていたら、意味が伝わらなかったりしたのかな。怖いな。
まぁ、俺も偉そうな事なんて全然言えないけども。

そう言えば、「“確信犯”という言葉はもう“計算高い犯罪”という誤用が定着しているから
そっちの意味に変えてしまおうぜ」とか言ってる奴が居たけど
そういうのはマジやめてほしい。
正しかったはずの俺の方が、何時の間にか間違いになるなんてゴメンだぜ。

せめて事前に @Deprecated アノテーションを付けてだな……

92:デフォルトの名無しさん
08/04/22 20:48:57
うけたww
その気持ち分かるわ~w

93:デフォルトの名無しさん
08/04/22 20:49:52
>>91
確信犯の誤用ってのは「悪い事と確信していながら犯罪を行う人」じゃねーか?
計算高い犯罪、なんて意味で確信犯って言ってる奴は見たことねーぞ

94:デフォルトの名無しさん
08/04/23 12:27:47
>>91
@Deprecated .... System.getenv のようにdepricated指定を外されたりしてな・・・・
>>93
俺もそっちの誤用だと思う。

悪いと分かっていながら犯罪を行う人間と
正しいと信じて犯罪を行う人間だったら・・・
前者の方が何とかできそう感があるよな・・・・

95:デフォルトの名無しさん
08/04/23 12:49:01
>正しいと信じて犯罪を行う人間だったら・・・

こっちの人間はダメか?

96:デフォルトの名無しさん
08/04/23 13:18:24
そっちのネタだけで引っ張るなw 戻せ思い出せ!ここはSwingスレ!

97:デフォルトの名無しさん
08/04/23 14:59:49
答えて欲しかったな・・

98:デフォルトの名無しさん
08/04/23 18:05:03
updateNかJavaSE7がでればネタはいくらでも・・・

99:デフォルトの名無しさん
08/04/23 19:00:06
JavaSE7はクロージャ以外の目玉ってなんかありますか?

100:デフォルトの名無しさん
08/04/23 22:07:08
>TreeModelとTableModel見て可能かどうか考えてごらん。
解決しました。
できました。

101:デフォルトの名無しさん
08/04/24 01:00:26
>>91
>そういうのはマジやめてほしい。
>正しかったはずの俺の方が、何時の間にか間違いになるなんてゴメンだぜ。

ムリムリw
プログラミング言語でさえ仕様が変わっていくのに
自然言語の仕様をある一時のままでとどめておくなんて不可能だよ。
ある学者が「独壇場(どくだんじょう)」が読みも漢字も本来とは違うと知ったが、
独擅場(どくせんじょう)と正しく(?)使用すると「独占場」ととられてしまう恐れがあるということで、
その学者、結局「独壇(擅)場」って語彙を使わなくなってしまったんだそうなw
辞書によってはもう独壇場で載ってる。
「新しい」を「あたらしい」と読むのも江戸時代のはやり言葉。本来は誤用。
他にも、さんざか→さざんかとかは?
すごい、すごく、ちゃんと使い分けてる?

たいていの言語学者が一笑に付す日本語の正しい・正しくない議論だけど、
どうしても正しい日本語を決めなきゃならないんだったら平安時代の宮ことばにしてほしい・・・


102:デフォルトの名無しさん
08/04/24 01:30:21
>>88
言わんとする所は「いま一般的な辞書的用法」とかの方が誤解ないだろうね
用法用量つったら医薬品の使い方だろうし、他の意味で使われる例って思いつかないな。ぐぐってもそんなんばっかりだ

煮詰まるを「行き詰まる」で使うのって、60過ぎてポケモンに嵌ってる親父に聞いたら親父の世代でもすでに定着していたそうだ
正反対の意味で判断つかなくて困るってのは判るけど、今頃反発してもどうにもならん気がするな。
「確信犯」の誤用認知は随分知名度上がった気がするけど(2chだけかな?

誤解を少しでも省きたい時は、結局他の言葉に言い換えるしな

103:デフォルトの名無しさん
08/04/24 02:00:44
おいおい、用法・用量ってのはギャグだろ・・・常考・・・

104:デフォルトの名無しさん
08/04/25 01:12:43
>>101
悪い悪い。なんか言い方が悪かった。
「何時の間にか」は間違い。「ある日を境に突然」が本意だった。

言葉は移ろいゆくもの。そりゃもちろんさね。
だからと言って、まるで法律でも公布・施行するかのように
「明日から××は○○という意味になります。ホニャララ学会で決定されました」
と、ある日突然人為的に決定される世の中はいやなんですぜ、と言いたかった。

もちろん、そんな動きなんて現実にはまだ無いわけで(無いよね?)、杞憂だけども。

言いたい事さえ正しく通じるなら、「正しい日本語」レイヤについては、俺ぁ気にしないね。

105:デフォルトの名無しさん
08/04/25 01:20:00
おまえの脳内妄想なんか聞いてねぇからグダグダ引っ張ってないで引っ込んでろカス

106:デフォルトの名無しさん
08/04/25 08:27:35
何だとコラ対面恐怖症のグズ野郎

107:デフォルトの名無しさん
08/04/25 12:34:18
>>104
久しぶりにキモイのが現れたな

108:デフォルトの名無しさん
08/04/25 21:17:03
頭がおかしい

109:デフォルトの名無しさん
08/04/26 01:00:22
お前が一番おかしい
昭和生まれは死ね

110:デフォルトの名無しさん
08/04/26 01:34:23
ほとんど昭和生まれだと思うんだがw

111:デフォルトの名無しさん
08/04/26 05:36:34
こよいは平成20年なわけだし、まあそうだなよな

112:デフォルトの名無しさん
08/04/26 08:24:39
変なのが湧いてるな
GW厨とかいうやつか

113:デフォルトの名無しさん
08/04/26 16:19:07
GWってなに
休出まうまう

114:デフォルトの名無しさん
08/04/26 22:46:58
>>113
それは組織の問題か個人の能力が組織の要求に足りていないのかどっちだ?

115:デフォルトの名無しさん
08/04/26 23:50:43
いま帰宅した 両方ですね
俺と会社、どっちがさきに潰れるかっていう弱小
夢も希望もない方の低能です

116:デフォルトの名無しさん
08/04/30 15:20:02
イベントディスパッチスレッドで発生した例外を一括して捕捉する方法は
ないでしょうか?
死んでしまわれる前になんとか捕捉してログを出すなり状況を記録するなりしたいのですが。

117:デフォルトの名無しさん
08/04/30 19:02:39
必ずイベントディスパッチスレッドだけで発生した例外?

118:デフォルトの名無しさん
08/04/30 19:25:53
>>116
これは?
URLリンク(java.sun.com)(java.lang.Thread.UncaughtExceptionHandler)

119:デフォルトの名無しさん
08/05/01 13:05:44
>>118
ありがとうございます。それでできそうな気がします。
イベントディスパッチスレッドを得るメソッドって標準ではないですよね?
invokeLaterとかで放り込んでイベントディスパッチスレッド上で実行
するのがいいでしょうか。

120:デフォルトの名無しさん
08/05/01 13:08:40
SwingUtil か何かにあったろ。

121:デフォルトの名無しさん
08/05/01 15:32:29
どれ?

122:デフォルトの名無しさん
08/05/01 15:36:48
SwingUtilities#isEventDispatchThread() みたいな名前の奴

123:デフォルトの名無しさん
08/05/02 05:29:48
EDTを返すわけじゃないんじゃ

124:デフォルトの名無しさん
08/05/04 09:20:26
AWTですがこちらで質問させてください。
TrayIcon#displayMessageは
一部のプラットフォームでは、メッセージの表示をサポートしていない可能性があります。
らしいですが、WindowsXPでもできるOSできないOSがあるのでしょうか?
WindowsXP Media Center Editionをしようしていますが表示されません。
OSの問題なのでしょうか・・

125:デフォルトの名無しさん
08/05/04 10:32:40
SystemTrayのjavadocには以下のように記述されています。
一部のプラットフォームでは、システムトレイが存在しなかったり、
サポートされていなかったりすることがあります。
その場合、getSystemTray() は UnsupportedOperationException をスローします。
システムトレイがサポートされているかどうかを検出するには、isSupported() を使用します。

上記の挙動は確認してますか?
SystemTray#isSupported()はfalseを返しているのでは?


126:デフォルトの名無しさん
08/05/04 10:45:46
いえ、システムトレイ事態は使えていて、メッセージのみ使えないんです。

127:デフォルトの名無しさん
08/05/04 10:47:56
そういや同じXP搭載マシンでもjava.awt.Desktopが動くマシンと動かないマシンがあるのは有名だね
たしか例外は出してなかったと思う
この1.6で追加されたクライアントサイドの強化のapiはバグバグとはよく言われてる

128:デフォルトの名無しさん
08/05/04 10:52:36
>いえ、システムトレイ事態は使えていて、メッセージのみ使えないんです。
では、下記では?
SystemTray#isSupported()のjavadocには以下のように記述。
『開発者は、すべてのシステムトレイ機能がサポートされていると
想定しないでください。』

129:デフォルトの名無しさん
08/06/02 11:59:22
excelのツールバーにある図形描画と同等の機能をSwingで実装しろといわれています。
そんなことできるのでしょうか?
また参考サイト等ありましたら教えていただけないでしょうか。

130:デフォルトの名無しさん
08/06/02 12:08:28
>>129
>そんなことできるのでしょうか?

出来ないと断言できる理由が何もない

普通にSwing系の解説サイトでもあさると良いよ

131:デフォルトの名無しさん
08/06/02 19:54:21
excelの描画と同等ってことは、ベクタデータじゃないといけないのか?
SVG描画用のライブラリと組み合わせるとかどうかな?

132:デフォルトの名無しさん
08/06/02 20:04:29
恐らくそういう問題ではないと思う

133:デフォルトの名無しさん
08/06/03 02:44:49
Java2D使えばExcel以上の出来るだろ。
Jude試してみ。

134:デフォルトの名無しさん
08/06/03 02:54:20
期待されてるのはすぐ使える ActiveX コンポーネンツ のようなリブラリーが存在するかという事だと思うんだ。

135:133
08/06/03 02:57:24
そこまで志低いんだったらPGやめろ、と言おうかと思ったんだが、
俺それ作って売ろうかな・・・
Java2D弄るの好きだし。


136:デフォルトの名無しさん
08/06/03 11:19:45
>>133
今、eclipseにAmaterasUMLって言うのが入っていて、エクセルみたいに直線、
四角をD&Dで調整しながら作成できることを確認しました。
これはeclipseプラグインなので、SWTで実装されていると思いますが、
Swingで実装しなければいけない制限があり、Swingでのサンプルソース的なものがあるサイト等ありましたら
教えていただけないでしょうか。

137:デフォルトの名無しさん
08/06/03 11:33:38
継承・インターフェイスを使った図形クラス管理
マウス・イベント処理
描画

と、まさに初級向け課題として定番だと思うので、授業を思い出して自力でがんばれ

138:デフォルトの名無しさん
08/06/03 11:36:34
これとか
URLリンク(www.jgraph.com)

139:デフォルトの名無しさん
08/06/03 12:42:45
なんと言うかホントJava初心者っぽくて・・・・時間かかりそうだな・・・・
サンプル以前にどう作るかを考える段階じゃないかね・・・・

というか、Excelみたいってのをどう捉えるか要件定義から入ろうぜ。
課題出した奴に詰め寄って、しっかりヒアリングからだ。

140:デフォルトの名無しさん
08/06/03 16:19:05
jgraphはレイアウト機能が有料。
jungならオープンソースで全部そろうよ。
URLリンク(jung.sourceforge.net)

この手のグラフライブラリの話題は、定期的に出るなぁ。

141:デフォルトの名無しさん
08/06/04 14:11:28
ラベル文字を5秒おきに変えたり、RMIでメッセージを受け取ったら背景色変化させたいのですが、
UIアクション以外の内部アクションを発生させる方法はあるでしょうか?

142:デフォルトの名無しさん
08/06/04 15:19:27
>>141
よくわからないけどSwingUtilities.invokeLaterとか?

143:デフォルトの名無しさん
08/06/04 19:25:05
JButtonのマウスイベントでボタンのD&Dを実装(setBoundsの連続)しました。
D&Dでボタン同士が重なり、また通過しても2つのボタンは正しく表示されていますが、
Graphics#drawLineで描いた線の上を通させると、ボタンは残りますが線は通過した範囲のみ消えます。

部品+setBoundsでjavaがうまく描画してくれているようなので、線の部品を探しましたが、
そのようなJコンポーネントはありませんでした。

通過後も線を残すためにはどのようにすればよいでしょうか。

144:デフォルトの名無しさん
08/06/04 19:46:12
>>143
その線はpaintComponent(Graphics g)の中で描いているか?

145:デフォルトの名無しさん
08/06/04 20:07:22
>>144
マウスイベンクラスないで、親パネルのgetGraphicsをとって、drawLineしています。

146:デフォルトの名無しさん
08/06/04 21:16:21
>>145
ボタンなどを移動させると、swingはボタンを元の位置から消して新しい位置に描き直さなければならない。
このとき、swingは影響のあるコンポーネント全員に、「すまんが、表示が変わったので、もっかい描き直してくれ」 と通達を出す。
パネルやボタンなどはこれに応えて、背景を塗りつぶしたりボタンの絵を描き直している。
自分で勝手に描いた線などはこのとき一緒に消されてしまうので、自分もswingの通達に応えて線を描き直さなければならない。
具体的には、再描画が必要なタイミングで各コンポーネントの paint(Graphics) または paintComponent(Graphics) メソッドが呼ばれるので、
このメソッド内で drawLine を呼んで線を描き直すようにしておけば良い。

147:デフォルトの名無しさん
08/06/04 21:33:03
スイングの設計方針を良く分かっていらっしゃる

148:デフォルトの名無しさん
08/06/04 21:34:21
>自分で勝手に描いた線などはこのとき一緒に消されてしまうので、自分もswingの通達に応えて線を描き直さなければならない。 

問題はここを教えてあげることだったんだけど。

149:デフォルトの名無しさん
08/06/04 21:48:09
>>146
ありがとうございます。できました!
線を描いても、書いた線に画像を通過させても残るようになりました。

書いた線をクリックで選択して、D&Dで動かそうとしていますが、方法が見当たらず苦戦しています。

書いた線の始点終点を保存しておき、クリック箇所の色を取得し
線用の色の場合は、保存した線情報から線を特定し、
D&Dポジションを使用して線を移動させようと考えているのですが、
クリックした位置の色情報が取れません。
Graphicsクラスやマウスイベント情報にそのようなメソッドがなくて…

そもそも書いた線をJButtonのような何かのコンポーネントとして扱うことはできないのでしょうか。
縦横のみならラベルにする手もありますが、斜めの場合はラベルではできないと思います。

150:デフォルトの名無しさん
08/06/04 21:55:52
>>148
どういう意味?

151:デフォルトの名無しさん
08/06/04 22:53:32
>>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) {
    ...
  }
}

理屈は数学の教科書でも読んでください。

152:デフォルトの名無しさん
08/06/05 00:51:39
>>151
真面目ですなぁ、、、

if( cx >= min( ...
 if( abs( (cy-y2)*(cx-x1) - (cy-y1)*(cx-x2) ) < 0.01 ) {
  ...
 }
}
掴めるか否かは気分次第な超テキトー実装例w

153:デフォルトの名無しさん
08/06/05 00:56:52
そういうことじゃなくて、java2d使えって落ちじゃないの?

154:デフォルトの名無しさん
08/06/05 00:58:06
>>150
すぐ下に方法が書いてあったね。

155:デフォルトの名無しさん
08/06/05 09:22:39
どうでもいいんだけどさ、JMenuBarに未実装メソッドでsetHelpMenu()なんてあったんだね。

ユーザーがメニューバーで「ヘルプ (help)」オプションを選択すると表示されるヘルプメニューを設定します。このメソッドはまだ実装されていないので、例外がスローされます。

どういう機能なんだろ・・・

156:デフォルトの名無しさん
08/06/05 11:28:11
>>155
メニューバーの項目をひとつだけ右端に表示する機能じゃないかと想像する・・・

157:デフォルトの名無しさん
08/06/05 11:37:39
なんだ~ それならBoxですぐ可能かぁ 期待して損した。

158:デフォルトの名無しさん
08/06/05 11:54:27
>>153
Line2Dなるクラスがあったのですが、求めているものではないようです。
線オブジェクトみたいなものはあるのでしょうか?

159:デフォルトの名無しさん
08/06/05 13:22:10
>>155
awtにそのプロパティあったからそれをもとにに作ったのはいいが
プラットフォーム依存でやめたと予想

160:デフォルトの名無しさん
08/06/05 17:15:32
>>151
それだとクリック毎に全部の線の範囲確認なので、できれば色を取得して
線の上でない場合、の処理を加えたいです。座標でピクセルを選択し、色を取得する方法はあるのでしょうか?

161:デフォルトの名無しさん
08/06/05 23:12:28
>>160
色で判定とかマジでやめとけ
* 直線描画にアンチエイリアスがかかったら色判定できない。
* 直線の上しかつかめない。(実際のアプリケーションだとほかにオブジェクトが
ない場合はちょっと離れててもつかめるようにすることが多い。)
* 色をとる処理自体軽くない。

162:デフォルトの名無しさん
08/06/05 23:13:04
>>160
直接画面に描く代わりにBufferedImageに線を描いておけば、BufferedImage#getRGBで色を拾える。
もしMacで動かす場合は、デフォルトでアンチエイリアスがかかるみたいなので、切っておかないと期待した色が出ないかもしれない。

画面上のピクセルを拾う方法もないこともないけど・・・あんまりおすすめできない。
画面がフルカラーでない場合、線を描くときに減色されて色が変わってしまうし。
他のウィンドウやコンポーネントが上に重なってると、色を拾えないし。
(アプレットの場合は)セキュリティにひっかかるし。

163:デフォルトの名無しさん
08/06/06 08:33:53
JListやJTableなどの、実際にはレンダラーとしてしか存在しないコンポーネントにマウスイベントや、その他のイベントを伝えるにはどのようにすればよいでしょうか?
例えば、JListのレンダラーの一部にボタンを入れて、そのボタンを押す(ように見せる)ときなどです。

自分でやってみたのは、クリックされたポイントからそこにあるコンポーネントを取得し、そのコンポーネントのすべてのMouseListenerにMouseEventを伝える、という方法ですが、とてもいい方法とは思えません。
何かおすすめの方法はありませんでしょうか?

164:デフォルトの名無しさん
08/06/06 09:44:21
そもそもsunのレンダラにJComponentの子を使ってるっていう設計自体が間違ってるのでそれに依存した実装はよくない。

165:デフォルトの名無しさん
08/06/06 09:46:21
swingでHTMLを使って文字列を表示する処理を入れているのですが、
たまに一瞬HTMLのタグが見える問題に悩んでいます。
(もちろん、その後すぐに正しく文字列は表示されますが。)
HTMLタグの記述が多ければ多いほど、問題が発生しやすいようですので、
HTMLタグの解釈に時間がかかっているのだと思います。
上記の問題はどうすれば解決するでしょうか。
よろしくお願いします。

166:デフォルトの名無しさん
08/06/06 10:34:05
>>165です。
HTMLを使って文字列を表示する処理は、別スレッドで行っておりました。
ですので、別スレッドの中で、invokeLater()を使ってEDTの処理として
実行するようにしたら、>>165の現象は発生しなくなりました。
でも、この対処法であっているのでしょうか。。
何か別の考えや私の考え違いがありましたら、ご指摘お願いします。

167:デフォルトの名無しさん
08/06/06 10:49:37
>HTMLを使って文字列を表示する処理は、別スレッドで行っておりました。
現象をみれば、そうだろうね。

>でも、この対処法であっているのでしょうか。。
対処法というか、Swingは基本的にEDT上でしか実行しちゃ駄目ですよ。
なので、この"対処法"(EventQueue#invokeLater()でEDT上で処理を実行)というのがSwingの描画においての正道であって、EDTと別スレッドで実行する方がいけない。

SwingとEDTに関して理解できてなさそうなので、Sunに詳しいページがあるから、そこを読んでみるといいよ。
なんらかの理由があって、別スレッドで実行しているなら、上記を理解したうえでしかるべき実装を行えばいいと思う。

168:デフォルトの名無しさん
08/06/06 11:55:16
>>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()を使わないことの切り分けの基準みたいなものがありましたら、
お教えお願いたします。(長々とすみません。)

169:デフォルトの名無しさん
08/06/06 12:12:54
MVCで切り分けたらいいんでね?
VC系の処理はEDTだからinvokeLater()使わずに素で書けばいいし
重い処理は別スレッドのMに渡してがーっと処理して
最後にinvokeLater()でVCのデータ受け取りメソッドを呼んでもらえばいい

170:デフォルトの名無しさん
08/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と一緒。

171:デフォルトの名無しさん
08/06/06 12:50:10
>>169
>MVCで切り分けたらいいんでね?

なるほど。。そこから考えると、すっきりしました。
ありがとうございます。

>>170
>例えば、main()から実行を開始する場合、invokeLater()に渡す
>invokeLater()を意識せずともEDT上で実行されますので、
>通常は、その都度invokeLater()を呼び出す必要はありません。

なるほど。。

>時間がかかる処理で、描画を伴わない場合、EDTと別スレッドで実行し、
>その処理が実行された後に、 GUIの描画を更新する必要がある場合、
>invokeLater()を使用します。

なるほど。。
基本的なinvokeLater()の使用スタイルになりそうです。
ありがとうございます。

>setModel()内で再描画が要求されるため、 setModel()の呼び出しはEDT上で
>実行する必要があります。

とてもいい例を提示していただき、ありがとうございます。
今後、盲点になりそうなところだったと思います。

おっしゃる通り、ドキュメントの理解をきちんとしておく必要がありそうです。
しかし、おかげ様でかなり理解が深まりました。
レスありがとうございました。

172:デフォルトの名無しさん
08/06/06 13:19:11
>>152
計算が理解できなかったので他の方法を探ってみました。
new Line2D.Doubleで線オブジェクトにして、contains(イベントからのポイント)でいけると思ったのですがダメでした。
javadocを確認したら、線は領域を持たないということで、常にfalseを返していました。
Areaというものがあったので、ラッピングしてみましたがこれもダメでした。
new Area(line).contains(point)
線に対して、指定ポイント上にあるかの判断は標準ライブラリとして用意されていないのでしょうか?

173:デフォルトの名無しさん
08/06/06 13:30:49
>>172
その線というのは、数学的な無限に細い線(幅が0)を表しているから
単純にArea化しても一緒

その手のやりかたをするなら
Stroke stroke = new BasicStroke( 線幅 );
Line2D line = new Line2D.Double( ... ) ;
Shape shape = stroke.createStrokedShape(line);
shape.contains(point)
とすればたぶんできる

174:デフォルトの名無しさん
08/06/06 14:51:42
mouseDraggedの発生タイミングって決まっているのでしょうか。
例えば1ピクセル移動ごとに発生とか。

175:デフォルトの名無しさん
08/06/06 14:56:52
決まってない。
てきとーに発生する。

176:デフォルトの名無しさん
08/06/06 15:25:41
>>173
ありがとうございます!!!!
できました。これを駆使して、描画した線のD&Dが実装できました。
感謝です。

177:デフォルトの名無しさん
08/06/06 18:01:30
ボタンを押したら凹んだままになり、再度押すと凸になるボタンてないのでしょうか。
JButtonにはそれらしきプロパティがなかったです。
トグル系もラジオボタンとチェックボックスしかなくダメなようです。

178:デフォルトの名無しさん
08/06/06 18:25:12
>ボタンを押したら凹んだままになり、再度押すと凸になるボタンてないのでしょうか。
javax.swing.JToggleButton


179:デフォルトの名無しさん
08/06/06 19:30:43
>>172
あれ?線分までの最短距離を出すメソッドがあってそれ一発で済むと思ったけど…
Line2D#ptSegDist() だっけ?

180:デフォルトの名無しさん
08/06/06 20:12:39
計算内容を理解せずに使うという点では結局どれも同じだと思うけどな

181:デフォルトの名無しさん
08/06/06 22:08:04
ラベルがあるパネルに背景をBufferedImageでセットしています。
ラベルの表示、非表示機能を実装しようとし、ラベルのsetEnabledをしましたが、
ラベル部分がデフォルト背景(?)の灰色になり、BufferedImageが適用されません。
また、ラベルのマウスイベントも生きているようです。
ラベル非表示をsetBounds(new Rectangle(0,0,0,0))で実現していますが、邪道でしょうか?
もっとスムーズな方法があればご教授ください。
やりたいことは、見た目の完全消去(BufferedImageで塗りつぶし)、イベント等も発生させない、です。

182:デフォルトの名無しさん
08/06/06 22:41:05
>>181
setVisible(false) は?

183:デフォルトの名無しさん
08/06/07 00:29:20
java2dといわれたら普通に分かると思うんだけど…
ただ、感謝もあったし、親切なのはいいことですね

184:デフォルトの名無しさん
08/06/07 00:35:10
計算の方を理解するのはたぶん無理でしょ。
線形代数とかになるけど、結局その式一つを説明するにしても高度な数学wを理解しなければならないことと同じだからね。

化学とか薬学・医学の人すら使わないし、PGは理系文系の混在だからなんともいえない。
数学の理解よりも、分からない人は、そういうのは頭いい人に任せておいて無理しないでjava2dとか使って素直に実装してくれればいいよ。

185:デフォルトの名無しさん
08/06/08 17:10:28
質問があります。
Swingで日韓の文字を交ぜて表示したいのです。
JEditorPaneのtext/htmlモードでは普通に(タグで指定とかしなくても)うまくいきました。
JEditorPaneのtextモードでは表示してくれませんでした(・・・ナカグロになります)。
JTreeで表示したいのですが、どうすれば良いでしょうか?

環境はOSがWindowsXP、JDK(JRE)が1.6.0_06、
LookAndFeelはWindowsLookAndFeelを使用していますが、使用しなくても支障ないです。

186:デフォルトの名無しさん
08/06/08 18:34:01
>>185
ググったら一発なんだけど。
URLリンク(www.alles.or.jp)

187:デフォルトの名無しさん
08/06/09 01:37:13
>>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
って書いてありました。

188:デフォルトの名無しさん
08/06/09 09:31:18
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を使っているのですが、それが原因でしょうか。

何かお気づきのところがありましたら、ご教授のほどお願いいたします。

189:デフォルトの名無しさん
08/06/09 09:33:12
>>188
>>56 が直ってないんじゃないかと。

190:デフォルトの名無しさん
08/06/09 09:33:18
OSとかCPUとかMEMかかないと・・・

191:デフォルトの名無しさん
08/06/09 09:49:51
>>189
>>190

すみません、以下、スペックです。
OS :XP Home Edition SP2
CPU:CORE 2 DUO 6600 2.4GHz
MEM:1GB
JRE:1.6.0_06

>>56のリンク見ると、同じ問題のようですね。
こんな問題があったとは、、、、仕方がありませんので
JRE1.5で動くようにさせます。
レスありがとうございました。

192:デフォルトの名無しさん
08/06/09 09:55:35
newするところで重くなったんじゃなかったけ?
なので、最初にnewして起動処理と思えばある程度納得できる。

193:デフォルトの名無しさん
08/06/09 10:05:47
そのスペックで5秒はおかしいだろ

194:デフォルトの名無しさん
08/06/09 10:33:52
>>192
ありがとうございます。
あらかじめJFileChooserオブジェクトを生成しておけば、素早く
ダイアログが起動するようになりました。
JRE1.5で動かすように修正し始めていたので助かりました。

>>193
本当に数えたら平均5秒だったんです。
6秒以上のときもあります。。

195:デフォルトの名無しさん
08/06/09 10:49:05
>なので、最初にnewして起動処理と思えばある程度納得できる。

たしかにそうでした。
画面を表示することが遅くなりました。やはり、5秒くらいかかります。
簡単なツールを作っているので、この遅さは気になるので
1.5で作ることにします。。無念です。ありがとうございます。

196:デフォルトの名無しさん
08/06/09 11:17:43
これ実行環境の問題なのに?

197:デフォルトの名無しさん
08/06/09 11:38:30
>>196
少しだけ1.6に依存するコードを書いていました。

今、1.5で動くようになりました。
1秒ほどで起動でき、「ファイルを開く」ダイアログも早く
起動できるようになりました。とりあえず、安心しました。。

198:デフォルトの名無しさん
08/06/09 13:51:29
いい加減直ってほしいバグだな…

199:デフォルトの名無しさん
08/06/09 13:53:25
同じパネルに乗っかっているボタンを重ねたときの上下関係って
デフォルトではaddした順ぽいのですが、addし直さなくても上下関係を変える方法はあるでしょうか?

200:デフォルトの名無しさん
08/06/09 14:49:57
setComponentZOrderは?

201:デフォルトの名無しさん
08/06/09 15:52:12
そもそもボタンを重ねるようなユーザインターフェースってどうかと思うが…
setComponentZOrder かレイアウトをOverlayLayoutにするとかかな

202:デフォルトの名無しさん
08/06/09 15:54:06
もしかしてCardLayoutみたいなことしたいんじゃ?

203:デフォルトの名無しさん
08/06/09 18:38:04
>>193
FileChooserが重くなる不具合しらんのか?
u2からでてきたやつだよ

204:デフォルトの名無しさん
08/06/09 20:53:14
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オブジェクトを取得するにはどうしたらいいでしょうか?

205:デフォルトの名無しさん
08/06/09 20:59:29
つ ClassLoader#getResource

206:デフォルトの名無しさん
08/06/09 21:02:18
>>204
URLリンク(java.sun.com)

207:デフォルトの名無しさん
08/06/09 21:10:19
jarファイルの話?それならjarがルートになっているからそうなると思う。
画像はres(リソース)とかimg(イメージ)とかルートの直下にフォルダを作って
img/sample.pngとかでアクセスするのが普通なのかな。

208:デフォルトの名無しさん
08/06/09 21:12:03
そもそもSwingの話なのか?

209:デフォルトの名無しさん
08/06/09 21:23:16
>>205,206
お教えありがとうございます。↓でうまくいきました。
ImageIcon sampleIcon = new ImageIcon( getClass().getResource("sample.png") );
ImageIcon sampleIcon = new ImageIcon( getClass().getResource("./sample.png") );

>>207
jarにまとめてから実行してなくて、クラスファイルから実行しています。

210:デフォルトの名無しさん
08/06/09 21:31:26
画像を
C:/eclipse/workspace/sample/img/sample.png
ここに移動して
ImageIcon sampleIcon = new ImageIcon("img/sample.png");
っていうのも試してみて。押し付けがましいけど、こっちの方がいいと思うから。

211:デフォルトの名無しさん
08/06/09 21:35:38
>>210
>ImageIcon sampleIcon = new ImageIcon("img/sample.png");
>っていうのも試してみて。押し付けがましいけど、こっちの方がいいと思うから。

いえいえ、ありがとうございます。
画像はimgの中にまとめてみます。

212:デフォルトの名無しさん
08/06/09 23:26:48
>>208
ImageIcon自体はSwingだから大目にみなされ
クラスパスの理解が足りないだけだから確かに関係はないけど

213:デフォルトの名無しさん
08/06/09 23:35:16
ここで質問する前に The Java Tutorials で調べてみましょう。
URLリンク(java.sun.com)

214:デフォルトの名無しさん
08/06/12 19:22:12
swingでネットワーク経由の処理要求を常に受けたい場合、
つまり、画面イベントではなく別なイベントループでswingと連動したい場合は、
SwingWorkerのdoInBackgroundでイベントループ(アプリを終了するまでreturnしない)し、
その中でpublish呼び出しし、processで画面更新処理、
という設計にすればよいでしょうか。

215:デフォルトの名無しさん
08/06/12 19:37:17
SwingWorkerのソースコードみてみると、ワーカースレッドは最大10個までみたい
それを恒常的に1個消費するというのはどうだろう・・・
アリといえばアリのような気もするけど、微妙なところ

216:デフォルトの名無しさん
08/06/12 19:59:32
swingで時計表示(1秒後とに更新)のようなアプリってどうやって実装するのが普通なのか?

217:デフォルトの名無しさん
08/06/12 20:00:48
SwingのTimerでいんでね?

218:デフォルトの名無しさん
08/06/12 20:11:04
1つのjavaプロセスで複数のWindowを表示するときって(同じスレッドでnew JFrame()を何回か実行)したとき
全画面のイベント処理スレッドって一個だけになっているけど、
ウィンドウごとに分けること、つまり他の画面更新が頻繁でその影響を食らいたくない場合用に
イベント処理スレッドを画面分起動することなんてできるのだろうか?

219:デフォルトの名無しさん
08/06/12 20:28:58
>>218
無理です ♥
アプリのプロセス毎分離してみては?

220:デフォルトの名無しさん
08/06/12 22:25:03
>>216
時計だけならSwingのTimerでいいが実際のところバックグラウンドで南下したい場合
普通にデーモンスレッドにすればいいだけでしょ

そこからイベントディスパッチスレッドになげるだけ

221:デフォルトの名無しさん
08/06/12 22:42:40
URLリンク(itpro.nikkeibp.co.jp)
↑に、
つまり,別スレッドからJButton#setTextメソッドなどをコールすることはできないということです注1。
他のスレッドからSwingのメソッドをコールするには,SwintUtilities.invokeLaterメソッドを介して行います。

とありますが、イベントディスパッチ以外のスレッドからJButton.setText()を呼んでも問題なく描画できています。

イベントディスパッチ以外のスレッドからのJComponentのアクセスは、paint以外やらないほうが良いのでしょうか?




222:デフォルトの名無しさん
08/06/13 00:27:39
JButton#setText() を呼んで描画できたってこととをもってそのコードが
スレッドセーフであるとは言えないだろ。setText()実行中に別スレッドが
setText()する場合とか考えてみれ。

>イベントディスパッチ以外のスレッドからのJComponentのアクセスは、
>paint以外やらないほうが良いのでしょうか?
「やらないほうがいい」じゃなくて「やってはならない」だ。
それと呼んでいいのはrepaint()ね

223:デフォルトの名無しさん
08/06/13 10:37:24
そういやjavaSEには同期でpaint()呼ぶメソッドないな。MIDPにはあるんだが。

224:デフォルトの名無しさん
08/06/13 11:29:24
>>222
ありがとうございます。
「コールすることはできないということです」ではなく
「スレッドセーフではないので保証されなく、呼んではいけない」ですね。

できないって書いてあったので、new Exception().getStackTrace()からスレッドをチェックしているのかと思って。

225:デフォルトの名無しさん
08/06/13 11:45:12
「できない」という場合、「してはならない」という意味のことが多いな

226:デフォルトの名無しさん
08/06/13 11:54:26
ベースのウィンドウから別の画面を出したり消したりする場合、
以下よりも
 frame = new JFrame();
 ・・・なんかやって用済み
 frame.remove();
 frame.validate();
 frame = null;
 ・・・また必要になる
 frame = new JFrame();
以下の方が良いのでしょうか?
 frame = new JFrame();
 ・・・なんかやって用済み
 frame.dispose();
 ・・・また必要になる
 frameshow();

227:デフォルトの名無しさん
08/06/13 12:03:02
>>226
>  frame = new JFrame();
>  frame = new JFrame();
参照を理解していないようだから、
何の参照か理解すれば、分かるはず。
Swingの問題ではない。

228:デフォルトの名無しさん
08/06/13 12:32:52
>>227
ちょっとまて

> frame = new JFrame();
>以下の方が良いのでしょうか?
> frame = new JFrame();

こうなってるぞ

229:デフォルトの名無しさん
08/06/13 12:54:08
>>226
どのみちdispose()はすべきじゃないの?完全に管理下に置いているなら。
あとは空間と時間のトレードオフと思われ。おまけ:
frame.remove(); // -> frame.removeAll();
frameshow(); // -> frame.show();

230:デフォルトの名無しさん
08/06/13 12:59:51
たぶん画面が必要になるたびにJFrameオブジェクトをつくるか1度だけ作って
不要になったときdisposeだけしてオブジェクトを使いまわすのとどっちがいいのかって
ことを聞きたいんだろうけど…

好きにすれば?

ってか典型的なメモリとCPUのトレードオフじゃね?
そのフレームがどの程度の頻度で表示されるか?とか
想定する実行環境のメインメモリの量は?CPUは?とかいろいろ考えて決めてくれ。
ものすごく頻繁に再表示されるならdispose()しないという選択肢もあるだろうし。

231:デフォルトの名無しさん
08/06/13 14:51:58
>>224
閑話休題

それでスレッドチェックはできるが
「無茶苦茶」重くなる。
次世代か、現世代かで、(別だったか?)
Exceptionのスッタクトレース生成のコストを
計った事があったけど、かなり重量級処理になった。
誰かがブログに載せてたな。

232:デフォルトの名無しさん
08/06/13 15:14:33
スレッドのチェックって Thread.currentThread() か ThreadLocal では?
なぜスタックトレース?

233:デフォルトの名無しさん
08/06/13 17:12:59
>>229
disposeはsetVisible(false)と同じことなのでしょうか。
disposeはネイティブスクリーンリソースの開放とありますが、
java内部ではshow()で復活できるようにメモリは破棄しないで保持しつづけるのでしょうか。

完全にリソースを消したかったので、removeAll()を実行しましたが、
画面は表示されたままですが、イベント関係は死んでいるようです。
正しい手順としては、
frame.setVisible(false);
frame.removeAll();
frame = null;
でよろしいでしょうか。

234:デフォルトの名無しさん
08/06/13 17:39:07
>>233
>disposeはsetVisible(false)と同じことなのでしょうか。

そこが間違い。
dispose()すればウィンドウシステム上のウィンドウ本体(動くGUI)はなくなるけど、
それと同じものを復元できるだけの本質的なデータ(プロパティ)はJVM側に残っている。
だから再びsetVisible(true)できる。
それを残しておくゆとりがないならremoveAll()でもすればいい、ということ。

235:デフォルトの名無しさん
08/06/13 17:48:16
そりゃ違うだろ

236:デフォルトの名無しさん
08/06/13 17:59:52
ゆとりがないならJFrameを含めて破棄しろよw
frame.setVisible(false);
frame.dispose();
frame = null;

237:デフォルトの名無しさん
08/06/13 18:12:27
>>236
frame.removeAll();しなくて大丈夫でしょうか?

frame.setVisible(false);
frame.dispose();
frame.removeAll();
frame = null;

238:デフォルトの名無しさん
08/06/13 18:13:39
removeAll()がどんだけ破棄の効率に影響するかという点は疑問だが、まあ参照切れそうだしいいんじゃね

239:デフォルトの名無しさん
08/06/13 18:15:42
>>237
そこまで行くと>>227かな

240:デフォルトの名無しさん
08/06/13 18:16:56
frameの子コンポーネントがframe内部以外から参照されてないなら frame = null で済むし
frame以外から参照されてたらまずそっちの参照をなくさないと意味ない
参照切るって意味わかってるのかしら…?

241:デフォルトの名無しさん
08/06/13 18:18:21
GCを信用できない心境ってあるでしょ

242:デフォルトの名無しさん
08/06/13 18:59:11
>>240
イベント処理クラスが絶対握ってるから、そこの参照取るように終了系のメソッド呼ぶ必要はないの?
簡単に想像できるけど。ちなみにJFrameのfinalizeにも何もないから…終了系メソッドコールは必要でしょう?

243:デフォルトの名無しさん
08/06/13 19:09:52
>>242
必要ないよ。
そのイベント処理クラスとやらのインスタンスが他から参照されてないなら。

244:デフォルトの名無しさん
08/06/13 19:10:12
JFrameにはfinalizeがなくてもそのスーパークラスのFrameやWindowにはfinalizeあるよ

245:デフォルトの名無しさん
08/06/13 21:43:50
>>244
javadoc見たけどないですよ・・・

246:デフォルトの名無しさん
08/06/14 00:18:14
>>245
1.6でなくなった

247:デフォルトの名無しさん
08/06/14 14:05:21
消えたのか・・・ 1.5見てたよ・・・

248:デフォルトの名無しさん
08/06/16 20:51:27
ウィンドウ幅は変更せずに、ウィンドウ内の部品や描画した線を全体的に拡大する事がさくっさできる方法はあるでしょうか?
イメージとしては、グーグルマップの拡大・縮小です。
また、グーグルのグリップオンでの移動のようなことも簡単でできる方法はあるでしょうか。

249:デフォルトの名無しさん
08/06/16 20:58:37
アファイン変換でもすれば?

250:デフォルトの名無しさん
08/06/16 23:20:18
>>249
あれ?Swingでそれやっちゃだめじゃなかった?

251:デフォルトの名無しさん
08/06/17 09:34:40
コンポーネントの描画を自前で面倒見れるなら別に良いんじゃね?

252:デフォルトの名無しさん
08/06/17 12:20:38
>>251
Swingのすべてのコンポーネントの処理を自前で処理するのかい?

253:デフォルトの名無しさん
08/06/17 12:47:42
いやアファイン変換するところだけよ。
Swingの描画はjava2Dで行われてるんだから自分でJava2D使っても一緒だろ。
鏡文字テキストフィールドとかネタで作ったことあるぞ。

254:デフォルトの名無しさん
08/06/17 13:34:57
>>253

>>248がいってるのは子のコンポーネントについても拡大縮小されるべきってところだろ?
ウインドウ内の部品についてもということだから

それにJava2Dの話なら別にこのスレでするような内容でもないし

255:デフォルトの名無しさん
08/06/17 13:41:43
ならJava2Dはどのスレ?

256:デフォルトの名無しさん
08/06/17 13:44:14
多分ここ
URLリンク(localhost:8083)

257:デフォルトの名無しさん
08/06/17 13:44:52
間違えた、ここ
スレリンク(tech板)

258:デフォルトの名無しさん
08/06/17 13:47:58
>>256
吹いたw

259:デフォルトの名無しさん
08/06/17 13:51:35
基本がわからないのなら初心者スレでいいだろ
ネタのない現世代Javaでもいいだろうし

260:デフォルトの名無しさん
08/06/17 14:08:46
なんか昔、縦書きどうやるんですかって質問で、
ただGraphicsを回転させるだけのネタ回答があったな。
マウスポインタの座標そのままで。

261:デフォルトの名無しさん
08/06/17 16:20:06
>子のコンポーネントについても拡大縮小されるべき
出来ないこともないぞ。描画時にjava2D使ってドローベースでスケーラブルUI実装すれば良いだけだから。
実際そういうGUI作ってる実験プロジェクトが昔あったし。
SwingHacksでも同じことやってたし。

262:デフォルトの名無しさん
08/06/17 16:38:21
できないことはない
といったらなんでもできるというのと同義になっちまうだろ。

そもそもそれはもはやSwingでもないだろ。

極端すぐる。

263:デフォルトの名無しさん
08/06/17 19:32:13
読み込んでドローしたイメージの倍率を変えたいのですが、どのようにすればよろしいでしょうか?
現在下記の通りに処理しております。
ImageIO.read で読込み
new TexturePaint() に読み込んだものを渡す
Graphics2D.setPaint ペイントをセット
Graphics2D.fillRect ドロー

264:デフォルトの名無しさん
08/06/17 19:38:11
それはSwingなのか?

265:デフォルトの名無しさん
08/06/17 21:45:59
だからJava2Dは>>257だって

266:デフォルトの名無しさん
08/06/18 01:17:57
>>248
URLリンク(weblogs.java.net)


267:デフォルトの名無しさん
08/06/19 10:48:59
Windowsの色の選択ダイアログ(グラディエーションのやつ)を実装したいと思うのですが、
あの縦横の色の出し方はどのような計算でしているのでしょうか。
また、ちょっと前のレスでもありましたが、クリックした場所の色を取得することはできるのでしょうか?

268:デフォルトの名無しさん
08/06/19 11:20:46
Color#HSBtoRGB
hue=0~1を横に
saturation=0~1を縦に

269:デフォルトの名無しさん
08/06/19 12:42:47
>>267
Javaのウィンドウでないと駄目じゃん・・・と思ったけど
色キャプチャモードに入ったときに
java.awt.Robotで全画面キャプチャしてそれを全面表示したWindowから選ばせる
とかなら可能かも。

270:デフォルトの名無しさん
08/06/19 12:54:48
>>269
ピッカーじゃなくて色選択ダイアログの話だろ。
JColorChooserみたいなの

271:デフォルトの名無しさん
08/06/19 13:55:23
>>270
てっきり色選択のダイアログについてる
任意の部分の色を、パレットに取ってきたいって話かと・・・

272:デフォルトの名無しさん
08/06/19 19:05:04
クリックした場所の色を取得するのではなく
クリックした場所を元に表示と同じ計算をしてだしたほうがいいよ

Javaに限った話ではないけど

273:デフォルトの名無しさん
08/06/19 20:17:59
ん、どういうこと?

274:デフォルトの名無しさん
08/06/19 20:34:58
描画の時、ここは何色、ここは何色・・・ってやってくっしょ?
それを逆に計算しろってこと。
邪道な手を使うなら、BufferedImageのGraphicsにコンポーネント書かせて、getRGB(int,int)。最悪ね。

275:デフォルトの名無しさん
08/06/19 20:47:31
getRGB(int,int)これは色の取得だと思うけど計算なのか?
最悪って程でもないんじゃないのかな。fpsによるけど。

276:デフォルトの名無しさん
08/06/19 20:55:44
1ピクセルのクリッピング枠にも最大限効率的に対応できるように描画メソッドを書くわけですね、わかります

277:デフォルトの名無しさん
08/06/19 20:59:26
>>276
BufferedImage使っても十分効率的に出来るし、アルゴというか実装次第じゃないの?

278:デフォルトの名無しさん
08/06/19 21:03:41
全く話がかみあってないなw

279:デフォルトの名無しさん
08/06/19 21:07:15
>>275
>>274は「普通は計算してやれ、getRGB()でもできるけど邪道だ」っていってるんだろ…
より低負荷で簡単な方法が目の前にあるなら普通はそっちを選ぶだろ…
BufferedImageに書かせるって時点で本来やる必要がまったくないことを
やってるわけでCPUもメモリも無駄すぎてどうしようもない。最悪。

280:デフォルトの名無しさん
08/06/19 21:16:16
>>279
解説ありがとう。まさにその通り。
質問の内容のレベルから、頭使わずにできる方法も提供したってところです。

281:デフォルトの名無しさん
08/06/19 21:30:42
>>279
その程度か。>>277よく読んでほしかったけど、ま、いいけど。

282:デフォルトの名無しさん
08/06/19 23:43:17
>>281
十分効率的ってのが実用的な速度て動くって意味ならその通りだろう。
問題ない速度で動く。でもそれだけだ。
単純に計算した方が速いし省メモリじゃね?

283:デフォルトの名無しさん
08/06/20 00:02:51
画像から取得だとピクセルフォーマットに左右されるのがやばい

284:デフォルトの名無しさん
08/06/20 00:54:24
>>272から参加してたから、前の方をよんでなかった。
カラーチューザーの話しだったから計算できるのか。
画像とかの色のことだと思ってた。

285:デフォルトの名無しさん
08/06/20 12:22:59
画像のスポイトにしてもオフスクリーンで描画している画像からのルックアップだな

286:使用書無しさん
08/06/23 07:45:23
swingはそんなに遅くないよ。
URLリンク(jdrafter.sakura.ne.jp)
↑これ100%pure java でswinngベースのドローソフトだけどnative版とそん色ない。

287:デフォルトの名無しさん
08/06/23 11:11:45
MouseListenerでマウス右クリックを実装したいのですが、Windows、Linux、Macで実装が違うと本に書いてありました。
具体的にはどういう違いがあるのでしょうか?

288:デフォルトの名無しさん
08/06/23 11:17:05
pressとreleaseのどちらをトリガにするかがプラットフォームによって違うので
それを判定する必要があったと思う。判定用のメソッドが用意されてる。

289:デフォルトの名無しさん
08/06/23 11:41:49
>>288
ありがとうございます。

290:デフォルトの名無しさん
08/06/23 12:05:57
右クリックか・・・
Macのワンボタンマウスのことも忘れないでね

291:デフォルトの名無しさん
08/06/23 12:24:04
右クリックじゃなくて、ポップアップメニュー出すかどうかの判定が欲しいんじゃね?

292:デフォルトの名無しさん
08/06/23 13:08:17
>>286
だれもそんな話してないだろ?

293:デフォルトの名無しさん
08/06/23 14:02:17
宣伝だろ

294:デフォルトの名無しさん
08/06/23 16:06:47
MouseEvent#isPopupTrigger
てのがあるねい


295:デフォルトの名無しさん
08/06/23 17:06:33
しかしそれではアプリケーションキーやSHIFT+F10には対応できない

296:デフォルトの名無しさん
08/06/23 17:10:45
>>290
もう、忘れちゃって、2本指でタップしていただけませんでしょうか。

あと、mighty mouse。

297:287
08/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();
}

298:デフォルトの名無しさん
08/06/23 17:49:52
JComponent#setComponentPopupMenu っていうのもあるよ

299:287
08/06/23 18:29:29
>>290-291,294-296,298
ありがとうございます。

300:使用書無しさん
08/06/23 23:43:23
java廚のみなさん
これ URLリンク(jdrafter.sakura.ne.jp)
にjavaとawtのすべてがつまってるお
くやしかったらこれに匹敵するのつくってね

301:デフォルトの名無しさん
08/06/24 00:19:37
まったく口惜しくないんだが、この感情をどうすればいいのだろうか?

302:デフォルトの名無しさん
08/06/24 00:20:15
このコテハンうぜー

303:デフォルトの名無しさん
08/06/24 00:34:30
>>301
URIで透明あぼーん。

304:デフォルトの名無しさん
08/06/24 00:39:28
URI wwww

305:デフォルトの名無しさん
08/06/24 00:55:39
宣伝うざい

306:デフォルトの名無しさん
08/06/24 01:29:10
しかもSWTスレでもあばれてるな
SWTじゃSwingみたいに作れないでしょうとか

そしてSwingスレでも馬鹿にした言い方はまるでGKに似てるな

307:デフォルトの名無しさん
08/06/24 01:53:08
>>306
せっかくあぼーんしてんだから話題に出すなよ。

308:デフォルトの名無しさん
08/06/24 11:10:25
しかし、宣伝にしても全く買いたくなくなる口調だから、
多分アンチだろ・・・・・

309:デフォルトの名無しさん
08/06/24 13:41:36
ボタンの上に線を描くことはできないでしょうか。
ボタンの親パネルのpaintないでdrawLineしてもボタンの下に隠れてしまうので、
ボタンのpaintComponentないで、super.paintComponentした後drawLineしましたが
ボタンの上に描画できませんでした。

310:デフォルトの名無しさん
08/06/24 13:57:52
>>309
どういうことをしたいのかわからないとなんともいえないけど
とりあえず glass pane でぐぐってみたらどうだろう

311:デフォルトの名無しさん
08/06/24 14:03:35
やりたいことはたぶんglass paneとは違う気がする

312:デフォルトの名無しさん
08/06/24 14:08:39
>>310
ありがとうございます。
やりたいことは、エクセルの描画ツールで線の太さを選択できるダイアログ?がありますが、
あれを作りたいと思っています。
画像を作ってボタンに張ればいいのですが、太さのパターンが増えたとき画像を作るのが面倒なので、
画像なしボタンの上に線を描画できたら簡単かなっと思って質問いたしました。

313:デフォルトの名無しさん
08/06/24 14:15:14
Iconインタフェイスを実装してボタンに貼ればいいと思う

314:デフォルトの名無しさん
08/06/24 14:54:59
>>312
なあ、この時点でむしろ面倒になっていると思わないか?

315:デフォルトの名無しさん
08/06/24 16:03:40
JOptionPane.show***でボタンを表示させない方法ってあります?
showOptionDialogでボタン配列をnullにしたけど「了解」がでちゃう

316:デフォルトの名無しさん
08/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();

317:デフォルトの名無しさん
08/06/24 18:11:33
>>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);

318:デフォルトの名無しさん
08/06/25 14:10:51
エクセルで線を2本描画しCTRLで2つ選択してドラッグすると、2つともドラッグできますが
Swingでやる場合、簡単なグループ化的なドラッグ方法は用意されているでしょうか。
またない場合、良いアプローチ法はありますでしょうか。

319:デフォルトの名無しさん
08/06/25 14:53:39
Excelの表と同じものを作ればおなじようになるよ



なんか最近へんな質問が多い気がする

320:デフォルトの名無しさん
08/06/25 15:05:20
複数ドラッグは簡単だが問題はどうやって視覚的フィードバックを与えるかだな。
java2Dでドラッグ対象のコピーとってグラスペインに描画って感じか。

321:デフォルトの名無しさん
08/06/25 16:02:45
図形オブジェクトを複数選択して移動する話じゃないのか?
図形オブジェクトがコンポーネントになってれば「選択されてるコンポーネント(群)」を
移動するだけだと思うのだが…

322:デフォルトの名無しさん
08/06/25 16:22:34
>>312
その場で描画できる程度の画像を作るのが面倒とは

323:デフォルトの名無しさん
08/06/25 21:04:32
はじめてSwingアプリを作ることになり色々調べてはいるものの
理解が及ばないところがあるため質問させて下さい。

異なるサーバから表示用データを周期的に取得するスレッドが複数あり、
そのデータをSwingUtilitie.invokeLater()で、表示用フレームに反映させようと
しています。

このとき、EDTは要求が同時に付いたときも順に処理してくれるのでしょうか?
それとも要求待ち受け様のsyncronizedメソッド等を自作し、順にinvokeLaterを投げる
ようにすべきなのでしょうか?

324:デフォルトの名無しさん
08/06/25 21:11:24
イベントディスパッチスレッドは単一のキューだから大丈夫だよ
EventQueueに追加してるところでsynchronizedしてる

325:デフォルトの名無しさん
08/06/25 21:22:57
東部夏時間??

326:デフォルトの名無しさん
08/06/25 21:25:18
>>325
このすれでそのボケはありえない。


327:デフォルトの名無しさん
08/06/25 21:31:26
なるほど、「Event Dispatch Thread」か
初めての割りに、よくこんなもの知ってたな

328:デフォルトの名無しさん
08/06/25 21:56:45
AWTにもEDTあるけどな

329:デフォルトの名無しさん
08/06/25 23:19:29
>>324
Swingはスレッドセーフじゃないと漠然とした情報があっただけなので
ここもなのかなぁ・・・と、ちょっと不安でしたorz
ご回答ありがとうございます。

330:デフォルトの名無しさん
08/06/26 00:50:03
ソース読むといいよ
IDE使ってるならCTRL+クリックとかでおっていけるでしょ

331:デフォルトの名無しさん
08/06/26 08:50:51
単なる興味ですが、プロパティの変更通知するオブジェクトは
”changesという名前のPropertyChangeSupport クラスのインスタンスが含まれている”
という変なルールなんでしょうか?
マーカーインターフェースとかのほうが、よっぽどわかりやすいのですが・・・。
この仕様が出来た当時は、こういったスタイルが主流だったのでしょうか

332:デフォルトの名無しさん
08/06/26 10:51:18
>>329
スレッドセーフじゃないからこそ全部1つのスレッドで順番に処理してるんだろーが…

333:デフォルトの名無しさん
08/06/26 18:32:45
>>331
PropertyChangeSupport 使わなくても通知できるからそれじゃ識別できないのでは?
swing コンポーネントとかはそれ継承した SwingPropertyChangeSupport 使ってるし
変数名も changeSupport とかになってるしねぇ…

334:デフォルトの名無しさん
08/06/26 18:59:07
changesってどっかのセミナー資料とかみてるからとか

335:デフォルトの名無しさん
08/06/26 21:17:57
>>333-334
えっ、そうなんですかorz
ここ見ながらやってました。丸山さんって有名な人ですよね・・・。
URLリンク(www.wakhok.ac.jp)

336:デフォルトの名無しさん
08/06/26 21:48:21
>>335
別にそんなに変なことは書いてないだろう?
「beanでプロパティの変更を通知可能にしたければこのようにすればいいよ」って書いてあるだけで
「このように実装されているものだけがプロパティの変更を通知可能なbeanです」とは書いてないし…

337:デフォルトの名無しさん
08/06/30 11:07:43
背景をキャプチャーして
Windowを透明にする方法以外に
Windowを透明にする方法はあるでしょか

またswtなどに透明にできるコンテナはあるのでしょうか

338:デフォルトの名無しさん
08/06/30 11:17:49
JButtonにプログラムからクリックイベントを発生させることってできますか?
マウスがボタン上にない場合は、できればマウスは動かさないで・・・
要は単純にイベントだけがほしいのですが。

339:デフォルトの名無しさん
08/06/30 11:40:34
>>337
jdk6updateN だと com.sun.awt.AWTUtilities#setWindowOpacity(java.awt.Window, float) 使える。

340:デフォルトの名無しさん
08/06/30 11:42:33
ラベルのテキスト文字がラベル幅内に収まらないとき
ラベル幅を超えてすべての文字が出るようにしたいのですが
手段はあるでしょうか?

341:デフォルトの名無しさん
08/06/30 12:39:01
>>338
AbstractButton#doClick

342:デフォルトの名無しさん
08/06/30 12:47:18
>>340
・ラベルのテキストの先頭に "<html>" を付けると複数行に折り返して表示される
・ラベルをJScrollPaneに包むとスクロールバーでスクロールできる
・setToolTipTextを設定するとマウスを乗せたときにポップアップする
・そもそもラベルの幅を広くする

343:デフォルトの名無しさん
08/06/30 13:12:17
>>342
ありがとうございます。
ラベルの幅をかえる場合、現在のフォントと文字列から実際の幅を計算する手段はあるでしょうか。

344:デフォルトの名無しさん
08/06/30 13:24:14
SwingUtilities#computeStringWidth

345:デフォルトの名無しさん
08/06/30 13:24:37
>>343
label.getPreferredSize()

346:デフォルトの名無しさん
08/06/30 13:39:30
レイアウトマネージャの再発明をしそうな予感

347:デフォルトの名無しさん
08/06/30 17:01:59
>>338
複数から呼び出される処理ならば
イベントでがりがりかくのではなくて
外にメソッドで出しといたほうがいいよ

そしてそれを呼び出すようにしたほうが柔軟性が高い

あとでほかの場所からも同じ処理をした上で
追加で行う処理とかでてきたりするものだ

348:デフォルトの名無しさん
08/06/30 17:21:25
drawLineするときにstrokeかなんかでJComponent#setBorder見たいに外枠をつけることってできますか??

349:デフォルトの名無しさん
08/06/30 17:54:48
>>348
こんなの?
((Graphics2D)g).draw(stroke.createStrokedShape(new Line2D.Double(x1, y1, x2, y2)));

350:デフォルトの名無しさん
08/06/30 17:56:55
ダイアログであるボタンを押したときに自動でクローズしたいのですが、
方法として、ダイアログのボタンリスナーアクションで、親のパネルを取得して全コンポーネントに対し
「了解」のボタンだったら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();
}
}
}


351:デフォルトの名無しさん
08/06/30 18:03:53
>>350
単に閉じたいだけで特に了解ボタン押す必要ないんなら、
Window w = SwingUtilities.windowForComponent((Component) e.getSource());
w.dispose();
でどうかな

352:使用書無しさん
08/06/30 18:17:16
>>350 何でそんなまどろっこしい方法するの?
 public void actionPerfomed(ActionEvent e){
        if (e.getSource()==buttonA){
               dialogA.dispose();
         }
 }
みたいなのじゃだめなの?



353:デフォルトの名無しさん
08/06/30 18:28:00
いつまで糞コテなの?

354:デフォルトの名無しさん
08/06/30 18:47:26
糞コテ馬鹿丸出し

355:デフォルトの名無しさん
08/06/30 18:53:52
>>351
できました。
ありがとうございます。

356:デフォルトの名無しさん
08/06/30 19:10:36
>>343
Font font = Component.getFont();
FontMetrics fm = JComponent.getFontMetrics(font);
int stringwidth = fm.stringWidth("なにがし");

こんなのもあった。

357:デフォルトの名無しさん
08/06/30 22:01:06
ダイアログでない別の画面を開いてから、それを閉じる間
元の画面の操作を無効にしたいのですが、どうすればよいでしょうか。
visible(false)だとなくなってしまいました。

358:デフォルトの名無しさん
08/06/30 22:07:36
それがフレームなら、glasspaneにMouseListener登録するのが楽でいいかもねー

359:デフォルトの名無しさん
08/06/30 22:30:26
俺はダイアログのコンポーネントをglasspaneに描画してglasspaneでイベント握り潰してるけど

360:デフォルトの名無しさん
08/07/01 11:13:04
ダイアログにJFrameの画面を描画するというような、そんなことってできるのでしょうか?
それができればまったく問題無しなんですけど。

361:デフォルトの名無しさん
08/07/01 11:34:52
JDialogではいかんのか?

362:デフォルトの名無しさん
08/07/01 12:24:09
JFrameの中身のコンポーネントを描画することはできなくもない

363:デフォルトの名無しさん
08/07/01 13:59:58
>>360
それ必要なこと?

364:デフォルトの名無しさん
08/07/01 14:27:09
階層ありポップアップある数階層のJMenuにアイテムを1つ追加して
ポップアップに対しvalidateを呼んだあとshowしましたが、
追加が反映されませんでした。最初から作り直さないとダメなんですかね?

365:デフォルトの名無しさん
08/07/01 14:41:46
>>363
ある共通要の設定画面があり、
時と場合で、出しっぱなしの他画面操作OKだったり
出したらその画面を終了するまで、他の画面はノータッチ、との要求が上がっています。
要求に対しての馬鹿さについてはすんません。
ただJFrame継承の画面があり、こいつで何とか実現しないといけなくなったのが現状で・・・

366:デフォルトの名無しさん
08/07/01 15:40:23
setEnabled(false) してしまえ

367:デフォルトの名無しさん
08/07/01 17:42:05
>>365
俺が言いたいのはJPanelで共通化されてればいいだけでしょ?ってこと
そしてJDialogやJFrameですきなようにはりつければいい

368:デフォルトの名無しさん
08/07/01 18:50:42
コンポーネントをglasspaneやWindowサブクラスに貼れることを理解してないんじゃない?

369:デフォルトの名無しさん
08/07/04 00:00:31
クリップボードについてお聞きしたいのですが
コピーしたときのイベントではなく
選択されたときのイベントを得ることは可能でしょうが
(たとえばブラウザでテキストを選択するときのイベント)

370:デフォルトの名無しさん
08/07/04 00:05:12
クリップボードと関係ないだろ
CaretEventでもみてみるといい

371:デフォルトの名無しさん
08/07/05 07:57:54
Swingを使う人は
java使いで一番やさしいね

372:デフォルトの名無しさん
08/07/05 18:12:32
swingのバリデーターって皆さんどうやってますか?
自分の場合は、画面に対応したBean(StrutsのActionFormみたいなの)を作ってOKボタン等を押した時に
画面からBeanに変換するときにエラーになったら画面にエラー内容をリスト表示するようにしてるんですけど
ちょっと非効率な気がしています。
何かかっこいいライブラリか何かでかっこよく解決できないですかね。

373:デフォルトの名無しさん
08/07/05 22:48:16
まずかっこいいの定義からだな

374:デフォルトの名無しさん
08/07/05 23:20:38
jgoodies

375:デフォルトの名無しさん
08/07/09 22:45:40
イベントを強引に呼ぶ方法ってありますか?
SwingはMVCを採用していますが、既存のアプリケーションに接続する時、
GUIモデルのインターフェイスにアダプトさせるのはめんどくさいので、
リスナでデータの同期を行いたいのですが、
コンポーネントを初期化して、その次にリスナを登録しますが、
この次に強引にイベントを発生して同期を行いたいです。

376:デフォルトの名無しさん
08/07/09 23:42:39
fireXXXEvent()

377:デフォルトの名無しさん
08/07/09 23:59:59
それってコンポーネントのメソッドですよね。
モデルから飛ばす事は出来ないんですか?
Swingのオブザーバパターンはモデルとリスナの間で採用されているはずです。
モデルから飛ばせないならば、ビューがプログラミングに必要以上に絡んでくる事になります。

378:デフォルトの名無しさん
08/07/10 00:15:07
ごめん日本語が難しすぎて良くわかんないんだけど、モデルの持ってる値をviewに反映させたいってこと?
だったらBeansBindingあたりを調べれば幸せかもしれない。的外れだったらスマソ。

379:デフォルトの名無しさん
08/07/10 00:20:40
モデルをBean化してpropertyChangeイベントに対応させる。
ビューはpropertyChangeListenerにする。


380:デフォルトの名無しさん
08/07/10 04:23:21
Java Swing の質問

普段はタスクトレイに常駐してタスクトレイのアイコンをクリックしたら
起動(画面を表示する)というのはできるのですが、これをショートカットキー
(例えば Alt-zなど)で起動する方法があったら教えてください

381:デフォルトの名無しさん
08/07/10 10:44:20
それSwingじゃなくてAWTだけどAWTもここか。
java6以降じゃないと出来んよ。
詳しくはjavadoc嫁。ググレ。

382:デフォルトの名無しさん
08/07/10 18:14:41
>>381
ホットキーの登録っててできるようになったんだ?

383:デフォルトの名無しさん
08/07/10 21:11:03
>>381
神降臨

384:デフォルトの名無しさん
08/07/11 00:25:04
>>381


385:デフォルトの名無しさん
08/07/11 09:12:13
ホットキー対応したんだ 帰ったら試してみよっと

386:デフォルトの名無しさん
08/07/11 23:18:06
嘘つき!!

387:デフォルトの名無しさん
08/07/11 23:46:29
キツツキ!!

388:デフォルトの名無しさん
08/07/12 01:36:47
お手つき!!

389:デフォルトの名無しさん
08/07/12 01:39:48
>>381
馬鹿乙

390:デフォルトの名無しさん
08/07/12 08:10:42
餅つき!!

391:デフォルトの名無しさん
08/07/12 18:23:33
hotkeynasai

392:デフォルトの名無しさん
08/07/15 15:59:56
Windowsでメモ帳とかがデフォルトのフォントで使っているFixedSysを使いたいんだけど
どうすればいいでしょうか?

393:デフォルトの名無しさん
08/07/15 16:39:41
フォント一覧取得してそれにでてこないの?

394:デフォルトの名無しさん
08/07/15 16:45:46
でないっす。

395:デフォルトの名無しさん
08/07/15 16:46:51
動的によみこんじゃえ

396:デフォルトの名無しさん
08/07/15 16:57:51
TrueTypeしか読めないんじゃね?

397:デフォルトの名無しさん
08/07/15 17:17:41
Fontsフォルダにあるのしかつかえんよ

398:デフォルトの名無しさん
08/07/15 21:30:54
java6から自分で用意したフォント登録できるようにならなかったっけ?

399:デフォルトの名無しさん
08/07/15 23:02:04
外注がC#で作ってきた糞重い、グリッドビュー(700×30)をswingのJTable
で書き換えたらかなり速くなって思わずニヤニヤしてしまった。
まぁ、今更Javaでいくことにはならないんだけどね。

400:デフォルトの名無しさん
08/07/15 23:47:56
.netは10年前のjavaだ。

401:デフォルトの名無しさん
08/07/16 00:22:57
>Windowsでメモ帳とかがデフォルトのフォントで使っているFixedSysを使いたいんだけど
>どうすればいいでしょうか

Swing ではなく、SWT使用すればオペレーションシステムの
ネイティブのリソースを使用するのでフォント一覧取得以外のフォントも
できるよ。
しかも、ルックもよい!

402:デフォルトの名無しさん
08/07/16 00:43:19
SWTの開発環境のおすすめは?
VE?

403:デフォルトの名無しさん
08/07/16 06:28:33
SwingでEclipseのビューのようなペインやタブの位置をドラッグ&ドロップで自由に移動できるようなものは作れないでしょうか?

404:デフォルトの名無しさん
08/07/16 06:41:11
>>403
標準では無いね。オプソとか有償のライブラリを使えばできる。

URLリンク(journal.mycom.co.jp)
URLリンク(www.swingall.com)

405:デフォルトの名無しさん
08/07/16 13:14:10
というかドロッガブルなコンポーネントって結構簡単に作れるぞ。

406:デフォルトの名無しさん
08/07/16 13:21:08
難しいのは受け手だな

407:デフォルトの名無しさん
08/07/17 00:23:45
java.awt.Dialogやjava.awt.Frameのx(閉じる)ボタンを表示しないことって、
できますか?

408:デフォルトの名無しさん
08/07/17 00:29:30
無反応には出来るけど非表示は駄目だったと思う。
Windowだとのっぺらぼーだしな……


409:デフォルトの名無しさん
08/07/17 00:34:35
>無反応には出来るけど非表示は駄目だったと思う。
Windowだとのっぺらぼーだしな……
x(閉じる)ボタンの非表示にしてるサンプル、どこかで見た記憶があるんだけど。
どこだったか。

410:デフォルトの名無しさん
08/07/17 00:38:09
Windowサブクラス作ってmacのシート再現するとか


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch