Java低速GUI Swing 5at TECH
Java低速GUI Swing 5 - 暇つぶし2ch2:デフォルトの名無しさん
06/10/18 11:51:02
参考スレッド
クライアントサイドJavaどうよ?
URLリンク(pc3.2ch.net)
クライアントサイドJavaどうよ?:part2
URLリンク(pc2.2ch.net)
クライアントサイドJavaどうよ? part3
URLリンク(pc2.2ch.net)

Java 高速GUI SWT
URLリンク(pc5.2ch.net)
Java 高速GUI SWT 2
スレリンク(tech板)

FrontPage - java
URLリンク(www.wikiroom.com)

3:デフォルトの名無しさん
06/10/18 11:51:38
[ja]
WisdomSoft - JAVA入門
URLリンク(wisdom.sakura.ne.jp)
developerWorks - マルチスレッド化Javaアプリケーションの作成
URLリンク(www-6.ibm.com)
[en]
Creating a GUI with JFC/Swing
URLリンク(java.sun.com)
Threads and Swing
URLリンク(www.math.cuhk.edu.hk)
The Last Word in Swing Threads
URLリンク(java.sun.com)
Painting in AWT and Swing
URLリンク(java.sun.com)

4:デフォルトの名無しさん
06/10/18 11:52:38
書籍
赤坂玲音著「Javaアプリケーション作成講座 - Swingプログラミング徹底攻略」
URLリンク(www.amazon.co.jp)

大村忠文著「Java GUIプログラミング」Vol.1~3
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)

サンソフトプレス「グラフィックJava2」AWT編、Swing編(上)(下)
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)

Java実践プログラムによるデザインパターン入門講座
- Swingプログラムで体得する23のパターン
URLリンク(www.amazon.co.jp)

5:デフォルトの名無しさん
06/10/18 11:53:18
Creating a GUI with JFC/Swing
URLリンク(java.sun.com)

為政敦男氏が1998~1999年にSwingExamplesを書き、
オリジナルサイト消滅後もミラーされ続けている。
5年以上前にSwingの素晴らしい使い方を示してくれた為政さんに感謝します。
URLリンク(www.senun.com)
URLリンク(www.physci.org)

6:デフォルトの名無しさん
06/10/18 11:53:53
SynthLaF
ユーザーを虜にするものは機能だけではありません。
見た目のCoolさでアピールしてはいかがでしょうか。
(雄の孔雀が美しい尾羽を持つように:-))
[ja]
IBM 進歩したSynth 最新のSwingルック・アンド・フィールを使うとカスタムUIが手軽に
URLリンク(www-6.ibm.com)
[en]
Sun The Synth Look and Feel
URLリンク(www.javadesktop.org)

7:デフォルトの名無しさん
06/10/18 12:14:56
VisualStudioのようなポトペタ開発環境がほしい!!
NetBeans
URLリンク(www.netbeans.org)
Eclipse+VisualEditorPlugin
URLリンク(www.eclipse.org)
URLリンク(www.eclipse.org)

8:デフォルトの名無しさん
06/10/18 15:36:12
>>6
Synthって情報少ないよなぁ・・・

9:デフォルトの名無しさん
06/10/19 18:49:02
JPanelを任意の個数だけ、for文使って作ることって、できるんでしょうか?

10:デフォルトの名無しさん
06/10/19 18:59:41
出来ないと思った理由が聞きたい

11:デフォルトの名無しさん
06/10/19 20:08:29
9です。

たとえば、JPanelを10個まとめて作りたいとき

for (int i = 1; i <= 10; i++){
String s[i] = ("jPanel_"+i);
JPanel s[i] = null;
}

↑みたいに、for文使って一気にJPanelを作りたいですけど、↑じゃうまくいかないので
他に方法があれば教えていただければと…

12:デフォルトの名無しさん
06/10/19 20:21:33
言語仕様から学び直せ。
sは2回宣言されています。

13:デフォルトの名無しさん
06/10/19 20:35:27
>>12
s[i] ってのは変数名には使えないし、
配列なんだとすれば宣言と同時に配列アクセスしてるし……

>>11
JPanel[] panels = new JPanel[10];
for(int i = 0; i < panels.length; i++) panels[i] = new JPanel();

14:デフォルトの名無しさん
06/10/20 13:55:09
この質問、初心者質問スレで読んだ気がするな。

15:デフォルトの名無しさん
06/10/20 16:20:46
マウス側面の拡張ボタンをJavaで使う方法おしえて。

16:デフォルトの名無しさん
06/10/20 16:34:36
マウスイベントって3つまでしかサポートしてなかったような
5.0からはマウスのボタンの数は取得できるがそれを使ってどうのこうのはできないはず

17:デフォルトの名無しさん
06/10/20 17:43:40
返答どうもです。

やっぱ無理か…。
5ボタンマウスって、あんまり使われてないのかなあ。

18:デフォルトの名無しさん
06/10/20 17:50:42
ほとんどのアプリは3ボタンだし、ただのショートカットがほとんど

ショートカット以外の使われ方してるアプリってどれだけある?


19:デフォルトの名無しさん
06/10/20 18:02:27
ボタン5個も何に使うの?

20:デフォルトの名無しさん
06/10/20 19:06:46
ブラウザやファイラで「進む」・「戻る」に便利に使ってるよ。
でも5ボタン必須のアプリなんて、ちょっと思い当たらない。

ホイールでスクロールみたいに、あれば便利って程度かな。

21:デフォルトの名無しさん
06/10/20 19:28:11
ホイールは定着したけど、5ボタンは流行らなかったね。

22:デフォルトの名無しさん
06/10/20 19:37:48
まわりの奴におしえても、使わないんだよね。ホイールは使うようになったけど。

23:デフォルトの名無しさん
06/10/20 19:44:55
3ボタンでも真中は特別使い道がない。

24:デフォルトの名無しさん
06/10/20 20:59:58
進む戻るだけは俺も使ってるけどあれはショートカット効果だけだからなぁ
4以上のボタンを使ってるわけではないだろう

25:デフォルトの名無しさん
06/10/20 22:03:08
>>23
ネトゲではよく使うお

26:デフォルトの名無しさん
06/10/20 22:38:17
>>23
自動スクロールに対応してればちょくちょく使うよ。
あとFirefoxだとタブを簡単に閉じられるしね。

27:デフォルトの名無しさん
06/10/20 22:56:14
Firefoxだと通常のクリックが真ん中ボタンといえるくらいだ
考えて左クリックを使う

28:デフォルトの名無しさん
06/10/20 22:57:34
そういやそうだね
いつも新しいタブで開いてるや

29:デフォルトの名無しさん
06/10/20 23:09:59
>>25
5ボタンも、そんなところでしょ。

30:デフォルトの名無しさん
06/10/20 23:33:46
7ボタンとチルトホイールはどうだろう?

31:デフォルトの名無しさん
06/10/21 00:12:53
ところで、ゲームパッドに標準で対応してほしい。あとタブレット

32:デフォルトの名無しさん
06/10/21 00:16:50
ゲームパッドってどんなOSにも標準で対応してたっけ?
積集合OSであるJavaにはそういう限界があるよ。
タスクトレイやブラウザとかがJava6に出てきただけでも感慨深い。

33:デフォルトの名無しさん
06/10/21 00:42:22
対応していないメジャーOSはないはずだし
一部だけで動く実装でも1.4以降は投入されてるから理由にならん


34:デフォルトの名無しさん
06/10/21 00:44:21
MSXのようにパッド0番目はキーボードとかいう実装にしておけば
キーボードとパッド両対応作る手間がないし未対応OSであっても問題ないんじゃね?


35:デフォルトの名無しさん
06/10/21 05:42:06
あ、1chip MSXの入金忘れてた

36:デフォルトの名無しさん
06/10/21 23:38:55
ちょ、全然スレ違いw

5ボタンなんてケチくさいこと言わず、101個ボタンつけたらどうよ?
で、ボタン押すと文字が入力されるようにしておくの。
そしたらキーボード要らないじゃん。

37:デフォルトの名無しさん
06/10/21 23:46:22
>>36
それ、キーボードじゃん!!!

あー、食いついちゃった。orz

38:デフォルトの名無しさん
06/10/22 12:46:45
Choiceで選択してButtonで実行てどうやるんですか?

39:デフォルトの名無しさん
06/10/22 14:03:03
ChoiceとButtonを用意してButtonのActionListenerに処理を実装すればいい。

40:デフォルトの名無しさん
06/10/22 14:25:35
Choiceってのはなんだ?

41:デフォルトの名無しさん
06/10/22 14:43:33
public void itemStateChanged(ItemEvent f) {
String a = (String)f.getItem();
if( a.equals("A") ){
}
else if( a.equals("B") ) {
}

}
public void actionPerformed(ActionEvent e) {
if( e.getSource() == b1 ) {

}
}

処理の部分でどれをチョイスしたか分かるようにしたいんですが

42:デフォルトの名無しさん
06/10/22 16:02:55
>>41
ButtonGroupを利用しなされ
ButtonGroupに、JRadioButtonをaddしておき、
actionが起こったときに、ButtonGroupからgetSelection()で選択されたものを取ればOK

43:デフォルトの名無しさん
06/10/25 06:13:08
AWTは1コンポーネント=1ウインドウだからシステムリソースを食いまる問題って解決されたの?

44:デフォルトの名無しさん
06/10/25 07:04:53
誰も使ってないのに何が問題なの?











45:デフォルトの名無しさん
06/10/25 12:41:50
AWTはスレ違い

46:デフォルトの名無しさん
06/10/26 05:13:03
>>43
AWTコンポーネント自体使うことが推奨されてないから解決されることはない。

47:デフォルトの名無しさん
06/10/26 08:24:56
SWYスレっていつの間にかなくなってたんだね

48:デフォルトの名無しさん
06/10/26 12:39:25
>>46 誰が推奨してないの?

49:デフォルトの名無しさん
06/10/26 18:39:53
おれおれ

