トップページ⇒tech
1001コメント320KB

Java低速GUI Swing 5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/18(水) 11:50:09
ハードウェアの高スペック化、JavaVMのホットスポットの高速化に伴い、
パフォーマンスの問題は徐々にですが改善されつつあります。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。

Java低速GUI Swing 4 (前スレ)
http://pc8.2ch.net/test/read.cgi/tech/1140533866/
Java低速GUI Swing 3
http://pc8.2ch.net/test/read.cgi/tech/1121700954/
Java低速GUI Swing 2
http://pc8.2ch.net/test/read.cgi/tech/1095398949/
Java低速GUI Swing
http://pc5.2ch.net/test/read.cgi/tech/1062271447/l50
0011デフォルトの名無しさん2006/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を作りたいですけど、↑じゃうまくいかないので
他に方法があれば教えていただければと…
0012デフォルトの名無しさん2006/10/19(木) 20:21:33
言語仕様から学び直せ。
sは2回宣言されています。
0013デフォルトの名無しさん2006/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();
0014デフォルトの名無しさん2006/10/20(金) 13:55:09
この質問、初心者質問スレで読んだ気がするな。
0015デフォルトの名無しさん2006/10/20(金) 16:20:46
マウス側面の拡張ボタンをJavaで使う方法おしえて。
0016デフォルトの名無しさん2006/10/20(金) 16:34:36
マウスイベントって3つまでしかサポートしてなかったような
5.0からはマウスのボタンの数は取得できるがそれを使ってどうのこうのはできないはず
0017デフォルトの名無しさん2006/10/20(金) 17:43:40
返答どうもです。

やっぱ無理か…。
5ボタンマウスって、あんまり使われてないのかなあ。
0018デフォルトの名無しさん2006/10/20(金) 17:50:42
ほとんどのアプリは3ボタンだし、ただのショートカットがほとんど

ショートカット以外の使われ方してるアプリってどれだけある?
0019デフォルトの名無しさん2006/10/20(金) 18:02:27
ボタン5個も何に使うの?
0020デフォルトの名無しさん2006/10/20(金) 19:06:46
ブラウザやファイラで「進む」・「戻る」に便利に使ってるよ。
でも5ボタン必須のアプリなんて、ちょっと思い当たらない。

ホイールでスクロールみたいに、あれば便利って程度かな。
0021デフォルトの名無しさん2006/10/20(金) 19:28:11
ホイールは定着したけど、5ボタンは流行らなかったね。
0022デフォルトの名無しさん2006/10/20(金) 19:37:48
まわりの奴におしえても、使わないんだよね。ホイールは使うようになったけど。
0023デフォルトの名無しさん2006/10/20(金) 19:44:55
3ボタンでも真中は特別使い道がない。
0024デフォルトの名無しさん2006/10/20(金) 20:59:58
進む戻るだけは俺も使ってるけどあれはショートカット効果だけだからなぁ
4以上のボタンを使ってるわけではないだろう
0025デフォルトの名無しさん2006/10/20(金) 22:03:08
>>23
ネトゲではよく使うお
0026デフォルトの名無しさん2006/10/20(金) 22:38:17
>>23
自動スクロールに対応してればちょくちょく使うよ。
あとFirefoxだとタブを簡単に閉じられるしね。
0027デフォルトの名無しさん2006/10/20(金) 22:56:14
Firefoxだと通常のクリックが真ん中ボタンといえるくらいだ
考えて左クリックを使う
0028デフォルトの名無しさん2006/10/20(金) 22:57:34
そういやそうだね
いつも新しいタブで開いてるや
0029デフォルトの名無しさん2006/10/20(金) 23:09:59
>>25
5ボタンも、そんなところでしょ。
0030デフォルトの名無しさん2006/10/20(金) 23:33:46
7ボタンとチルトホイールはどうだろう?
0031デフォルトの名無しさん2006/10/21(土) 00:12:53
ところで、ゲームパッドに標準で対応してほしい。あとタブレット
0032デフォルトの名無しさん2006/10/21(土) 00:16:50
ゲームパッドってどんなOSにも標準で対応してたっけ?
積集合OSであるJavaにはそういう限界があるよ。
タスクトレイやブラウザとかがJava6に出てきただけでも感慨深い。
0033デフォルトの名無しさん2006/10/21(土) 00:42:22
対応していないメジャーOSはないはずだし
一部だけで動く実装でも1.4以降は投入されてるから理由にならん
0034デフォルトの名無しさん2006/10/21(土) 00:44:21
MSXのようにパッド0番目はキーボードとかいう実装にしておけば
キーボードとパッド両対応作る手間がないし未対応OSであっても問題ないんじゃね?
0035デフォルトの名無しさん2006/10/21(土) 05:42:06
あ、1chip MSXの入金忘れてた
0036デフォルトの名無しさん2006/10/21(土) 23:38:55
ちょ、全然スレ違いw