50:デフォルトの名無しさん
06/10/27 01:50:11
ゴスリンから大切なお知らせとお願いです。
古い年式のウィジェットを探しています。
ネイティブにピアを生成するタイプで、ご覧のバージョンの JDK の引き取りや、アップデートを行っています。
対象 JDK は万一の場合、訴訟事故に至るおそれがありますので、直ちに使用を中止していただき、
至急、ご連絡をお願い申し上げます。

      ____  . .| |
    /\二___\.. | |
    |\/∥   '''.|  | |    DUKE
    | |  ∥┌┐ .|  | |     ↓
    | |  ∥└┘ .|┌|=.|ヽ_ ゝノ゛
    | |  ∥    .|二| |回_  ●>
    | |  ∥    .|└|=.|/    〆
    |ミ.|  ∥    .|  | |
 |\ノ.|ミ.|  ∥    .|  | |
 |_》 | |  ∥    .|  | |
    \|_∥____.|  | |

51:デフォルトの名無しさん
06/10/30 08:14:49
旧い入門書だとSwingすらサンプルがねぇw

で、SWTスレどしたのよ。

52:デフォルトの名無しさん
06/10/30 19:57:31
こっちの方が良かったかな…。

Java SE 6ではActionにSELECTED_KEY、DISPLAYED_MNEMONIC_INDEX_KEY等が追加されたんだね。
今まで何でないのか不思議だった。AbstractButtonにもHideActionTextプロパティが追加されてる。

53:デフォルトの名無しさん
06/11/04 00:43:50
質問なのですが
URLリンク(www.gremlin.jp)

↑のアプレットみたいに、ウィンドウサイズを変えたら、そのウィンドウと同じサイズにJTable
をリサイズするにはどうしたらいいのでしょうか?
ComponentListenerを使うのでしょうか?

54:デフォルトの名無しさん
06/11/04 01:04:21
>>53
よくわかんないけど、普通に貼り付ければこうなるんじゃないんだっけ?
BorderLayoutでCenterに配置するとか。

55:53
06/11/04 01:41:03
普通に貼り付けただけだど、JTableがリサイズされないで、JFrameの大きさだけが
変わってしまいます…

ウィンドウサイズと同じサイズにリサイズさせたいのですが、そのやり方わからなくて…

56:デフォルトの名無しさん
06/11/04 01:45:56
>>55
レイアウトマネージャをどう使っているか次第。
NullLayoutなどだと、座標で配置されているから、ロジック書かないとリサイズはされない。

>>54が書いているように、BorderLayoutでCenterに配置するのが普通。


57:53
06/11/04 10:32:33
>>54,56さん

ありがとうございまいた。私の知識不足でした。レイアウトマネージャをBorderLayoutにして
CENTERに配置すればできました。

できなかった理由としてFlowLayoutとGridLayoutを使っていたためだと思われます。
レイアウトマネージャについて勉強してきます。

ありがとうございました。

58:デフォルトの名無しさん
06/11/04 11:49:30
NetBeans使うというのも手

59:デフォルトの名無しさん
06/11/04 12:58:25
ネット上のxxxx.jpgなどの画像ファイルをGUIに表示させることって出来ますか?

60:デフォルトの名無しさん
06/11/04 13:02:45
URLクラスからopenStreamすればいいよ

61:デフォルトの名無しさん
06/11/04 13:05:08
とおもったが別にImageIO.readはURLをそのまま受け取れたなw

62:デフォルトの名無しさん
06/11/04 14:44:06
表示させるだけでいいなら、JLabelでHTML書けばOK。

63:デフォルトの名無しさん
06/11/04 14:49:38
JavaのHTMLってどこまで準拠してんの?

64:デフォルトの名無しさん
06/11/04 15:11:41
あんまり知らないけど、信用してはいけないことは知ってる。
実装がかなり前に止まっているとか。

65:デフォルトの名無しさん
06/11/04 16:26:11
Swingアプリで、「HTMLのテーブルみたく表示したいんだけど。」
と聞かれて、面倒くさいから、「setTextでHTMLをセットするとOK」と答えた。

で、setTextするための、HTMLを文字列でセッセと作っていたのが、そのうち
Velocityで雛形作って、セットするようになっていた。

ほとんど、Webアプリ

そのうち、IEだと、こう表示されるのが、うまくいかないとか言われそう。

66:デフォルトの名無しさん
06/11/04 16:38:25
JEditorPane#setText()したものを、HTML表示にすることってできます?
バージョン情報を表示するに、書式をいろいろ変更して使いたかったんですけど、
なんかHTMLがそのまま表示されます。
ファイルにしてsetPage()使わないとダメなのかな。。
仕方ないので、今はJTextPaneを使って、ちまちま書式設定して出してます。

67:デフォルトの名無しさん
06/11/04 17:00:17
>>43
URLリンク(java.sun.com)

68:デフォルトの名無しさん
06/11/04 17:05:30
>>66
自己レス。JEditorPane#setContentType("text/html")を使えばいいのね。

69:デフォルトの名無しさん
06/11/04 22:17:17
質問です。
JTableの1行目のcolumnを1列目に縦に表示するには、どうすればよいのでしょうか?

70:デフォルトの名無しさん
06/11/04 22:59:45
>>69
意味不明。

71:69
06/11/04 23:09:15
>>70
すいません。
エクセルみたいに行番号(1,2,3..)列名(A,B,C...)のような表示をつくりたいのですが…

72:デフォルトの名無しさん
06/11/04 23:10:18
>>69>>71の内容につながりが見当たらない件。

73:デフォルトの名無しさん
06/11/04 23:18:16
列ヘッダ(A,B,C...)は、普通にJTableにある機能でできる。
分からなければ、JTable自体を基礎から勉強すべし
URLリンク(java.sun.com)

行ヘッダ(1,2,3...)は、JTableにはそんな機能ないから、それっぽく見せる実装をしなければならない。
>>5にある、為政氏のサンプルにある。
URLリンク(www.crionics.com)


74:69
06/11/04 23:30:21
>>73

JTableにはもともとないんですね…
サンプル大変参考になりました。

ありがとうございました。

75:デフォルトの名無しさん
06/11/05 22:21:18
なんか質問な~い?ただいまSwing勉強中。

76:デフォルトの名無しさん
06/11/06 00:33:11
>>75
システムフックの方法が知りたいけどSwingの話題じゃないので黙っておく

77:デフォルトの名無しさん
06/11/06 00:44:13
質問
フォーカストラバーサルサイクルルートについて詳しく

78:デフォルトの名無しさん
06/11/06 09:04:51
>>77
初耳だ。ちらっと見た感じだと、
TABを押した時なんかの、
次にフォーカスを与えるコンポーネントを探すクラスかな?
今まで使う場面が出たことがないけど、
FocusTraversalPolicyを継承してクラスを作れば、
コンポーネントの値とかでも順序を付けられたりするみたい。
質問が具体的なら、もう少し調べてもいいが。

79:デフォルトの名無しさん
06/11/06 13:27:23
JTableの中のセルにJPanelいれたときとかこれいじらんとだめだよな

80:デフォルトの名無しさん
06/11/06 19:38:24
>>78
具体的じゃないけど便乗で
5.0 -> 6.0 でフォーカス関係で変わった事ってまとめてるとこないかな?
5じゃ動いてたコードが6で動かなくなっちゃったから・・・

81:デフォルトの名無しさん
06/11/06 19:54:29
>>79
なるほど。

>>80
ごめんなさい、わかりません。
思ったとおりにリスナーが呼ばれないとか、そんな感じですか?

82:デフォルトの名無しさん
06/11/06 22:00:45
>>80
まじか
そのへんまではまだ詳しく調べてないけど困るな
正式版が出たらチェックしようという状態だったがSwingに大幅に手が入ってるのなら別だ
Sunなにやってるんだよ~
1秒でわかるSwingのバグつきを夏にリリースしてたし

まぁ5.0でJavaSoundの挙動が大幅に変更されたりとか
日本語印刷が通らないあたりでおかしい気はしたが

83:デフォルトの名無しさん
06/11/06 22:14:34
>>82
今日たまたまJavaで印刷のサンプル動かしたら、
DocFlavor.INPUT_STREAM.AUTOSENSE を使わないと、テキストが印刷できなかった。
しかも日本語文字化けしてるし。これは当たり前?5.0から?
TEXT_PLAIN_HOSTとかいろいろ試したけど、こっちはエラーが出た。
あと、印刷が終わっても、紙が排出されないんだけど、最後に何かする必要あります?
今は、DocPrintJob#print(○,○); で終わってます。

なんか印刷大変そうだなぁ。。。

84:デフォルトの名無しさん
06/11/06 22:37:08
>>83
それはどのVMで動かした話?

85:デフォルトの名無しさん
06/11/06 22:50:17
>>84
5.0での出来事でした。下の記事を参考にしました。
URLリンク(java.sun.com)

86:デフォルトの名無しさん
06/11/06 23:20:31
質問です。
JLabel→JLabelのようにJLabelからJLabelへ矢印を表示するには
どうすればよいのでしょうか?

87:デフォルトの名無しさん
06/11/06 23:26:22
>>86
質問の意味がわかりませんが。。。
とりあえず「→」を書きたいなら、
真ん中に「→」を書いたJLabelを置いてみれば?矢印の画像でもいいけど。
もし矢印が長かったり、角度が中途半端なのであれば、drawLineで自分で書く。

88:デフォルトの名無しさん
06/11/06 23:41:13
>>85
updateナンボかが問題

89:86
06/11/06 23:44:14
>>87さん
配置してあるJLabelどうしを矢印で結んだ図を表示させたかったのですが
そういった場合は自分で書くしかないんでしょうか?
JLabelの位置を計算して、矢印を表示することはできないんでしょうか?
よろしくおねがいします。

90:デフォルトの名無しさん
06/11/07 00:13:12
>>83
印刷APIはサービスが追加されたけど、今までのも動くよ
ただし、日本語問題が解決されたのは今年の春くらいのバージョンから
1.5年ほど日本語バグは放置されていた

そしてそのバグが直ったと思ったらSwingにバグがついたというわけだ
正確にはWindows版のLAFだけだからすべてではないがWindowsって一番ユーザー多いから影響もでかい、と
NetBeans立ち上げればおかしいのはすぐにわかるはずなのにそれに気がつかなかったSunちね

91:デフォルトの名無しさん
06/11/07 01:12:43
>>89
なんだかんだとコンポーネントが追加されてるJPanel上の特定のJLabel間に線引きたいって事?

それならJLabelをaddするときに線を引きたいJLabelだけのコレクションを別に持っておいて自分で矢印を描画しないとだめだね。
常に次ぎが右横とか規則があるならJLabel継承した横に矢印付け足す描画をするJLabelWithArrowとかでもいいのだろうけど。


92:デフォルトの名無しさん
06/11/07 02:24:57
>>89
噂では、JLabelなんか使わないで、全部自分で描いた方がラクだって話もあるよ。

93:デフォルトの名無しさん
06/11/07 04:40:58
SWT だとなんかそういう軽量コンポーネントがある。

94:デフォルトの名無しさん
06/11/07 07:48:31
>>86
グラフ書きたいなら、JGraphとかSWTのdraw2dとか使った方が楽だよ。
URLリンク(www.jgraph.com)
URLリンク(www13.plala.or.jp)
グラフって言っても、XYグラフのグラフじゃなくてグラフ理論のグラフだからね。

95:デフォルトの名無しさん
06/11/07 09:35:29
>>94
JGraphなんてものがあるのか。知らなかった。
LGPLの他に商用ライセンスがあえてあるってことは、商用で使う場合はお金かかる?
無知なので質問ですが、SwingとSWTって混ぜて使ったりするの?
水と油だと思っているのですが。。。

96:デフォルトの名無しさん
06/11/07 12:30:07
>>95
JGraphは商用利用も含めてフリー。LGPLだし。
一方JGraph Layout Pro というのがあって、JGraphの高機能版。こっちは有料。
JGraphだとノードの自動レイアウトが出来なかったりと、いろいろ不便。
他にもこういうのもあるけどね。
URLリンク(openjgraph.sourceforge.net)
こっちならレイアウトできたり、グラフに制約(巡回不可とか)かけられたりできる。
ただ、開発が4年以上止まっているけど。

97:デフォルトの名無しさん
06/11/07 12:35:17
自前で描画しとけ


98:86
06/11/07 15:37:54
>>91さん
規則性はないので、その際は手作業なんですね…
ありがとうございました。

>>92さん
それは
URLリンク(homepage1.nifty.com)
このページにあるQ8.6にも、書いてある通り描く方がいいてことでしょうか?

>>93さん
SWTではあるのですか…

>>94さん
JGraphというのがあるのですね!これについて調べてみようと思います。
表示したいのはちょうど、グラフ理論を使ったものなのでぴったりだと思います。

皆さんありがとうございました。
Java2DかJava3Dで描画しなきゃいけないかもって思ってました。それ以外の方法もあるのですね。

99:96
06/11/07 16:09:10
JGraph使うのなら、標準の機能ではレイアウトできないことを覚悟しておかないと
後でハマるよ。
ここでいうレイアウト機能ってのは、適当にノード並べてエッジ引いた後で、
ボタン1クリックでノードやエッジの位置を設定し直してくれる機能。
俺の場合、SWTのdraw2dで提供されてるレイアウト機能だけ使って
強引に何とかしたけど。

100:デフォルトの名無しさん
06/11/07 16:52:14
グラフ/ネットワーク構造の描画コンポーネントが欲しいんならJGraph以外にもいくつかある
URLリンク(jung.sourceforge.net)
URLリンク(www.nanoworks.nl)
デモとかサンプル見て好きなの使ってくれ.

101:96
06/11/07 17:12:49
>>100
いつの間にか、JUNGが使えるライブラリになってるね。
2年前にこの手のライブラリについて調べてたんだけど、
当時のJUNGはグラフの編集機能がなくて、使うのをあきらめた覚えがある。

102:デフォルトの名無しさん
06/11/07 17:29:39
>>101
4年前に全部自前でやった事がある。
あの頃と比べたらオープンソースなライブラリがよりどり緑でありがたい。


103:86
06/11/07 18:31:17
>>99さん
ご忠告ありがとうございます。

104:デフォルトの名無しさん
06/11/07 23:24:14
>>98
別にSwingでもNetbeansには普通にそういうモデリング描画用
ライブラリはあるわけだが。Graph Libraryというのがね。

105:デフォルトの名無しさん
06/11/08 00:36:43
Graph Libraryは、NetBeansのほかのライブラリに依存してるから、NetBeansの外で使うのはきついよ。
NetBeansプラットフォームで作っちゃえばいいんだけど。

106:デフォルトの名無しさん
06/11/08 00:37:44
Javaがどんなに疎結合を頑張っても、IDEがそれを否定するのな

107:デフォルトの名無しさん
06/11/08 01:17:29
疎結合っていうのは、業務アプリの各画面を独立させましょうという程度でしかないからな。
GUIのひとつの画面は、どうしても密結合になる。

108:デフォルトの名無しさん
06/11/10 01:04:36
jarファイルを実行したとき、そのjarファイルが置かれているディレクトリの
パスを取得するにはどうしたらよいでしょうか?


109:デフォルトの名無しさん
06/11/10 01:32:48
>>108
クラスパスルートがたくさんある場合はどう解釈するの?

110:デフォルトの名無しさん
06/11/10 01:42:27
>>108
実行時のディレクトリを知りたいのかな?
String path;
path = new File(".").getAbsolutePath();
とか。

111:デフォルトの名無しさん
06/11/10 01:58:03
>>110
それなら、System.getProperty("user.dir")の方がよくね?


112:デフォルトの名無しさん
06/11/10 21:50:28
設定ファイルをjarと同じディレクトリに置きたいんだよ。
フォルダごと移動させれば他のPCに環境をそのまま移せるように。
設定ファイル以外にもいろいろ置きたいからjarのパスが知りたい。

113:108
06/11/10 23:31:12
皆様ありがとうございました。
jarファイルを実行したときに、jarファイルと同じディレクトリにあるファイルで
拡張子が.zzzのもので、最終更新日が最新のものを自動的に読み込むという処理が
必要で、上記のような質問をさせて頂きました。

解決致しましたので、ご報告致します。
File f = new File(".") ;
String[ ] files = f.list( ) ;

これで実行ディレクトリのファイル一覧を配列に取得することができました。
ありがとうございました。

114:デフォルトの名無しさん
06/11/10 23:40:31
そのやり方は本当は危険なんだけどね。

115:デフォルトの名無しさん
06/11/10 23:42:23
OS(というかVM)に依存するんだよね。


116:デフォルトの名無しさん
06/11/10 23:48:06
GUIアプリならコマンドラインで打つようなことも無いのかな?
俺なら保険的に<md5>.md5みたいなファイル用意して
確実に実行元がカレントディレクトリである必要があるようにするかも

117:デフォルトの名無しさん
06/11/11 04:15:14
>>108
亀レスだけど、System.getProperty("java.class.path")
sunのVM限定だと思う。
他の方法としてはJARファイル内にリソースを格納して、
this.getClass().getClassLoader()#getResourceでURLを取得するとか。

118:デフォルトの名無しさん
06/11/11 09:24:40
>>117
java.lang.System#getProperties()のjavadocに明記されてるし、
J2SE5.0の仕様の上ではVMによらず使用可能とみていいんじゃないかな。

119:デフォルトの名無しさん
06/11/11 16:24:32
resources などというディレクトリを作ってそこにクラスパスを通し、
そこに設定ファイルを置いてファイルを取得

120:デフォルトの名無しさん
06/11/11 17:20:18
resources などというディレクトリはどこに作られるのかと。
jarと同じディレクトリに作りたいでしょ?
でも、いちいちクラスパス通したくない。ではjarのパスはどこ?
というお話し。

121:デフォルトの名無しさん
06/11/11 17:31:55
jar ファイルを実行、とあることから、
関連するライブラリなどへのクラスパスは jar ファイルのマニュフェストに記述されると勝手に推測。
そこに resources への相対パスも追加すればいいんじゃまいかと思ったが
そもそも読み込むファイル名は決まっていないのね。

122:デフォルトの名無しさん
06/11/11 18:22:59
俺がこれまで使ったJavaにおける設定ファイルの設計はこんなもんかな。

1.CLASSPATHから読み込む方法。
一番安易だが、配置に柔軟性が乏しい。

2.環境変数XXXX_HOMEを設定させる方法
起動スクリプトや実行ファイル内で設定取得されることが多い。
Java 5から環境変数の取得が復活しているので、Java内で取得可能になった。
CLASSPATHによらず、自由に構成管理できる。(XXX/conf/配下等)
広く使われており、JAVA_HOME. ANT_HOMEなど実例多数。

3.ユーザのホームディレクトリからの相対パスを利用する方法
複数のユーザで使うソフトウェアに適する。
Windowsの場合、ApplicationData/XXX配下、Unixの場合.xxx/配下などが使われる。プログラマが構成をデザインしないといけない。

4.Preferences APIを使う方法
Java 5から提供される標準API。
実体は、Winはレジストリ、Unixは.java配下に作られるが、API利用者は意識する必要がない。

123:122
06/11/11 18:42:23
追加

5.カレントディレクトリと1.の併用
log4jなどいくつかのソフトウェアで採用されている。
ツール系は、テンポラリに設定を変えたい時があるので、
この方法は便利。

結局、作成するアプリの性質によってどうデザインするか変わってくるよ。

124:デフォルトの名無しさん
06/11/11 18:44:20
Swingとまったく関係がないことについて

125:デフォルトの名無しさん
06/11/11 18:50:01
まったくってことはないな。直接は関係ないが、。
誰だよ、スレ違いの質問投げた奴は。

126:デフォルトの名無しさん
06/11/11 18:53:04
よーし、おねえさん、がんばってSwingしちゃうわよー

127:デフォルトの名無しさん
06/11/11 19:03:57
スイングスイング二木ゴルフっすか?>>126


128:デフォルトの名無しさん
06/11/11 19:15:22
もう少し書こうかと思ったけどスレ違いじゃ仕方ないな。

129:デフォルトの名無しさん
06/11/12 13:58:33
URLリンク(www.uploda.org)

これがふつー?だったらjavaやめる。
2000で1_4_2です。
ただフレームを表示するだけでも同じ症状がでるのですが。

130:デフォルトの名無しさん
06/11/12 14:03:06
あきらかに異常だね

131:デフォルトの名無しさん
06/11/12 14:11:35
>>130
やっぱりそうなのか。
thx

PCが悪いのかな?

132:デフォルトの名無しさん
06/11/12 14:31:17
ソース

133:デフォルトの名無しさん
06/11/12 14:38:42
javaってvistaでも使える?

134:デフォルトの名無しさん
06/11/12 15:05:15
>>132
import javax.swing.*;
import java.io.*;
import java.awt.Container;
import java.awt.*;

class TinyMemo {
JFrame frame;Container com;
TinyMemo(){
framereset();com = frame.getContentPane();
Paneles paneles = new Paneles();com.add(paneles.getBar(),BorderLayout.NORTH);
JTextArea text = new JTextArea();com.add(text,BorderLayout.CENTER);frame.setVisible(true);
}
private void framereset(){
frame = new JFrame("メモ帳");frame.setSize(300,400);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){TinyMemo tiny = new TinyMemo();}
}
class Paneles extends JPanel {
JMenu menu;JMenuBar menubar;
JMenuItem save;JMenuItem read;JMenuItem delete;
Paneles(){
menu = new JMenu("nya");menubar = new JMenuBar();
delete = new JMenuItem("delete");save = new JMenuItem("save");read = new JMenuItem("read");menubar.add(menu);
menu.add(delete);menu.add(save);menu.add(read);
}
JMenuBar getBar(){return menubar;}
}

こんなもんソースいらんだろ思ってさらさんかったんだが
色々変わってたりついてるけ症状はそんままだからこれで
改行が多すぎる言われまくったからかえたらすげーよみにくい。

135:デフォルトの名無しさん
06/11/12 16:24:14
>>134
まだ初心者か?
Swingにはメニューバー用の専用メソッドがあるよ
他にもクラス設計など指摘したいところがたくさんあるがまあいいか

136:デフォルトの名無しさん
06/11/12 22:03:15
>>134
最低限、改行して見やすいコードをさらせ。

137:デフォルトの名無しさん
06/11/12 23:04:37
>>134
frame.setJMenuBar()
URLリンク(sdc.sun.co.jp)(javax.swing.JMenuBar)

138:デフォルトの名無しさん
06/11/13 11:11:58
>>135,137
わ、サンクス!
わざわざありがとうございます。
>>136
改行多すぎる言われて修正しまくってこんなんなってしまったんです。orz
最初は普通だったのに。


139:デフォルトの名無しさん
06/11/14 15:51:02
>>138
2レスに分割するか、
レス消費に気を配っているorかなり長いソースの場合はアップローダを利用。

140:デフォルトの名無しさん
06/11/15 00:13:45
BOCのSpreadみたいなコンポーネントはないのですか?
JTableの縦横にヘッダがあってExcelみたいな感じのやつ。

141:デフォルトの名無しさん
06/11/15 11:37:56
JSplitPaneで、初めに片方を閉じておくことってできます?
JSplitPane#setDividerLocation(9999)とか無理矢理やればできるのですが、
一応できるのですが、キレイな方法で。

JSplitPane#getMaximumDividerLocation()で値を取得して、
それを設定する方法も試しましたが、
フレームが起動するまでは正しい値が取得できないんですかね。ダメでした。

142:デフォルトの名無しさん
06/11/15 13:29:10
>>141
JSplitPane#setDividerLocation(Integer.MAX_VALUE) とかやっとけば

143:デフォルトの名無しさん
06/11/15 14:00:41
>>141
pack()読んだ時点で確定されない?

144:141
06/11/15 15:48:34
>>142
9999よりかはキレイですね。こっちにしておきます。どうもです。

>>143
pack()は使ってないので、フレームを表示するので確定しないようです。

145:デフォルトの名無しさん
06/11/15 17:23:54
SwingつかうならPackは必須だと思うのだが

146:デフォルトの名無しさん
06/11/15 17:50:42
pack()だけじゃサイズが確定できないレイアウトもあったような。
setPrefferedSize()とかJFrame#setSize()とかしないと、親コンポーネントが最小サイズになったり。

147:デフォルトの名無しさん
06/11/15 17:57:32
それレイアウトマネージャ勉強しろとしかいえない

148:デフォルトの名無しさん
06/11/15 19:39:12
マウスカーソルの絶対座標を簡単に取得する方法ってある?


149:デフォルトの名無しさん
06/11/15 19:55:30
>>148
java.awt.Point p = java.awt.MouseInfo.getPointerInfo().getLocation() ;
とか?1.5以降で.

150:デフォルトの名無しさん
06/11/15 19:59:26
さんきゅ!
助かったー!

151:148
06/11/15 20:00:35
>>149
さんきゅ!
助かったー!

152:デフォルトの名無しさん
06/11/19 19:51:47
質問です。
Java2DとSwingに関連する内容なのですが、
JPanalを継承したクラスを、JTabbedPaneにaddして、そのクラスのpaintメソッドで
Java2Dの描画を行っています。
そこで、
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
AffineTransform af = new AffineTransform();
g2.setTransform(af);
以下描画...
}
とすると、ウィンドウサイズを変更したり、再描画させたりした時に描画するものの位置がずれます。
具体的にいうと、jTabbedPaneのタブの大きさだけ描画した物が上に移動します。
原因を調べてみると、どうもAffineTransformオブジェクトをGraphics2Dに登録すると、
座標計算の基準点がタブに登録したJPanel派生クラスの領域の左上ではなく、
jTabbedPaneの領域(タブ表示域も含んだ)の左上に、再描画の時に変更になってしまうようなのです。

これはJavaランタイムのバグなのでしょうか。ちなみにJavaのバージョンは1.5.0_08です。

153:デフォルトの名無しさん
06/11/19 20:23:00
よくわからんが
paint()じゃなくて
paintComponent()をオーバーライドしなされ
あと1.5.0_08はSwingにバグがあるので1.5.0_09にしたほうがいい

154:デフォルトの名無しさん
06/11/20 09:59:06
>>152
問題が再現するコンパイル可能なソースを出した方がはやいと思うよ.

155:デフォルトの名無しさん
06/11/20 11:40:38
>>154
public class foo extends JApplet {
private JPanel jContentPane = null;
private JTabbedPane jTabbedPane = null;
private JPanel jPanel2 = null;
public foo() { super(); }
public void init() {
this.setContentPane(getJContentPane());
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJTabbedPane(), BorderLayout.CENTER);
}
return jContentPane;
}
private JTabbedPane getJTabbedPane() {
if (jTabbedPane == null) {
jTabbedPane = new JTabbedPane();
jTabbedPane.addTab("パネル2", null, getJPanel2(), null);
}
return jTabbedPane;
}
private JPanel getJPanel2() {
if (jPanel2 == null) {
jPanel2 = new Canvas();
jPanel2.setLayout(new GridBagLayout());
}
return jPanel2;
}
}

156:デフォルトの名無しさん
06/11/20 11:42:08
class Canvas extends JPanel {
public Canvas self = this;
public Canvas() {
this.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent arg0) {
self.repaint();
}});
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア
AffineTransform af = new AffineTransform();
af.setToTranslation(100, 0);
g2.setTransform(af);
g2.draw(new Line2D.Float(10,50,20,50)); //x軸
}
}
こんなソースになります。マウスクリックすると短い横線の位置がタブの高さ分下に下がります。
ウィンドウサイズを変更すると元に戻り、またクリックすると位置が下がります。

157:デフォルトの名無しさん
06/11/20 21:00:04
>public Canvas self = this;
すまん,うけたw

158:デフォルトの名無しさん
06/11/20 21:35:16
>>155
//g2.setTransform(af);
g2.transform(af);
理由はAPI説明のGraphics2D#setTransformの項をよく読むこと。

ちなみに、内部クラスから外側のクラスのインスタンスを参照したいときは、
Canvas.this.repaint();
のように「外側のクラス名.this」と書けば、selfのように自分で持っていなくてもいい。
ただし、外側のクラスが匿名クラスの場合は名前がないため、この書き方はできないので、
別の手段が必要だが。その中にはself=thisのような方法もとりうる方法のひとつではある。

159:157
06/11/20 21:41:14
笑っただけだと悪いので… Canvas#paintComponent() を以下のように
すれば何が期待通りになって,かつ何が起きてるのかわかると思われ.
# 初回描画時とrepaintでの描画時の出力を比べてください.
public void paintComponent (Graphics g){
  Graphics2D g2 = (Graphics2D) g;
  AffineTransform originalTransform = g2.getTransform();
  System.out.println("translate (x, y) = ( " +
    originalTransform.getTranslateX() + ", " +
    originalTransform.getTranslateY() + ")");

  g2.clearRect (0, 0, this.getSize().width, this.getSize().height);
  originalTransform.translate(100, 0);
  g2.draw (new Line2D.Float (10, 50, 20, 50));
}


160:デフォルトの名無しさん
06/11/21 13:42:22
ありがとうございます!
次のようにしたら解決できました。
Graphics2D g2 = (Graphics2D)g;
g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア
AffineTransform af = g2.getTransform();//new AffineTransform();
System.out.println("translate (x, y) = ( " +
af.getTranslateX() + ", " +
af.getTranslateY() + ")");
af.translate(100, 0);
System.out.println("translate (x, y) = ( " +
af.getTranslateX() + ", " +
af.getTranslateY() + ")");
g2.setTransform(af);
g2.draw(new Line2D.Float(10,50,20,50)); //x軸
タブにした状態などの色々な状況によって、Graphics2Dの変換行列が自動的に辻褄をあわせてくれていたんですね。
だからg2.getTransform();としてAffineTransformオブジェクトを取得してそれを使うべきで、
さらにそれ以後の座標変換も相対的な変換にすべきだったんですね。
よく分かりました。ありがとうございます。

161:デフォルトの名無しさん
06/11/21 13:51:45
それにしても、マウスクリックした時と初回描画時やウィンドウサイズを変えたりした時で描画領域の
原点の位置が変わってしまうなんて、Swingって妙な仕様ですね・・・。

162:デフォルトの名無しさん
06/11/21 16:39:27
>>161
なぜにそんなにsetTransformを使いたがるんだろうか。
setTransformはgetTransformで保存した元のコンテクストを、
描画終了時にリストアするときにだけ使うべきものとある。
描画時の座標変換にはtransform, rotate, scale, shearを使うだけでいい。
仕様が変というより、使い方が変だと思う。
変な使い方ができうるという点で仕様が悪いのかもしれないけど。

163:デフォルトの名無しさん
06/11/21 17:26:03
>>160
Graphics2D g2 = (Graphics2D)g;
g2.clearRect(0, 0, this.getSize().width, this.getSize().height); //画面を一度クリア
AffineTransform backup = g2.getTransform(); // backup
g2.translate(100, 0);
g2.draw(new Line2D.Float(10,50,20,50)); //x軸を描画
g2.setTransform(backup); // restore

164:デフォルトの名無しさん
06/11/21 18:03:15
>>162
そうですね。setTransformは今後控えます。
でもそれと関係なしに、マウスクリックした時と初回描画時orウィンドウサイズ変更時で描画領域の
原点位置が変わっていて、それをSwing(AWT?)がg2の変換行列を自動的に変えて無理やりつじつまを合わせている
というSwing(AWT?)の仕様がちょっと気になってしまいました。

165:デフォルトの名無しさん
06/11/24 18:35:49
高速GUIのスレがいつの間にかなくなっているな

166:デフォルトの名無しさん
06/11/24 21:30:27
HTMLの<table>のように理解しやすいレイアウトはないの?
GridBagLayoutでいいじゃんってのは止めてね。
コンポーネント間隔の割合比率(パーセント)を<table>のように
自動計算でやってくれたりすると楽なんだけど…

167:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6
06/11/24 23:14:02
SWTも結局大して早くなかったし、最良のSWTがEclipse自身だもんな。

168:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6
06/11/24 23:14:23
×SWTが
○SWTアプリが

169:デフォルトの名無しさん
06/11/24 23:47:52
>>166
割合ではないけどレイアウトマネージャほとんど理解しなくても使えるグループレイアウトは?


170:デフォルトの名無しさん
06/11/25 00:17:53
日本語でおk

171:デフォルトの名無しさん
06/11/25 01:22:34
>>166
XmlGridLayoutでも使ってみれば?

172:デフォルトの名無しさん
06/11/25 01:28:22
>>165
需要大してなかったみたいだし、仕方ないね・・・

それにSWTの質問がしたい人はプラグ印スレに行けばいいし、なくても問題ないだろ。
(つーかSWTやる人のほとんどはプラグ印用途な気もするが。)

173:デフォルトの名無しさん
06/11/25 06:03:06
Eclipseのプラグイン以外でSWT使うのはアホだな。
Eclipse RCPとか使ったりね。もうバカかと。

174:デフォルトの名無しさん
06/11/25 19:09:10
>>173
Eclipse RCPはそんなに悪く無いと思うがな
最近、RadRailsとかAptanaとか実際にそれなりに動くRCPアプリが結構出て来てるし
まあ、Eclipse RCPは実質Eclipseプラグインとほとんど変わらんのだが。

175:デフォルトの名無しさん
06/11/25 19:37:08
>>171
ありがたや。ありたがや。

176:デフォルトの名無しさん
06/11/27 10:33:18
画面デザインがベタベタなWindows以外許さない、
な案件だと仕方なくSWTで作ることになる・・・
と思いきや、Swingでプロトタイプ作って見せると
やっぱこれで良いですになる今日この頃。

177:デフォルトの名無しさん
06/11/27 20:32:43
あるあるwwww

178:デフォルトの名無しさん
06/11/30 02:43:56
JFrame上のJMenu、JMenuItem、等のフォントをまとめて(同じものに)設定するにはどうしたらいいでしょうか?


179:デフォルトの名無しさん
06/12/02 17:33:15
FontUIResource font = new FontUIResource(new Font(...));
UIManager.put("Menu.font", font);
UIManager.put("MenuItem.font", font);

180:デフォルトの名無しさん
06/12/03 16:15:58
>>179
ありがとうございました。

181:デフォルトの名無しさん
06/12/04 00:49:10
paintComponentとかpaintとかで、
いくつも矩形を描いて中に文字をいれたいんだけど、文字の長さや幅に応じて
自動的に矩形のサイズを調節したり、矩形の表示位置がウィンドウをはみだしたり
他の矩形と重なったりしないように表示位置を自動で調節してくれるようにしたい。
こういうのって相当むずかしいですか?

182:デフォルトの名無しさん
06/12/04 00:52:17
推奨サイズとかってわかる?

183:181
06/12/04 18:17:08
単語をいくつかならべてそれを矩形でかこみたいんですよ。
矩形の大きさは単語が矩形からはみださないように自動的に適切な大きさ計算して
描かれるようにしたい。

そういう単語が入っている矩形がこれまた何個も出したい。
矩形同士もお互い重ならないように自分で適切な位置を計算してそこに表示されてほしい。
そういうのって簡単にはできないのかな?


184:デフォルトの名無しさん
06/12/04 19:10:02
JLabelにボーダーつければ?

185:181
06/12/04 20:09:25
全部自分で描きたいんですよ。

186:六尺兄貴
06/12/04 20:27:23
TextLayoutとかLineBreakMeasurerとかで調べるとよろし。
結構めんどいよ。.NETは楽なんだけど。

187:デフォルトの名無しさん
06/12/04 21:26:44
そこまでして自分でやりたい意図が不明だ。非標準のライブラリを排除したいわけでもないし。

188:デフォルトの名無しさん
06/12/04 22:51:21
やりたいことが良く分からないけど、
SwingUtilities#computeStringWidth()とか、layoutCompoundLabel()とか使って
自分で描画するかな

189:デフォルトの名無しさん
06/12/04 23:53:35
>>181
>>185

自動でやってくれと言ったり、全部自分で描きたいとか
訳が分かりません。

俺なら、Border設定したJPanelの中にJLabelを埋めていくかな?

190:デフォルトの名無しさん
06/12/05 01:35:18
デモのアプレットの中にそういうのあったね。>>181

191:デフォルトの名無しさん
06/12/05 14:50:38
文字を四角で囲みたいだけなら、Font#getStringBoundsで領域取得して計算すりゃいいんじゃないだろうか・・・

192:181
06/12/05 19:37:37
>>191

表示する場所を計算すればいいってのは分かるんだけど、
複数の矩形を表示するってことを考えると、計算が複雑になりそうで
できそうもないです。

ちなみに185は私ではありません。

193:デフォルトの名無しさん
06/12/05 21:45:16
ひょっとしたら、>>94>>100で挙がってるような
グラフ描画用ライブラリを使った方が簡単かもしれない。
ノードのみ並べて、ノードのサイズをライブラリ任せにすれば(その辺はライブラリ依存だが)
だいたいいけそうな気がする。

194:デフォルトの名無しさん
06/12/05 23:19:14
>>193

チョチョイとサンプルかいてみてよ

195:デフォルトの名無しさん
06/12/06 02:57:57
ちょいちょい

だがあぷろーだに拒否された

196:デフォルトの名無しさん
06/12/06 10:37:34
JGraphいれようとしてるんだが
Ant必要なの?これ。
インストールできませんdふぁd;sfじゃs

197:デフォルトの名無しさん
06/12/06 15:13:55
んなばかな

198:デフォルトの名無しさん
06/12/06 20:23:17
つかantの動かない開発環境ってどうよ

199:デフォルトの名無しさん
06/12/06 20:45:26
JGraphでほんとうにできるのかよ

200:デフォルトの名無しさん
06/12/06 20:48:44
ほんとうに出来るかどうか、は、何をやろうとしているかに拠る。

201:デフォルトの名無しさん
06/12/06 20:52:53
たくさんのキーワードをいくつかの分類して
分類ごとに矩形を描いて
キーワードを矩形の中にならべていきたいわけ。
矩形の大きさはキーワードの長さと種類にあわせて決めたいし、
矩形の表示位置はほかの矩形とかさならないように決めたいのよ。

202:デフォルトの名無しさん
06/12/06 21:36:49
できないでファイナルアンサー?

203:デフォルトの名無しさん
06/12/06 21:40:14
コンポーネントのサイズなんていくらでも自由にかえれるだろ

204:デフォルトの名無しさん
06/12/06 21:47:15
>>202
オマエには出来ないでファイナルアンサー

ってか、既に答を書いてる人がいっぱいいるじゃん。

205:デフォルトの名無しさん
06/12/06 22:48:16
口だけでは納得いかん
動くコードなら納得がいく

206:デフォルトの名無しさん
06/12/06 23:02:57
コードくれ厨がJavaにまで…

207:デフォルトの名無しさん
06/12/07 00:12:43
>>201
なにがいいたいのか、俺にはさっぱりわからん。
図かなんか描いてどっかに貼ってみせてみろ。

208:デフォルトの名無しさん
06/12/07 00:24:40
_________________________________
| keyword 11111111111      |
| keyword 222222222222222222222 |   _______
| aaaa              |  |      |
_________________   | うお   |
        ________    | ぎゃああ |
       |        |   _______
       |あああああああ |
       |        |
       __________

209:デフォルトの名無しさん
06/12/07 00:27:06
こんな風にできんのか


______________
| keyword 11111111111      |
| keyword 222222222222222222222|    _______
| aaaa              |  |      |
_________________   | うお   |
        ________       | ぎゃああ |
       |           |   _______
       |あああああああ  |
       |           |
       __________

210:デフォルトの名無しさん
06/12/07 00:35:22
ネトゲの吹き出しみたいなもんか?

211:デフォルトの名無しさん
06/12/07 00:52:16
Graphicsに描画するんだろ?
どうでもできるだろ。

212:207
06/12/07 00:52:55
>>208
GlyphVector 作って、getOutline() で Shape とかとってくれば
簡単な気がする。

213:デフォルトの名無しさん
06/12/07 10:22:21
ここまで答えが書かれてるのにできないってのは無いな。
やってないだけ。

214:デフォルトの名無しさん
06/12/07 10:53:11
結局アルゴリズムの問題だよな。
やることはJavaだろうがWin32だろうがGTKだろうが変わらない。

215:181
06/12/07 12:28:54
文字をいれる枠の大きさぐらいはなんとかなるかもしれんが、
文字が入ってる枠をほかの枠とかさならない位置を計算して
表示するアルゴリズムがわからんじゃないか

216:デフォルトの名無しさん
06/12/07 13:31:24
なに、Swingと関係ないことで苦労してるの?
アルゴリズムの初心者スレいったほうがいいよ。

217:デフォルトの名無しさん
06/12/07 14:24:59
複数個のJPanelが存在し,
ボタンを押された祭にそれらのJPanelを切り替える事は可能でしょうか?

public class SwingTest extends JFrame implements ActionListener{
JLabel label = new JLabel("change");
JButton btn = new JButton("push");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
public static void main(String[] args){
SwingTest test = new SwingTest("SwingTest");
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setVisible(true);
}
SwingTest(String title){
setTitle(title);
setBounds(10, 10, 300, 200);
p1.add(btn);
p2.add(label);
btn.addActionListener(this);
getContentPane().add(p1);
}
public void actionPerformed(ActionEvent e){
getContentPane().remove(p1);
getContentPane().add(p2);
}
}

こんな感じで今やっているのですが,ボタンを押しても反応しなくて困っています.
どなたかご教授お願いします.

218:デフォルトの名無しさん
06/12/07 15:08:27
一応そのやり方でもできるけど、ちゃんとイベント把握してないとやめたほうがいい

たぶんやりたいことはJPanelを切り替えることではなく、レイアウトマネージャにあるやつで足りると思うが


219:デフォルトの名無しさん
06/12/07 15:37:48
>>217

解答。ボタンを押すとボタンが消えて、ラベルが現れるなんて、変なGUIだな。
元の状態にに戻れないじゃん。あくまでもテストだよね。
本ちゃんでこんな変なGUI使ったら笑われるよ。

public void actionPerformed(ActionEvent e){
getContentPane().remove(p1);
getContentPane().add(p2);
validate();//←ここ、ここ
}

220:217
06/12/07 16:06:49
返信ありがとうございます.
validate()
を加える事で表示は代わるようになったのですが,また新たな問題が・・・.
今3つのパネルを用意してそれら3つを行き来できるようにしているのですが,
この方法を用いた場合何故か3つのパネルを1回ずつ表示させることはできるのですが,
2回目以降即ち違うパネルから再度戻ってきた場合に表示が反映されません.
何度も質問してしまい,お手数だと思いますが,どなたかよろしくお願いします.

221:デフォルトの名無しさん
06/12/07 16:12:04
コードも見ないでどうやって解答しろと?

222:217
06/12/07 16:22:57
すいません.
コードを張ろうとしたら大きくなりすぎて,張る事ができなかったので・・・.
表示を切り替えている部分はこんな感じです.public void actionPerformed(ActionEvent e){
String cmd = e.getActionCommand();
if (cmd.equals("1to2")){
getContentPane().remove(パネル1);
getContentPane().add(パネル2);
}
else if (cmd.equals("1to3")){
getContentPane().remove(パネル1);
getContentPane().add(パネル3);
}
else if (cmd.equals("2to1")){
getContentPane().remove(パネル2);
getContentPane().add(パネル1);
}
else if (cmd.equals("2to3")){
getContentPane().remove(パネル2);
getContentPane().add(パネル3);
}
else if (cmd.equals("3to1")){
getContentPane().remove(パネル3);
getContentPane().add(パネル1);
}
else if (cmd.equals("3to2")){
getContentPane().remove(パネル3);
getContentPane().add(パネル2);

}
validate();
}

223:217
06/12/07 16:29:56
何度も申し訳ありません.
先ほどパネルはが変わらないと言いましたが,一部分は変わっていました.
3つのパネルに共通する部分は変更されているのですが,
それ以外の部分が変更されていませんでした.
ただ変更されると言ってもマウスをボタンコンテナ上に乗せると変わるのですが,
そうしなければ変わりませんでした.
非常に説明が下手で申し訳ありませんが,よろしくお願いします.

224:デフォルトの名無しさん
06/12/07 16:45:57
>>218が一番まともな回答だと思うけどそれは調べたの?

225:217
06/12/07 16:49:42
>>224
一応>>218の方法で
画面の切り替えが発生したら
パネル上にあるコンテナをremoveAllで削除.
新たに別のパネルを作成し,コンテナを設置.
そのパネルを今表示しているパネルに代入.
という感じでやったのですが,画面が切り替わらず,断念しました.

226:デフォルトの名無しさん
06/12/07 16:50:46
そりゃそうだが、java.awt.CardLayoutというキーワードが出てこないと
そう簡単には調べられない。
AWTのレイアウト概説的文章とにらめっこする必要が出てくる。

227:デフォルトの名無しさん
06/12/07 16:53:00
AWTやSwingはまずレイアウトマネージャありきだろ
どんな初心者本だってすぐにでてくる

228:217
06/12/07 16:55:36
いまさらになってしまうのですが
自分がsetLayout(null)でレイアウトマネージャーを無効にしているのがダメな気がしてきた・・・.
やはり何かしらレイアウトマネージャーは使うべきなんですかね・・・.

229:デフォルトの名無しさん
06/12/07 17:01:21
レイアウトマネージャ使えばコンポーネントサイズが変わってもそれにあわせて動いてくれるからな
とりあえずnullを使う利点はない
絶対的な座標のように扱うにしてもグループレイアウトやアブソリュートレイアウトのほうがまし

今のコードそのまま使うにしてもそのさしかえたいJPanelにレイアウト指定して
そこにカードレイアウトではりつければいいだけ

レイアウトマネージャ理解していないのならIDEでいじってみてどういう感じなのか理解したほうがいい
カードレイアウトってのはタブ部分のないタブコントロールみたいなもん

230:217
06/12/07 17:07:34
返信ありがとうございます.
カードレイアウトが自分のやりたい事とマッチしているようなのでまずはこれを勉強してみます.
みなさま本当にありがとうございました.

231:デフォルトの名無しさん
06/12/07 17:14:50
カードレイアウトって、そんなもんも有ったなあ。
しかし、222のコード見たところ、ボタンがいくつか有って、押すと対応するパネルが
表示されるようにしたいんでしょ。普通はJTabbedPane使って解決じゃないの?

232:デフォルトの名無しさん
06/12/07 17:21:55
今のUIそのまま使いたいならCardLayoutだけど、それは普通Tabでやる。

233:デフォルトの名無しさん
06/12/07 17:30:32
まあ、人様に御見せするアプリじゃないんでしょ。いいんじゃないの。

234:181
06/12/07 22:28:24
JGraphいちおううまくサンプル動かせたんだが、
なぜかJ2SDKのフォルダの中でソースをコンパイルして実行しないと
他の場所ではコンパイルも実行もできなんだけど、なぜだろう。
コンパイル後の.classファイルなら他の場所でも実行できるのかと思って
別の場所に移動させて動かしてみたらやっぱり動かないし。
普通、J2SDKフォルダの中でコンパイルしたり実行したりってしないんだし
これだったら使い物にならないんだけど・・・

235:デフォルトの名無しさん
06/12/08 00:16:52
jgraph.jarをソースと同じフォルダにいれればコンパイルできますた。
でも常にjgraph.jarを一緒にいれておかなければならないんでしょうか。

236:デフォルトの名無しさん
06/12/08 00:26:59
なんか根本的なところ勉強したほうがよくないか?
それにSwingとまったく関係ない点について

237:デフォルトの名無しさん
06/12/08 00:31:35
>>181
Javaの仕様を勉強してこい。
理解できるまで帰ってこんでよい。

238:デフォルトの名無しさん
06/12/08 00:31:59
jgraphスレ行け

239:デフォルトの名無しさん
06/12/08 00:49:38
jgraphスレってなんだよ。そんなものねえじゃん

240:デフォルトの名無しさん
06/12/08 00:53:24
無けりゃ最初に質問すべきスレがあるだろ
少なくともここじゃねえ

241:デフォルトの名無しさん
06/12/09 19:21:53
JTableで、カーソルキーによるセルの移動を監視したいのですが、どうしたらよいですか?
keyPressed で JTable#getSelectedRow() で行を取得すると、
移動前の行が取れてしまうのが悩みの種です。
押したキーによって、+1、-1すればできますが、
もう少し良い方法があれば教えてください。お願いします。

242:241
06/12/09 19:59:48
モデルの isCellEditable をオーバーライドして移動先が取得できるか試しましたが、
セルを行で選択するモードだと isCellEditable が呼ばれないんですね。どうしたものか。

243:デフォルトの名無しさん
06/12/09 20:32:19
>>241
SelectionModel を使う。


244:デフォルトの名無しさん
06/12/09 20:49:50
>>241
TableColumnModelListener,ListSelectionListener
の2つで横と縦の選択がとらえられる。


245:241
06/12/09 22:31:36
>>243 >>244
ありがとうございました。早速試したところ、なんとか取れました。
あと、JTable#valueChanged(ListSelectionEvent) をオーバーライドしても取れました。
奥が深いですね。

246:デフォルトの名無しさん
06/12/09 23:25:58
ぽとぺたやってると手軽にオーバーライドできなくて面倒なんだよね
ペイントイベントもイベントとしての実装じゃないから手軽とはいかないし

SwingはJavaBeansをベースに作ってるといいながらどうもそういう実装になってないんだよね
getとsetが対になってないからプロパティとして表示されないとかも多いし

247:デフォルトの名無しさん
06/12/13 00:56:29
Java SE 6 入れてみたけど Swing また速くなった?

248:デフォルトの名無しさん
06/12/13 01:55:20
Swing部分はまだ確認してないが、演算速度は確実に速いっぽ
コンパイルしなおしてなくても物によっては1.4倍くらいでてる


249:デフォルトの名無しさん
06/12/14 11:49:28
JButton上で、HTML要素を使って改行し、多段落表示させているのですが、
この中の文字列に含まれる一部の「<」や「>」や「/」などが表示されません。
これらの文字をHTML要素として解釈させないため無効化するにはどうしたらいいのでしょうか?

Webブラウザ上でHTMLソースを表示させるときのように
「<」や「/」を実体参照に書き換えても表示できないようです。

250:249
06/12/14 12:37:25
文字実体参照ではなく数値文字参照でやってみたらなぜかうまくいきました。


251:デフォルトの名無しさん
06/12/14 12:41:39
>>250
おれはふつうに>とかでできてるぞ

252:デフォルトの名無しさん
06/12/14 12:43:46
あら、2chでえすけーぷされた
&gt;
で普通に表示されてるよと

253:デフォルトの名無しさん
06/12/14 12:53:18
>>252
レスありがとうございます。

< と >はうまくいったのですが、
<html> のあとに、「/」が入る部分があると表示されたり表示されなかったりで試行錯誤中です。


254:デフォルトの名無しさん
06/12/14 13:29:39
>>253
bodyタグがはいっていないとかいうオチは?

255:デフォルトの名無しさん
06/12/15 07:27:32
drawLineメソッドでCanvasに線をかくことが出来ますが、
その線を座標の配列として得るにはどうしたらいいでしょうか?

256:デフォルトの名無しさん
06/12/15 09:34:57
>>255
線は特にインスタンスを保持してないしデータもない。
このやりかたでを試してみな。
URLリンク(web.hc.keio.ac.jp)

257:デフォルトの名無しさん
06/12/15 10:45:24
>>256
もっと簡単にできないものでしょうか
例えば(0,0),(0,5)をdrawLineで指定したとしたら
2点とその間にある(0,1),(0,2),(0,3),(0,4)が塗りつぶされます。
この4点の塗りつぶしをJavaはどのように実装しているのでしょうか?
この例のように予め2点を結ぶと水平,もしくは垂直になると分かっていればいいですが
(0,0),(2,5)のように水平及び垂直にならない場合,
drawLineはどのように計算して塗りつぶす点を決めているのでしょう?

258:デフォルトの名無しさん
06/12/15 11:19:16
>>257
言っている意味がわからないし(何に対して水平、垂直?水平な点なんてありえないし)
255との繋がりも無いように読めるんだけど、結局何がしたいの?
つか256もけして難しくはないと思うんだけど。
実装について知りたければソース読め。

259:デフォルトの名無しさん
06/12/15 13:11:03
>>258
ちょっと感動した。ソース読めってセリフが出てくるあたり。
まあ、ネイティブに飛ばしてない限りそこ読めば分かるよな。

260:デフォルトの名無しさん
06/12/15 13:16:38
どうでも良いことだけどCanvasはSwingじゃなくてAWTじゃなかったっけ。

261:デフォルトの名無しさん
06/12/15 13:31:08
1.2 以降だと、たかが drawLine でも Graphics2D の関係で Stroke の計算とか
結構面倒臭い事しなきゃいかんような気もする。

1.1 までだったら Stroke とか無かったし、
アンチエイリアス云々って時代でもなかったから
ブレゼンハムアルゴリズムだけで出来たかもしらんけど。

262:デフォルトの名無しさん
06/12/15 13:45:06
257はソース読んでからの書き込みです。
drawLineの実装ってどんなんだろ,と思ってソース見たのですが
Graphic見てもabstractで
Graphic2Dでオーバーライドしてるのかなと思ってもありませんでした。
どうやらdraw(Shape)っぽい漢字なのですが
Stroke云々ってあってめんどくさそうなのです。

>>258
水平,垂直ってのは結んだ線の話です。
(0,0)と(0,5)を結ぶと垂直な線になります。
ある2点を結んだときにできる線が通ることになる座標を
得るにはどうしたらいいか?ってことで伝わるでしょうか

263:デフォルトの名無しさん
06/12/15 13:46:41
えっと、もっと簡単に言うと
直線が2本あって、
その2本の線の交点の座標って求められるの?
ってことかい?

もしそれなら数学学べ

264:デフォルトの名無しさん
06/12/15 14:04:43
>>263
全然話が違います
「ある2点を結んだとき」ですから出てくる点は2つです
それだと4点になります

drawLine(0, 0, 0, 5)を呼び出すと
(0,0),(0,1),(0,2),(0,3),(0,4),(0,5)が塗りつぶされます。
(0,1),(0,2),(0,3),(0,4)が塗りつぶされるのは
(0,0)と(0,5)を結んだ直線が通る座標だからです。
(0,0)と(0,5)を結ぶと垂直な線ができるので
(0,1),(0,2),(0,3),(0,4)が塗りつぶされるということは
簡単に求められます。
drawLine(0, 0, 100, 101)を呼び出したときに
塗りつぶされる座標はどこになるのでしょうか?

265:デフォルトの名無しさん
06/12/15 14:09:00
もっと簡単じゃないか。。。

drawLine(0, 0, 5, 5)だと
(0,0),(1,1),(2,2),(3,3),(4,4),(5,5)
が塗りつぶされるけどどうやって計算するの?
ってことか?

やっぱ数学学べ

266:デフォルトの名無しさん
06/12/15 14:21:08
計算する以外での求め方は
線を書く前のキャンバスの画像と
線を書いた後のキャンバスの画像を比較すれば良い

前と後の同一座標のドットを比較して
違っていれば描画されていると判断すれば良いんじゃないか

267:デフォルトの名無しさん
06/12/15 14:23:28
>>264
ソースを理解できないのなら手助けもするが、読むのが面倒なだけなら帰れ。
そしてスレ違い。

268:デフォルトの名無しさん
06/12/15 14:29:11
JDoalogを継承したDialogで最大化、最小化ボタンを表示させることは
可能でしょうか?

JFrameを継承すれば表示されますが、
Windowsのタスクバーにアプリケーションが2個上がってきてるように
見えるのでJDialogにしたいです。

269:デフォルトの名無しさん
06/12/16 02:53:26
>>268
私が知っているのは↓の手法
Merlinの魔術: もう1つのシンプルなフレーム
URLリンク(www-06.ibm.com)
A,この手法の場合、最小化、最大化アイコンを設定する必要あり。
B,たぶんもっといい方法があると思う。

270:デフォルトの名無しさん
06/12/17 10:51:19
見えないボタンの右半分がクリックできるプログラム。
import javax.swing.*;
import java.awt.event.*;
class A020 {
  public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setSize(640, 480);
    JPanel p1 = new JPanel();
    p1.setBounds(0, 0, 100, 100);
    JButton b = new JButton("クリック");
    b.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "ボタンがクリックされました。");
      }
    });
    p1.add(b);
    JPanel p2 = new JPanel();
    p2.setBounds(50, 0, 100, 100);
    JLayeredPane l = new JLayeredPane();
    l.add(p1, Integer.valueOf(10));
    l.add(p2, Integer.valueOf(20));
    f.add(l);
    f.setVisible(true);
  }
}

271:デフォルトの名無しさん
06/12/17 11:00:39
×見えないボタンの右半分
○見えない「ボタンの右半分」

272:デフォルトの名無しさん
06/12/17 20:29:21
g.drawString("Test", 0, 0);
g.drawLine(0, 0, 10, 10);
とすると、線は(0,0)-(10,10)で描かれますが、文字の方は描かれません。
drawStringとdrawLineでは、座標の考え方が異なるようなのでしょうか?

273:272
06/12/17 20:43:03
すみません。解決しました。
drawStringは文字の左下が基点になるのですね。
なんのためにそうなっているのかわかりませんが。。。

274:デフォルトの名無しさん
06/12/17 20:57:59
ベースラインを理解しろよ・・・
それにこれはSwingと関係ないし

275:デフォルトの名無しさん
06/12/17 21:25:06
ベースラインがなぜアセント値の下にあるか説明せよ。

276:デフォルトの名無しさん
06/12/17 21:36:32
>>274
おまえには関係ないし

277:デフォルトの名無しさん
06/12/18 12:11:24
>>276
>>274自身には関係ないだろうが
スレに関係ないのは確かだ
日本語嫁よ

278:デフォルトの名無しさん
06/12/18 13:33:49
JTextArea で、キャレットの列の位置を取得したいのですが、
シンプルな方法があったら教えて下さい!!
今は以下のようにして取得しています。

_text = new JTextArea();
Element all = _text.getDocument().getDefaultRootElement();
int index = all.getElementIndex(_text.getCaretPosition());
Element line = element.getElement(index);
int col = _text.getCaretPosition() - e.getStartOffset();

279:272
06/12/18 14:35:31
スレ違いでしたか。。。
JComponentの質問は良くて、Componentの質問はダメってことですか?

280:デフォルトの名無しさん
06/12/18 15:14:32
単に274がキチガイ

281:デフォルトの名無しさん
06/12/18 17:57:41
>>270
どういうトリック?

282:デフォルトの名無しさん
06/12/18 17:58:32
>>278
全角とTabの対応が入ってなくない?
Tabは入る位置によって文字列長が変わるから、結構面倒そう。

283:デフォルトの名無しさん
06/12/18 20:28:08
>>282
その行の何文字目かが欲しいだけでしょ

284:デフォルトの名無しさん
06/12/20 04:23:00
コンポーネントをadd()あるいはremove()するときは直後に必ずrevalidate()を呼ぶべきでしょうか?

多くの場合、revalidate()を呼ばなくてもうまくいくのですが
(ただしremove()の後は必ずrepaint()してます)、
ときどきrevalidate()を呼ばないとダメなときがあります。

revalidate()が必要なときと不要なときの違いは何でしょうか?
または、違いは気にせずに常にrevalidate()するべきでしょうか?

285:デフォルトの名無しさん
06/12/20 12:21:57
呼ぶべき。

286:デフォルトの名無しさん
06/12/20 17:41:07
JavaSE6だとメニューをだしたまま、タイトルバーをクリックするとメニューが消えてくれるね。

かなりいいかんじあげ

287:デフォルトの名無しさん
06/12/20 18:13:34
おお、どれだけ待った事か>>286

288:デフォルトの名無しさん
06/12/21 02:34:13
>>284
オレもよくわからない。
revalidate()を呼ぶと、repaint() 時のクリップ領域が現状にあったものになる気がする。
詳しくわかったら教えてくれ。

289:284
06/12/21 21:25:56
自分の経験だけで言えば、JPanelに限ればrevalidate()は無くても大丈夫そうです。
以下、JPanel限定の話。

◆add()する場合
revalidate() → なくても問題ない。
repaint() → たいていはなくても問題ないが時々ないとダメなことがある。

◆remove()する場合
revalidate() → なくても問題ない。
repaint() → ないとダメ。

JComponentのドキュメントのrevalidateの項を見ると、
「プログラムが、通常、GUI の内容を更新するために
validate を呼び出す必要がない点で AWT とは異なります」
というようなことが書いてあります。
つまりSwingではrevalidateを呼ぶ必要はないということなのかなと解釈したのですが
実際のところはどうなのでしょう?

それと、JScrollPaneが絡んでるとrevalidateしないとダメなことがあるようです。

290:288
06/12/21 22:51:29
>>289
どうもありがと。
JPanel にボタンを2つ貼り付けて、押されたから片方を remove するサンプルを作って試してみた。
revalidate() しないと、ボタンが削除されたのに、レイアウトが変更されないね。
これはたぶん、revalidate()を自動的に呼ぶのが、
レイアウトに影響を受けたコンポーネントが呼ぶからだと思う。
つまり、removeされた本人は revalidate() を自動的に呼ぶが、もうremoveされていて親がいないので、すぐにreturnされる。
なので、親のコンポーネントの方で revalidate() してあげる必要がある。

ちなみにオレがrevalidate() を使う必要があったのは、JTextArea に行番号を表示させる時。
JScrollPane上に表示されていない行が増えた場合に、増えた行の行番号が正しく表示されなかった。
これは上のレスで書いた通り、新しく増えた領域が再描画する領域として認識されていないからだと思う。

まぁ長々と書いたが、オレははっきり理解していないのだが。。。。

291:デフォルトの名無しさん
06/12/21 23:11:13
URLリンク(homepage1.nifty.com)

292:284
06/12/22 01:13:22
どうもありがとうございます。
なるほど、周りのレイアウトに影響を及ぼす場合はrevalidate()が必要なのですね。
自分は最近setLayout(null)でずっとやってたから必要な場面がなかったのかもしれません。
JScrollPaneが絡んだときだけ必要になるのも納得です。

しかし、add()するときにrepaint()が必要になることがある理由は何なんでしょうか…?

293:デフォルトの名無しさん
06/12/22 13:16:52
paintイベントで描画してる場合

294:デフォルトの名無しさん
06/12/22 20:02:30
JListで、リスト項目の高さを任意に指定したいのですが、どうすればよいでしょうか?
現在はDefaultListCellRendererを継承したRendererを使って高さを設定してますが、反映されません。
呼び元を見たところ、Fontサイズが有効になっているっぽいのです。

295:デフォルトの名無しさん
06/12/22 21:32:27
>>294
そのレンダラのサイズ指定はどうなってるの?

296:294
06/12/22 22:31:40
>>295
すみません。できました。
レンダラで getPreferredSize() をオーバーライドして、サイズ返したら、そのサイズになりました。
getListCellRendererComponent() の中でサイズを指定しても、有効にならないようですね。
質問の内容が不十分だったこともお詫びします。

297:284
06/12/23 05:20:19
>>293
ありがとうございます。
paintComponent()ではなくてpaint()してる場合なのですね。
すると自分ではいじってないからどこで使われているのかわかりにくいわけですね。

298:デフォルトの名無しさん
06/12/23 14:09:18
>>291
そのFAQは知らなかった。とても参考になった、ありがとう。

299:デフォルトの名無しさん
06/12/23 14:57:52
>>297
Swingはフレームワークとしてpaintよんでる
つまり自前でコンポーネント描画しているすべての場合において必要ということ

300:284
06/12/23 17:55:43
>>299
ありがとうございます。
すると、add()の後はrepaint()必須ということですか?
repaint()しなくてもちゃんと描画される場合があるのはなぜでしょうか?

301:290
06/12/23 20:02:19
普通のコンポーネントを追加した場合は、revalidate() すれば repaint() しなくても正常に描画されると思う。されない時ってある?
>>293 は、drawLine とかで、自分で描画している場合は「必要」と言ってる気がする。
paintイベントって言ってるのも、paintComponent()のことだよね?


302:デフォルトの名無しさん
06/12/23 20:44:17
299も293も俺

Swingはpaintイベントでpaintなんちゃらというのをよんでる
そこで子のコンポーネントも順次呼ばれる
paintをオーバーライドするとイベントがとまって崩れるのはこのため

revalidateがリペイントマネージャに対してダーティマーキングしていれば自動的に再描画される
ソース読んでみた?IDEつかってるならすぐソース見れるからJComponentみてみるといいよ


303:デフォルトの名無しさん
06/12/24 05:29:14
>>302
paint?paintComponent?
オーバーライドするなら基本はpaintComponentでは?
あと、super呼び出せば今までと変わらないと思う。
理由は何にせよ、呼ばないで崩れる時があったら、呼んでみるってのでいいのかな。

304:デフォルトの名無しさん
06/12/24 05:49:29
間違えて、paintComponentsをオーバーライドしてはまる。

305:デフォルトの名無しさん
06/12/24 12:15:13
>>303
オーバーライドの話してないだろ

>>304
それはオーバーライドとはいわない
アノテーション使え

306:デフォルトの名無しさん
06/12/24 15:00:31
>>305
>>302に思いっきりオーバーライドってあるけど。

307:デフォルトの名無しさん
06/12/24 17:05:05
>>305
オーバーライドだろ
おまえみたいなヤツが思いっきりはまるんだよ。
paintComponentsというメソッドもある。
だから@Overrideアノテーションつけてもコンパイル通る。


308:デフォルトの名無しさん
06/12/24 19:38:21
>>306
paintのオーバーライドはするなという話なのだ

paintとpaintComponentは密接な関係であるが、paintComponentのオーバーライドの話はしていない

309:デフォルトの名無しさん
06/12/24 21:20:58
>>308
まぁそうなんだけど、そもそもの話は、paint()をオーバーライドしていなくても、
repaint()を呼び出す必要があるのはなぜ?ってこと。
paintComponent() で独自の描画処理をしている場合に、
repaint()の呼び出しが必要になる場合があるので、paintイベントって言われてると、
paint() とも paintComponent() とも、どっちとも取れる。「paint()」 なら、間違いようがないけどね。

とりあえず、独自描画なしのコンポーネントをaddしただけで、
repaint()が必要になるケースがよくわからない。どんなケースだろう。

310:デフォルトの名無しさん
06/12/24 21:58:08
addだけでもrevalidateしないとだめだけどな

311:284
06/12/25 20:16:27
paintComponent()をオーバーライドして独自描画をしている場合に
repaint()が必要ということですね。

312:デフォルトの名無しさん
06/12/25 23:23:17
Swingのソースのいたるところにrevalidateの直後にrepaintしてるからあるほうが安心かな

313:デフォルトの名無しさん
06/12/26 07:07:58
JTableのモデルでDefaultTableModelを使っているのですが、
DefaultTableModel#addRow(Object[])と
DefaultTableModel#addRow(Vector)で、動作が変わる時があるのですが、なぜでしょうか?

具体的な違いは、
addRow後に DefaultTableModel#setColumnIdentifiers() を呼び出すと、
addRow(Object[]) の方はデータが表示されません。

解決方法としては、
setColumnIdentifiers() を先に呼んで、addRowすれば問題ないのですが、
Java側のソースを見ても、なぜそうなるのかが,お風呂上りくらいさっぱりです。

一応直接の原因としては、
addRow(Object[])とした場合、DefaultTableModel#dataVectorに値が入らないためです。
dataVectorが初期化されていないような気がするので、
dataVector.insertElementAt(rowData, row);
の時にヌルポで落ちてもいいくらいなんですけど。

314:デフォルトの名無しさん
06/12/26 22:58:27
>>313
Object[]でテストしてみたけどカラムの表示ちゃんとかわってるよ

315:313
06/12/29 10:18:36
>>314
すみません。アク禁でした。
もう一度試したところ、addRow(Object[])とaddRow(Vector)で、動作は同じでした。ん~、どこかミスっていたようです。
あと、setColumnIdentifiers() を先に呼ばないとデータが入らないのは、仕様みたいですね。
または事前に列のサイズを指定してあげればOKでした。

316:デフォルトの名無しさん
07/01/05 04:13:37
JOptionPane.showMessageDialogueをつかったダイアログで、
ダイアログのボタンをアクションリスナに登録するには
どうしたらよいのか教えてい頂けないでしょうか?

317:デフォルトの名無しさん
07/01/05 17:23:08
フルスクリーン画面上にJPopupMenuを表示して
画面をrepaintするとJPopupMenuが消えてしまいます。
JPopupMenuを消さずに画面を再描画する方法はありますでしょうか。
JPopupMenu.setDefaultLightWeightPopupEnabled(false);にしております。

318:317
07/01/05 17:24:42
public class PopupMenuTest extends JFrame implements Runnable {
private Thread repaintThread = null;
public PopupMenuTest() {
setSize(800, 600);
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
DisplayMode fullMode = new DisplayMode(800, 600, device.getDisplayMode().getBitDepth(), device.getDisplayMode().getRefreshRate());
device.setFullScreenWindow(this);
device.setDisplayMode(fullMode);
addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {createPopup().show(PopupMenuTest.this, e.getX(), e.getY());}}});
setVisible(true);
if (repaintThread == null) {repaintThread = new Thread(this);repaintThread.start();}
}
public void run() {
while (repaintThread != null) {
System.out.println("repaint");repaint();
try {Thread.sleep(10000);} catch (Exception e) {}
}
}
private JPopupMenu createPopup() {
JPopupMenu popupMenu = new JPopupMenu();
JMenu menu1 = new JMenu("menu1");
menu1.add(new JMenuItem("TEST"));
popupMenu.add(menu1);
return popupMenu;
}
public static void main(String[] args) throws Exception {new PopupMenuTest();}
}

319:デフォルトの名無しさん
07/01/05 18:07:26
> JPopupMenu.setDefaultLightWeightPopupEnabled(false);
この行削ったら動いてるように見えるが。
HeavyWeightなコンポーネント置くつもりならどうしようもないね。

320:317
07/01/05 19:23:47
>>319
お返事ありがとうございます。
現在、PopupMenuListenerでPopup可視と連動してrepaintをするかしないか分岐
という感じで逃げています。
setIgnoreRepaint(true)
setFullScreenWindow(window)
の場合、意図した通りの動きにならない事が多い気がします。

321:デフォルトの名無しさん
07/01/06 00:50:47
IgnoreRepaintはフルスクリーンでBufferedStrategy使うの前提のものだからSwingコンポーネント使うならやめたほうがいいと思う

322:デフォルトの名無しさん
07/01/13 21:12:58
フルスクリーンでチャット機能つける場合の良い構成ってありますか?
日本語入力をどうしようというので早速つまづきます

323:デフォルトの名無しさん
07/01/13 23:35:27
それ普通にWindowsネイティブとかでもでる問題

ここはフルスクリーンをやめてウインドウの最大化をするべき
もちろん、装飾部分や常に手前に表示を指定すること

それらを指定すればタスクバーより手前に表示できる

324:デフォルトの名無しさん
07/01/14 00:11:08
なるほど。ではJLayeredPane+sync()+>>323で試してみます。
ありがとう。

325:デフォルトの名無しさん
07/01/17 03:37:37
グチだしこのスレでいいのかどうかもちと怪しいんだが、
Java2Dで描いた円ってなんであんなに汚いのかなぁ・・。
Ellipse2Dで真円描いても上下左右非対称なガタガタの円。
アンチエイリアシングかけないと見れたもんじゃない。
クラス名のごとく楕円しか描けないのだらうか。

326:デフォルトの名無しさん
07/01/17 04:38:51
Java6で直ってるはずだが。

327:325
07/01/17 20:15:42
>>326
比べてみたけど直ってないみたいだ。残念。


328:デフォルトの名無しさん
07/01/17 20:27:51
むむ、いつぞやのJavaOne Tokyoで直るって言ってたのにな…
(Sunの人じゃなかったけど)

329:デフォルトの名無しさん
07/01/17 20:37:26
>>325
URLリンク(bugs.sun.com)

一番最後の comment みると、改善はしてるけど完璧じゃないよって書いてある。

330:325
07/01/17 23:40:52
>>328-329
1.5と1.6ではまったく差はみられなかったけど、将来的には改善していく
つもりはあるみたいだからそれに期待することにします。



331:デフォルトの名無しさん
07/01/28 15:27:29
Windows Look&Feel で、デフォルトの JTextField だと IME の未確定文字につく
下線が見えないんだけど、これって俺だけ?

デフォルトだとフォントが MS UI Gothic Plain 12 になってるんだけど、
Monospaced Plain 12 に明示的に変えてやると下線も見えるようになった。

332:デフォルトの名無しさん
07/02/12 14:02:12
SwingでSWTのGridLayoutみたいなのを使いたいのですが、何処かにころがってませんかね?

また、その他使えそうなレイアウトマネージャあればURLキボンヌ

333:デフォルトの名無しさん
07/02/12 14:27:07
そのSWTのベースとなってるのはSwingというかAWTでのGridLayoutなんだが細かいところは異なる
今ならグループレイアウトが使い勝手もいいんでないかい?

334:デフォルトの名無しさん
07/02/12 15:57:17
GridBagLayoutでいいんじゃない?

335:デフォルトの名無しさん
07/02/13 10:31:47
GridBagLayout で殆どの用は足りる。

336:デフォルトの名無しさん
07/02/15 14:47:55
レイアウトマネージャの便利なとこは?

無効にして絶対値で指定したほうが楽そうじゃね?

337:デフォルトの名無しさん
07/02/15 15:01:49
固定サイズのアプリケーションならそれも選択肢に入る。
が、その場合でもレイアウトマネージャーに任せた方が楽なこと多数。

338:デフォルトの名無しさん
07/02/15 15:03:51
サイズ固定のアプリケーションしか作らないよな
プリンタで出力する気もないよな
モニタ解像度も知ったこっちゃないよな
はみ出たら横にスクロールさせる気満々だよな
リキッドレイアウトなんて聞いただけで反吐が出るよな

339:デフォルトの名無しさん
07/02/15 15:42:01
サイズ指定にしてもアブソリュートレイアウト使わないときっついぞ。
推奨サイズを使えばコンポーネントの位置関係を全自動でやってくれるし、可変サイズのフレームを絶対座標なんておわっとる。
グループレイアウトはベースラインであわせてくれたりするのがすごい便利。

まぁつかってもつかわなくてもかまわんが、何も考えずにフレームに対してsetSizeだけしなければOK。
それをするとWindowsXPと2000、Vistaとそれぞれ異なる描画結果になるので注意。

レイアウトマネージャ使っていてもDPIの違いで結構異なるプラットフォームで動かすのは大変だけどな。

340:デフォルトの名無しさん
07/02/22 15:31:56
Java Swing Hacks―今日から使える驚きのGUIプログラミング集

って本は良本ですか?

341:デフォルトの名無しさん
07/02/22 22:54:56
派手すぎて仕事用って感じじゃない。

けどいくつか役に立ちました。

342:デフォルトの名無しさん
07/02/23 05:17:51
オライリーのHacksシリーズ色が出てる本、手軽にクールなコンポーネント書きたい人向け。

所々既存コードに影響しないように考えられてる所も良いね。

早速、rhinoとgroovyから使う事を目的とした
Swingラッパーに一部採用させてもらいました。


343:デフォルトの名無しさん
07/02/23 13:18:46
Hacksシリーズのわりには内容は平凡
なぜか参考にもならないsoundのコードがはいっている
どうせいれるならちゃんとしたものを入れろと

344:デフォルトの名無しさん
07/02/24 04:44:35
まあ他のHacksシリーズを読んだら確かにそう思わなくもない。

345:デフォルトの名無しさん
07/02/27 23:56:30
mycomの記事見てJSR-296の「Swing Application Framework」を試してみた。
まぁなんつうか、モノはシンプルだね。
あとは、コンポーネントAの操作の結果を、コンポーネントBに、
Aの存在を意識させずに反映させる機能があればいいかな。
AからシングルトンなBeanを編集すると、イベントがBに飛んでそこで処理がおこる、みたいな。
こういうの自作してるんだけど、ひょっとしてjava.beans使えばできる?

346:デフォルトの名無しさん
07/02/28 00:06:55
>>345
PropertyChangeListener/Eventじゃないのかね。


347:デフォルトの名無しさん
07/02/28 02:03:49
>>345
導入前と導入後でソースが見やすくなるわけでもないし機能もかわらんからな
ただTaskとSwingWorkerは統一したほうがいいよな

348:デフォルトの名無しさん
07/02/28 08:22:12
> button.setAction(actionMap.get("onClick"));
とかSwing信者から見ると気持ち悪いんだけど。
サーバサイドで慣らされてる人は平気なのかな。

349:デフォルトの名無しさん
07/02/28 11:19:14
いやー平気じゃないと思うぞ
ロジック部分の呼び出しとかなら祖結合でいいけど
各種イベントでコンポーネントの状態を変更しないといけない密結合ではクラス分離して書くということはまずできないし

あのフレームワークの存在意義がわからないとはずっと前からいわれてきたし
startupとかはまぁイベントディスパッチスレッドを意識させないという意味があるのだろうけど
イベントディスパッチスレッドを意識してないと並列動作できないしな

350:デフォルトの名無しさん
07/02/28 13:10:09
そうだね。Webのフレームワークみたいな役割を期待するとすると、
ロジックとGUIの分離、つまり同じアプリでSwing実装とSWT実装と
Struts実装をやりたい場合とか、そういうときに使えるものを
期待してしまう。

351:デフォルトの名無しさん
07/03/02 23:00:01
JDK6のSwingのWindows LaF (Vista)で、JTableのヘッダの高さが通常の2倍ぐらいあるのですが、
これはなんとかならんもんでしょうか。

352:デフォルトの名無しさん
07/03/03 00:24:29
通常の3倍じゃなくて良かったな

353:デフォルトの名無しさん
07/03/08 16:43:26
>>352
オレが思いついてもあえて書かなかったことを・・・

354:デフォルトの名無しさん
07/03/09 12:48:50
機体性能が3倍あるわけじゃないんだぜ?

355:デフォルトの名無しさん
07/03/13 10:35:26
ザク、、、いや、何でもない。

356:デフォルトの名無しさん
07/03/15 21:09:44
SE6になってjavax.swing.undoのドキュメントの一部が丁寧になって少しましになってる。

357:デフォルトの名無しさん
07/03/15 23:02:04
JDK6の日本語マニュアルでたのか?

358:デフォルトの名無しさん
07/03/15 23:15:15
作業中の物ならここに。
URLリンク(jdk-api-ja.dev.java.net)

359:デフォルトの名無しさん
07/03/15 23:54:52
URLリンク(java.sun.com)

360:デフォルトの名無しさん
07/03/16 03:24:01
>>359
新機能とかまず概要の日本語がないってことはいまだ未完成ってことね

361:デフォルトの名無しさん
07/03/19 15:45:38
既出かもしれないけど、こんなもの見つけた。
URLリンク(journal.mycom.co.jp)

手動でリスナ書く手間から開放されるというのはかなり幸せかも。

362:デフォルトの名無しさん
07/03/19 17:02:51
そいつを使うと、コード書かなくてよくなる
URLリンク(www.netbeans.org)

363:デフォルトの名無しさん
07/03/19 17:12:57
>>361
Beans Binding って Cocoa Binding みたいなもの?

364:デフォルトの名無しさん
07/03/19 17:19:38
似てるね。

365:デフォルトの名無しさん
07/04/02 17:44:32
YAGI3

366:デフォルトの名無しさん
07/04/03 21:26:15
apolloってJWSを食ってしまいそうだな

367:デフォルトの名無しさん
07/04/03 22:16:28
それはないだろ。
食われるほどのJWSの裾野はないし、今JWSでやってるものをおきかえれるほどの力はFlashにはない。

368:デフォルトの名無しさん
07/04/04 01:19:08
>>366
むしろJavaアプリの中でApolloのWeb連携機能が使いたいなぁ

369:デフォルトの名無しさん
07/04/07 16:00:15
SwingでGoogleCalendarみたいなUIをつくることって出来るんでしょうか??
ためしに作ってみようかと思ったんですが、Swingに余り詳しくないのでそもそもどういう風に作れば良いのかわからず悩み中です。

370:デフォルトの名無しさん
07/04/07 16:14:18
ブラウザで出来る程度のことはすべて可能
Swingに詳しいかどうかってのも関係ないな


371:デフォルトの名無しさん
07/04/07 17:22:07
JComboBoxについて質問です。

項目によって、色・フォント・背景色などを
分けたいのですができますか?
もしできるなら教えてください。
お願いします。

372:デフォルトの名無しさん
07/04/07 18:50:31
JComboBox ListCellRendererでググればやりたいことは見つかると思う

373:369
07/04/07 20:02:11
>>370
どうもです。GUIはweb系しか作ったことがなかったんで悩んでました。
HTMLに慣れた身にはSwingは面倒くさくてなかなか作る気が起きませんね・・・。
カレンダー部分は線を描画して書くことになるのかなぁ。

374:デフォルトの名無しさん
07/04/07 20:53:24
全部自前で描画してもいいし
適当にラベルをならべる程度でもいいし
お好きなように

375:371
07/04/07 21:37:25
>>372
有難うございました。
やりたい事ができました。

376:デフォルトの名無しさん
07/04/08 00:33:25
>>373
やる気がなければ何もできませんな
何で作るのよ

377:デフォルトの名無しさん
07/04/08 00:38:41
本当はWEBアプリのほうが面倒なんだけどな
ダイナミックに動かすにはイベントは別言語を使わなければならないし、
環境依存性が高い

そして通信部分も再読み込みとか2度押し防止とかいろいろと考慮する必要有、と

378:デフォルトの名無しさん
07/04/08 02:30:49
> 373
JLabelにHTML貼り付けでOK

379:デフォルトの名無しさん
07/04/08 23:38:16
>>378
せめてJEditorPaneだと思ったらw

380:デフォルトの名無しさん
07/04/10 22:05:12
swingで作ったGUIアプリを
常に前面に表示させたいんですが、できますか?
もしできるなら教えてください。
お願いします。

381:デフォルトの名無しさん
07/04/10 22:11:17
>>380
1.5 以降なら java.awt.Window#setAlwaysOnTop(boolean) を使う。

それ以前なら標準では無理。
例えば Windows なら JNI経由で java.awt.Window の HWND 得て、SetWindowPos すればできるけど。

382:デフォルトの名無しさん
07/04/10 22:20:42
>>380
できました。
素早い回答ありがとうございました。

383:382
07/04/10 22:21:45
すいません、僕は>>380です。
>>381さん有難うございました。

384:デフォルトの名無しさん
07/04/13 00:02:44
すべてのコンポーネントのセットをJPanelをExtendsしたオリジナルなコンポーネントにしておいて
JFrameのレイアウトに置いていく作りにしてるんだけど、これでイケテル?


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