5ボタンなんてケチくさいこと言わず、101個ボタンつけたらどうよ?
で、ボタン押すと文字が入力されるようにしておくの。
そしたらキーボード要らないじゃん。
0037デフォルトの名無しさん2006/10/21(土) 23:46:22
>>36
それ、キーボードじゃん!!!

あー、食いついちゃった。orz
0038デフォルトの名無しさん2006/10/22(日) 12:46:45
Choiceで選択してButtonで実行てどうやるんですか?
0039デフォルトの名無しさん2006/10/22(日) 14:03:03
ChoiceとButtonを用意してButtonのActionListenerに処理を実装すればいい。
0040デフォルトの名無しさん2006/10/22(日) 14:25:35
Choiceってのはなんだ?
0041デフォルトの名無しさん2006/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 ) {

}
}

処理の部分でどれをチョイスしたか分かるようにしたいんですが
0042デフォルトの名無しさん2006/10/22(日) 16:02:55
>>41
ButtonGroupを利用しなされ
ButtonGroupに、JRadioButtonをaddしておき、
actionが起こったときに、ButtonGroupからgetSelection()で選択されたものを取ればOK
0043デフォルトの名無しさん2006/10/25(水) 06:13:08
AWTは1コンポーネント=1ウインドウだからシステムリソースを食いまる問題って解決されたの?
0044デフォルトの名無しさん2006/10/25(水) 07:04:53
誰も使ってないのに何が問題なの?









0045デフォルトの名無しさん2006/10/25(水) 12:41:50
AWTはスレ違い
0046デフォルトの名無しさん2006/10/26(木) 05:13:03
>>43
AWTコンポーネント自体使うことが推奨されてないから解決されることはない。
0047デフォルトの名無しさん2006/10/26(木) 08:24:56
SWYスレっていつの間にかなくなってたんだね
0048デフォルトの名無しさん2006/10/26(木) 12:39:25
>>46 誰が推奨してないの?
0049デフォルトの名無しさん2006/10/26(木) 18:39:53
おれおれ
0050デフォルトの名無しさん2006/10/27(金) 01:50:11
ゴスリンから大切なお知らせとお願いです。
古い年式のウィジェットを探しています。
ネイティブにピアを生成するタイプで、ご覧のバージョンの JDK の引き取りや、アップデートを行っています。
対象 JDK は万一の場合、訴訟事故に至るおそれがありますので、直ちに使用を中止していただき、
至急、ご連絡をお願い申し上げます。

      ____  . .| |
    /\二___\.. | |
    |\/‖   '''.|  | |    DUKE
    | |  ‖┌┐ .|  | |     ↓
    | |  ‖└┘ .|┌|=.|ヽ_ ゝノ゛
    | |  ‖    .|二| |回_  ●>
    | |  ‖    .|└|=.|/    〆
    |ミ.|  ‖    .|  | |
 |\ノ.|ミ.|  ‖    .|  | |
 |_》 | |  ‖    .|  | |
    \|_‖____.|  | |
0051デフォルトの名無しさん2006/10/30(月) 08:14:49
旧い入門書だとSwingすらサンプルがねぇw

で、SWTスレどしたのよ。
0052デフォルトの名無しさん2006/10/30(月) 19:57:31
こっちの方が良かったかな…。

Java SE 6ではActionにSELECTED_KEY、DISPLAYED_MNEMONIC_INDEX_KEY等が追加されたんだね。
今まで何でないのか不思議だった。AbstractButtonにもHideActionTextプロパティが追加されてる。
0053デフォルトの名無しさん2006/11/04(土) 00:43:50
質問なのですが
ttp://www.gremlin.jp/yada/java_JTable/SimpleRowHeader.htm

↑のアプレットみたいに、ウィンドウサイズを変えたら、そのウィンドウと同じサイズにJTable
をリサイズするにはどうしたらいいのでしょうか?
ComponentListenerを使うのでしょうか?
0054デフォルトの名無しさん2006/11/04(土) 01:04:21
>>53
よくわかんないけど、普通に貼り付ければこうなるんじゃないんだっけ?
BorderLayoutでCenterに配置するとか。
0055532006/11/04(土) 01:41:03
普通に貼り付けただけだど、JTableがリサイズされないで、JFrameの大きさだけが
変わってしまいます…

ウィンドウサイズと同じサイズにリサイズさせたいのですが、そのやり方わからなくて…
0056デフォルトの名無しさん2006/11/04(土) 01:45:56
>>55
レイアウトマネージャをどう使っているか次第。
NullLayoutなどだと、座標で配置されているから、ロジック書かないとリサイズはされない。

>>54が書いているように、BorderLayoutでCenterに配置するのが普通。
0057532006/11/04(土) 10:32:33
>>54,56さん

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

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

ありがとうございました。
0058デフォルトの名無しさん2006/11/04(土) 11:49:30
NetBeans使うというのも手
0059デフォルトの名無しさん2006/11/04(土) 12:58:25
ネット上のxxxx.jpgなどの画像ファイルをGUIに表示させることって出来ますか?
0060デフォルトの名無しさん2006/11/04(土) 13:02:45
URLクラスからopenStreamすればいいよ
0061デフォルトの名無しさん2006/11/04(土) 13:05:08
とおもったが別にImageIO.readはURLをそのまま受け取れたなw
0062デフォルトの名無しさん2006/11/04(土) 14:44:06
表示させるだけでいいなら、JLabelでHTML書けばOK。
0063デフォルトの名無しさん2006/11/04(土) 14:49:38
JavaのHTMLってどこまで準拠してんの?
0064デフォルトの名無しさん2006/11/04(土) 15:11:41
あんまり知らないけど、信用してはいけないことは知ってる。
実装がかなり前に止まっているとか。
0065デフォルトの名無しさん2006/11/04(土) 16:26:11
Swingアプリで、「HTMLのテーブルみたく表示したいんだけど。」
と聞かれて、面倒くさいから、「setTextでHTMLをセットするとOK」と答えた。

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

ほとんど、Webアプリ

そのうち、IEだと、こう表示されるのが、うまくいかないとか言われそう。
0066デフォルトの名無しさん2006/11/04(土) 16:38:25
JEditorPane#setText()したものを、HTML表示にすることってできます?
バージョン情報を表示するに、書式をいろいろ変更して使いたかったんですけど、
なんかHTMLがそのまま表示されます。
ファイルにしてsetPage()使わないとダメなのかな。。
仕方ないので、今はJTextPaneを使って、ちまちま書式設定して出してます。
0067デフォルトの名無しさん2006/11/04(土) 17:00:17
>>43
つttp://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/awt/1.3/designspec/lightweights.html
0068デフォルトの名無しさん2006/11/04(土) 17:05:30
>>66
自己レス。JEditorPane#setContentType("text/html")を使えばいいのね。
0069デフォルトの名無しさん2006/11/04(土) 22:17:17
質問です。
JTableの1行目のcolumnを1列目に縦に表示するには、どうすればよいのでしょうか?
0070デフォルトの名無しさん2006/11/04(土) 22:59:45
>>69
意味不明。
0071692006/11/04(土) 23:09:15
>>70
すいません。
エクセルみたいに行番号(1,2,3..)列名(A,B,C...)のような表示をつくりたいのですが…
0072デフォルトの名無しさん2006/11/04(土) 23:10:18
>>69と>>71の内容につながりが見当たらない件。
0073デフォルトの名無しさん2006/11/04(土) 23:18:16
列ヘッダ(A,B,C...)は、普通にJTableにある機能でできる。
分からなければ、JTable自体を基礎から勉強すべし
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

行ヘッダ(1,2,3...)は、JTableにはそんな機能ないから、それっぽく見せる実装をしなければならない。
>>5にある、為政氏のサンプルにある。
http://www.crionics.com/products/opensource/faq/swing_ex/JTableExamples1.html
0074692006/11/04(土) 23:30:21
>>73

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

ありがとうございました。
0075デフォルトの名無しさん2006/11/05(日) 22:21:18
なんか質問な〜い?ただいまSwing勉強中。
0076デフォルトの名無しさん2006/11/06(月) 00:33:11
>>75
システムフックの方法が知りたいけどSwingの話題じゃないので黙っておく
0077デフォルトの名無しさん2006/11/06(月) 00:44:13
質問
フォーカストラバーサルサイクルルートについて詳しく
0078デフォルトの名無しさん2006/11/06(月) 09:04:51
>>77
初耳だ。ちらっと見た感じだと、
TABを押した時なんかの、
次にフォーカスを与えるコンポーネントを探すクラスかな?
今まで使う場面が出たことがないけど、
FocusTraversalPolicyを継承してクラスを作れば、
コンポーネントの値とかでも順序を付けられたりするみたい。
質問が具体的なら、もう少し調べてもいいが。
0079デフォルトの名無しさん2006/11/06(月) 13:27:23
JTableの中のセルにJPanelいれたときとかこれいじらんとだめだよな
0080デフォルトの名無しさん2006/11/06(月) 19:38:24
>>78
具体的じゃないけど便乗で
5.0 -> 6.0 でフォーカス関係で変わった事ってまとめてるとこないかな?
5じゃ動いてたコードが6で動かなくなっちゃったから・・・
0081デフォルトの名無しさん2006/11/06(月) 19:54:29
>>79
なるほど。

>>80
ごめんなさい、わかりません。
思ったとおりにリスナーが呼ばれないとか、そんな感じですか?
0082デフォルトの名無しさん2006/11/06(月) 22:00:45
>>80
まじか
そのへんまではまだ詳しく調べてないけど困るな
正式版が出たらチェックしようという状態だったがSwingに大幅に手が入ってるのなら別だ
Sunなにやってるんだよ〜
1秒でわかるSwingのバグつきを夏にリリースしてたし

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

なんか印刷大変そうだなぁ。。。
0084デフォルトの名無しさん2006/11/06(月) 22:37:08
>>83
それはどのVMで動かした話?
0085デフォルトの名無しさん2006/11/06(月) 22:50:17
>>84
5.0での出来事でした。下の記事を参考にしました。
ttps://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jps/spec/jpsOverview.fm4.html#998638
0086デフォルトの名無しさん2006/11/06(月) 23:20:31
質問です。
JLabel→JLabelのようにJLabelからJLabelへ矢印を表示するには
どうすればよいのでしょうか?
0087デフォルトの名無しさん2006/11/06(月) 23:26:22
>>86
質問の意味がわかりませんが。。。
とりあえず「→」を書きたいなら、
真ん中に「→」を書いたJLabelを置いてみれば?矢印の画像でもいいけど。
もし矢印が長かったり、角度が中途半端なのであれば、drawLineで自分で書く。
0088デフォルトの名無しさん2006/11/06(月) 23:41:13
>>85
updateナンボかが問題
0089862006/11/06(月) 23:44:14
>>87さん
配置してあるJLabelどうしを矢印で結んだ図を表示させたかったのですが
そういった場合は自分で書くしかないんでしょうか?
JLabelの位置を計算して、矢印を表示することはできないんでしょうか?
よろしくおねがいします。
0090デフォルトの名無しさん2006/11/07(火) 00:13:12
>>83
印刷APIはサービスが追加されたけど、今までのも動くよ
ただし、日本語問題が解決されたのは今年の春くらいのバージョンから
1.5年ほど日本語バグは放置されていた

そしてそのバグが直ったと思ったらSwingにバグがついたというわけだ
正確にはWindows版のLAFだけだからすべてではないがWindowsって一番ユーザー多いから影響もでかい、と
NetBeans立ち上げればおかしいのはすぐにわかるはずなのにそれに気がつかなかったSunちね
0091デフォルトの名無しさん2006/11/07(火) 01:12:43
>>89
なんだかんだとコンポーネントが追加されてるJPanel上の特定のJLabel間に線引きたいって事?

それならJLabelをaddするときに線を引きたいJLabelだけのコレクションを別に持っておいて自分で矢印を描画しないとだめだね。
常に次ぎが右横とか規則があるならJLabel継承した横に矢印付け足す描画をするJLabelWithArrowとかでもいいのだろうけど。
0092デフォルトの名無しさん2006/11/07(火) 02:24:57
>>89
噂では、JLabelなんか使わないで、全部自分で描いた方がラクだって話もあるよ。
0093デフォルトの名無しさん2006/11/07(火) 04:40:58
SWT だとなんかそういう軽量コンポーネントがある。
0094デフォルトの名無しさん2006/11/07(火) 07:48:31
>>86
グラフ書きたいなら、JGraphとかSWTのdraw2dとか使った方が楽だよ。
ttp://www.jgraph.com/
ttp://www13.plala.or.jp/observe/#draw2d
グラフって言っても、XYグラフのグラフじゃなくてグラフ理論のグラフだからね。
0095デフォルトの名無しさん2006/11/07(火) 09:35:29
>>94
JGraphなんてものがあるのか。知らなかった。
LGPLの他に商用ライセンスがあえてあるってことは、商用で使う場合はお金かかる?
無知なので質問ですが、SwingとSWTって混ぜて使ったりするの?
水と油だと思っているのですが。。。
0096デフォルトの名無しさん2006/11/07(火) 12:30:07
>>95
JGraphは商用利用も含めてフリー。LGPLだし。
一方JGraph Layout Pro というのがあって、JGraphの高機能版。こっちは有料。
JGraphだとノードの自動レイアウトが出来なかったりと、いろいろ不便。
他にもこういうのもあるけどね。
ttp://openjgraph.sourceforge.net/
こっちならレイアウトできたり、グラフに制約(巡回不可とか)かけられたりできる。
ただ、開発が4年以上止まっているけど。
0097デフォルトの名無しさん2006/11/07(火) 12:35:17
自前で描画しとけ
0098862006/11/07(火) 15:37:54
>>91さん
規則性はないので、その際は手作業なんですね…
ありがとうございました。

>>92さん
それは
ttp://homepage1.nifty.com/algafield/JavaGUIFaq19j.html
このページにあるQ8.6にも、書いてある通り描く方がいいてことでしょうか?

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

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

皆さんありがとうございました。
Java2DかJava3Dで描画しなきゃいけないかもって思ってました。それ以外の方法もあるのですね。
0099962006/11/07(火) 16:09:10
JGraph使うのなら、標準の機能ではレイアウトできないことを覚悟しておかないと
後でハマるよ。
ここでいうレイアウト機能ってのは、適当にノード並べてエッジ引いた後で、
ボタン1クリックでノードやエッジの位置を設定し直してくれる機能。
俺の場合、SWTのdraw2dで提供されてるレイアウト機能だけ使って
強引に何とかしたけど。
0100デフォルトの名無しさん2006/11/07(火) 16:52:14
グラフ/ネットワーク構造の描画コンポーネントが欲しいんならJGraph以外にもいくつかある
ttp://jung.sourceforge.net/index.html
ttp://www.nanoworks.nl/
デモとかサンプル見て好きなの使ってくれ.
0101962006/11/07(火) 17:12:49
>>100
いつの間にか、JUNGが使えるライブラリになってるね。
2年前にこの手のライブラリについて調べてたんだけど、
当時のJUNGはグラフの編集機能がなくて、使うのをあきらめた覚えがある。
0102デフォルトの名無しさん2006/11/07(火) 17:29:39
>>101
4年前に全部自前でやった事がある。
あの頃と比べたらオープンソースなライブラリがよりどり緑でありがたい。
0103862006/11/07(火) 18:31:17
>>99さん
ご忠告ありがとうございます。
0104デフォルトの名無しさん2006/11/07(火) 23:24:14
>>98
別にSwingでもNetbeansには普通にそういうモデリング描画用
ライブラリはあるわけだが。Graph Libraryというのがね。
0105デフォルトの名無しさん2006/11/08(水) 00:36:43
Graph Libraryは、NetBeansのほかのライブラリに依存してるから、NetBeansの外で使うのはきついよ。
NetBeansプラットフォームで作っちゃえばいいんだけど。
0106デフォルトの名無しさん2006/11/08(水) 00:37:44
Javaがどんなに疎結合を頑張っても、IDEがそれを否定するのな
0107デフォルトの名無しさん2006/11/08(水) 01:17:29
疎結合っていうのは、業務アプリの各画面を独立させましょうという程度でしかないからな。
GUIのひとつの画面は、どうしても密結合になる。
0108デフォルトの名無しさん2006/11/10(金) 01:04:36
jarファイルを実行したとき、そのjarファイルが置かれているディレクトリの
パスを取得するにはどうしたらよいでしょうか?
0109デフォルトの名無しさん2006/11/10(金) 01:32:48
>>108
クラスパスルートがたくさんある場合はどう解釈するの?
0110デフォルトの名無しさん2006/11/10(金) 01:42:27
>>108
実行時のディレクトリを知りたいのかな?
String path;
path = new File(".").getAbsolutePath();
とか。
■ このスレッドは過去ログ倉庫に格納されています