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

Java標準低速GUI 6 AWT/Swing

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/09/26(水) 20:51:18
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。
Java低速GUI Swing 5 (前スレ)
http://pc11.2ch.net/test/read.cgi/tech/1161139809/
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
0268デフォルトの名無しさん2007/11/09(金) 12:14:15
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JLabel("本文"));
panel.add(new JCheckBox("次からこのメッセージを表示しない"), BorderLayout.SOUTH);
JOptionPane.showMessageDialog(parent, panel);
0269デフォルトの名無しさん2007/11/09(金) 12:35:18
>>268
おー、早いレスありがと〜。
0270デフォルトの名無しさん2007/11/09(金) 23:36:58

いまからSwingアプリケーションつくるからなんかお題くれ
条件はネット接続しないこと
 
開発環境はJDK6u3、NetBeans6.0
 
0271デフォルトの名無しさん2007/11/09(金) 23:44:52
>>270
Jazzの自動作曲。高品質の楽譜の表示と印刷。
02722702007/11/09(金) 23:45:27
>>271
勘弁してくれ
0273デフォルトの名無しさん2007/11/09(金) 23:50:42
swing jazzじゃなくてもいいんだが…

swingはあくまでもguiのフレームワークに過ぎないから、
swingでアプリケーションを作るって言っても範囲が広すぎるんじゃないかな?
guiでアプリ作るけど何か無いかなって言うようなものだから、もう少し幅を狭めないと。
0274デフォルトの名無しさん2007/11/09(金) 23:51:07
>>270
ドロー系お絵書きソフト、SVGでの読み書き可能なものを、OSSで。
0275デフォルトの名無しさん2007/11/09(金) 23:51:49
>>271
少しジャンルは違うがヤマハの「初音みく」とか言うの良さそうじゃないか?
0276デフォルトの名無しさん2007/11/09(金) 23:51:56
じゃあ懐かしのブラウザ HotJava を今の技術で作って
02772702007/11/09(金) 23:54:59
SVGとか仕様しらねー
HotJavaとか初めて聞いたし

Java暦1年半ですがなにか?
0278デフォルトの名無しさん2007/11/10(土) 00:00:39
クリップボードアプリケーションとか。
・・・Swing関係ないかw
0279デフォルトの名無しさん2007/11/10(土) 00:01:59
>>276
JEditorPaneで原型はすぐに作れるね。

>>277
ttp://java.sun.com/products/archive/hotjava/index.html

>>275
もちろん既にみくみくしてるぜ。
付属のVSTiプラグインをJavaから使おうとかもしているけど中々時間が取れない。
0280デフォルトの名無しさん2007/11/10(土) 00:02:19
>>274
Javaじゃないが、それの本命はinkspaceだろうな。
0281デフォルトの名無しさん2007/11/10(土) 00:04:38
swingの勉強がてらに作るならお絵描きアプリくらいが適当なのかも
0282デフォルトの名無しさん2007/11/10(土) 00:09:38
ローカルファイル閲覧専用とかはアレだし、ブラウザはネット接続って点で270の要求を満たしてないかも。
何かオンリーワンな機能をつけたドローイングかペインティングアプリケーションとかいいんじゃないか?
0283デフォルトの名無しさん2007/11/10(土) 00:16:53
linerみたいな画像ビューア

俺が作ってるのもそれだけどw
0284デフォルトの名無しさん2007/11/10(土) 01:37:42
作りたいの作ればとしか・・・
0285デフォルトの名無しさん2007/11/10(土) 01:38:47
PDFの背景を初音ミクにかえるアプリつくるわ
0286デフォルトの名無しさん2007/11/10(土) 02:27:50
>>285
Swingと関係なくないか?

あとPDFオープンするのに環境依存コード書くはめになるのもちょっと嫌かな
0287デフォルトの名無しさん2007/11/10(土) 02:31:13
まあ、きもちいいネタだ。
0288デフォルトの名無しさん2007/11/10(土) 03:03:23
はやくu4こねーかなぁ
JFileChooserおそくてかなわんわ
0289デフォルトの名無しさん2007/11/10(土) 03:56:17
>>288
だな。死ぬほど遅い。いくつかlazyになるように書き直した。
0290デフォルトの名無しさん2007/11/10(土) 10:20:21
u4 で直ることになってるの?
0291デフォルトの名無しさん2007/11/10(土) 12:52:45
まだin progressの状態。
0292デフォルトの名無しさん2007/11/10(土) 13:47:36
今まで、エディタとプロンプトでしこしこがんばってきたんだけど
金もできたので聞きたいとおもう。GUIつくるだけなら、JBuilderっていい?
無料版はつかったことあるけど、有料版は良いの?
0293デフォルトの名無しさん2007/11/10(土) 13:59:21
今のJBuilderは昔とぜんぜん違うぞ
SwingベースからEclipseベースになった

少なくとも昔のJBuilderはこつをつかまないと
しらないうちにボーランドのコンポーネント使って汚染されて
他の環境で手軽にコンパイルできなくなるのが欠点だった

あとJBuilderはGUI作成においてNetBeansぬいたことはないよ

GUI使う、使わない以前に開発効率考えるとIDE使わないのは論外だと思う
0294デフォルトの名無しさん2007/11/10(土) 14:00:46
>>292
NetBeansでいいんじゃね?
0295デフォルトの名無しさん2007/11/10(土) 14:12:00
>>293-294 thx
NetBeansの方が上なんだ。じゃあそうするよ。

IDE使わないと論外か。。じゃあ、買ってみるよ。

ありがとう。
0296デフォルトの名無しさん2007/11/10(土) 14:37:01
NetBeansは無料のIDEだぞ
0297デフォルトの名無しさん2007/11/10(土) 15:19:43
最近はOSしか買わなくなったなぁ。
0298デフォルトの名無しさん2007/11/10(土) 17:06:09
>>297
まだUbuntu使ってないの?
0299デフォルトの名無しさん2007/11/10(土) 17:27:59
まだUbuntu使ってるの?
0300デフォルトの名無しさん2007/11/10(土) 17:35:40
もうエディタと make でシコシコするのは時代遅れですかそうですか
でも V2C はIDE使ってないらしいね
0301デフォルトの名無しさん2007/11/10(土) 18:02:48
時代遅れも何もそんな時代はあった事がない
0302デフォルトの名無しさん2007/11/10(土) 18:21:57
ツール=IDEでポトペタできて楽ちん
ソフトウェア=IDEがGUI部を隠蔽しててわずらわしい
規模によりけりじゃないかなぁ。
0303デフォルトの名無しさん2007/11/10(土) 18:32:02
IDEはぽとぺたというよりコーディングが楽になるほうがおおきいかと
まぁ、groupLayoutは自前でコードかくきにはならないけど
0304デフォルトの名無しさん2007/11/10(土) 19:39:51
いきなりですまないのだが、JLabelやJButtonを縦書きにする方法ってある?
横長じゃなくて縦長のボタンやラベルを使いたいのだけど。
0305デフォルトの名無しさん2007/11/10(土) 20:43:28
new JLabel("<html>縦<br>書<br>き<br>ラ<br>ベ<br>ル");
new JButton("<html>縦<br>書<br>き<br>ボ<br>タ<br>ン");
0306デフォルトの名無しさん2007/11/10(土) 20:51:00
>>303
そうだよね。補完とかリファクタリングとか使用状況検索とか便利だよね。
GroupLayoutは最初は便利だと思ったけど、弄ってるといきなり位置が
すっ飛んだりして、いまいち使いづらい。よく出来てるとは思うんだけど。
エディタをもっと分かりやすくすれば良さそうだけど、どうすればいいのやら。
最近は、従来のものを組み合わせた方が思ったようにできていいなと思ってる。

>>304
その発想はなかったw
0307デフォルトの名無しさん2007/11/10(土) 20:52:04
>>305
その発想もなかったw
0308デフォルトの名無しさん2007/11/12(月) 14:58:06
90度回転させて縦にできるといいんだけどな
0309デフォルトの名無しさん2007/11/12(月) 17:34:14
SwingのL&Fでかっこいいのないかなぁ。
国外のL&Fを今日一つためしてみたんだが、ダブルバイトが全滅。
ttp://regis.risp.pl/
まあ、外観に変化つけるときってフォントいじるから当然かな。

L&Fを自分でこさえるのは手間かかりすぎてそこまで時間とれないし、
MetalのOceanで負けとくのが今のとこ勝ちなのか。orz
0310デフォルトの名無しさん2007/11/12(月) 17:46:49
ニンバスニンニン
0311デフォルトの名無しさん2007/11/12(月) 21:05:59
>>310
おおっ!
なんかすごそうだけど、まださっぱりわからん。
Java SE 6 Update N Early Access Programてのを落としてくればいいのかな。
これそのうちJDKに正式採用されるのかしら?
0312デフォルトの名無しさん2007/11/12(月) 21:11:42
Synthって流行ってないのかね?
0313デフォルトの名無しさん2007/11/12(月) 21:18:14
あれは結局全部自分で定義しなきゃいかんからLFそのものを作りたい人向けとちがうの?
0314デフォルトの名無しさん2007/11/12(月) 21:23:09
そうだけど、ホームページの壁紙やボタン、仕切り線みたいな感じで素材化されてないのかなと。
Javaアプリケーションが普及してないってことか。
0315デフォルトの名無しさん2007/11/12(月) 21:39:08
画像ファイルはりつけたボタンになってしまってもいいの?
アイコンはともかくボタン全体が画像で作られているのはどうも。
融通効かないし。

ボタンが数個しかないアプリとか、ゲームとかならそういうのも良いかと思うけど。
0316デフォルトの名無しさん2007/11/12(月) 22:45:12
>>308
作ってみた

public class VerticalJButton extends JComponent{
private JButton button=new JButton(){
public void repaint(long tm,int x,int y,int width,int height){
VerticalJButton.this.repaint(tm,y,1-x,height,width);}};
public VerticalJButton(String text){
add(button);button.setText(text);
enableEvents(AWTEvent.MOUSE_EVENT_MASK|AWTEvent.MOUSE_MOTION_EVENT_MASK);}
public Dimension getPreferredSize(){
Dimension d=button.getPreferredSize();
return new Dimension(d.height,d.width);}
public void doLayout(){
button.setBounds(0,1-getWidth(),getHeight(),getWidth());}
protected void paintChildren(Graphics g){
Graphics2D g2=(Graphics2D) g.create();
g2.rotate(Math.PI/2);g2.translate(button.getX(),button.getY());
button.paint(g2);g2.dispose();}
protected void processMouseEvent(MouseEvent e){
e=new MouseEvent(button,e.getID(),e.getWhen(),e.getModifiers(),e.getY()-button.getX(),-e.getX()-button.getY(),e.getClickCount(),e.isPopupTrigger(),e.getButton());
button.dispatchEvent(e);}
protected void processMouseMotionEvent(MouseEvent e){
e=new MouseEvent(button,e.getID(),e.getWhen(),e.getModifiers(),e.getY()-button.getX(),-e.getX()-button.getY(),e.getClickCount(),e.isPopupTrigger(),e.getButton());
button.dispatchEvent(e);}}
0317デフォルトの名無しさん2007/11/12(月) 23:11:37

NetBeans5.5.1使ってるんですが、GUIビルダーで質問です

JFrameフォームでフレームをつくり、
別途JPanelフォームでパネルを複数つくります。

アプリケーション起動後に、パネルを好きなタイミングで、フレームにadd()したいのですが、
SwingLayoutの影響でうまくいきません。

なにか特別なやり方があるのでしょうか?
それともGUIビルダーでは不可能なのでしょうか。
 
0318デフォルトの名無しさん2007/11/12(月) 23:46:28
>>316
g2.dispose();

なんだけど、これはpaintComponent()をオーバーライドしたときとか、
Graphicsオブジェクトを使ったあとはかならず実行したほうが良いの?
今までそうしてこなかったのだけど、APIリファレンスみると、
したほうが良いような感じなんだけど、いまいちわかりにくい日本語。
0319デフォルトの名無しさん2007/11/12(月) 23:54:29
少なくともpaintComponentでは不要じゃないかい?
OverrideしなくてもpaintComponentは呼ばれるだろうし
0320デフォルトの名無しさん2007/11/12(月) 23:56:01
>>318
Graphics#disposeでグラフィックコンテクストを開放しないといけないのは自分でそれを確保したとき。
他人が確保したものを許可無く勝手に開放するのは行儀が悪い行い。
paintComponent()をオーバーライドしたときに開放するとかはどこに書いてあったの?
0321デフォルトの名無しさん2007/11/13(火) 00:08:10
>>320
dispose
public abstract void dispose()このグラフィックスコンテキストを破棄して、使用中のシステムリソースがあればそれを解放します。
Graphics オブジェクトを dispose の呼び出し後に使用することはできません。
Java プログラムが実行されていると、短時間フレーム内で多数の Graphics オブジェクトを作成できます。
ガベージコレクタのファイナライズプロセスも同じシステムリソースを破棄しますが、関連するリソースを手動で解放することが推奨されます。
つまり、長期間に渡って完了まで実行されない可能性があるファイナライズプロセスに依存するよりも、
このメソッドを呼び出してリソースを手動で解放してください。

コンポーネントの paint メソッドと update メソッドに引数として提供される Graphics オブジェクトは、
こうしたメソッドが復帰したときにシステムによって自動的に解放されます。
効率性を確保するには、Graphics オブジェクトがコンポーネントまたはほかの Graphics オブジェクトから直接作成された場合だけ、
そのオブジェクトを使って終了したときに dispose を呼び出すようにプログラミングしなければなりません。
-----------------------------------

ということらしいんだが、dispose()不要のような必要なような、ケースバイケースのような
説明に読めたのよ。スマソ。
03223162007/11/13(火) 00:12:45
>>318
その g2 は g の単なるキャストじゃなくて、 g.create() で生成したものだから。
放っておいても害はないけど、解放するべきなんじゃない?
0323デフォルトの名無しさん2007/11/13(火) 00:15:10
>コンポーネントの paint メソッドと update メソッドに引数として提供される Graphics オブジェクトは、
>こうしたメソッドが復帰したときにシステムによって自動的に解放されます。

Graphics g = createGraphics();
//--->呼び出し
paintComponent(g);
//<---復帰
g.dispose();

こういうことでしょ。きっちり書いてるじゃん。
0324デフォルトの名無しさん2007/11/13(火) 00:17:35
>>322
いやだからさ、おかしいなんていってないよ。
g.dispose()と書かれたソースを今までみなかったのだけど、
開放しといたほうがいいのかななどと思ったの。
0325デフォルトの名無しさん2007/11/13(火) 00:18:32
これってどういう意味?

> Java プログラムが実行されていると、短時間フレーム内で多数の Graphics オブジェクトを作成できます。
0326デフォルトの名無しさん2007/11/13(火) 00:22:01
>>323
paintComponentについては暗黙の了解?
説明としては抜けてる。ソース嫁といわれりゃあっそう。
0327デフォルトの名無しさん2007/11/13(火) 00:34:39
>>326
paintComponentについてはJComponentのドキュメントを読めば理解できるかと。
0328デフォルトの名無しさん2007/11/13(火) 00:36:15
>>321
それ勘違いしてるぞ
ファイナライザとか関係ない
0329デフォルトの名無しさん2007/11/13(火) 00:42:26
何でよ
0330デフォルトの名無しさん2007/11/13(火) 00:43:16
なんでφならいざが?
0331デフォルトの名無しさん2007/11/13(火) 01:08:35
>>310-311
Nimbusはイメージを使わずに、すべてJava2Dで書かれてるから、解像度に依存しないのがいいよね。
0332デフォルトの名無しさん2007/11/13(火) 01:13:28
>>316
動作確認してみた。いいね!
やり方もエレガントだと思う。
アイコンもついてたら完璧かも。
0333デフォルトの名無しさん2007/11/13(火) 01:25:17
>>331
うん。

作ってるアプリが終盤で、外観の体裁ととのえてるとこなんだけど、
今無理してL&Fいじくるより、Nimbusが標準になるまで待ったほうがトクだろうなぁ。
L&Fを自分で作ったりカスタマイズしてももすぐに時代遅れになるしね。
Metalも出てきた当時はけっこうクールに見えたし。
L&Fは服きせかえるみたいに使い捨てていきたい。
0334デフォルトの名無しさん2007/11/13(火) 01:46:39
disposeは後始末
自前でgraphicsを生成した場合必須

ファイナライズの話はFileのIOをcloseしないというのと同じ話

そしてかってに呼び出し側でcloseしたらあかんだろというのと同じ
0335デフォルトの名無しさん2007/11/13(火) 20:01:22
>>325
> Java プログラムが実行されていると、短時間フレーム内で多数の Graphics オブジェクトを作成できます。

いっぱい作成できると、なんとなく、うれしいジャン?
とりあえず、「多数の Graphics オブジェクトを作成する可能性があります」の誤訳に一票
0336デフォルトの名無しさん2007/11/13(火) 20:14:10
久しぶりに覗いたぜ。

invokeLaterはinvokeLater間違えてAWTのSystem Queueに送ったことあるorz
MIDPのGraphicsにdisposeがなくてどうやってメモリ空けようか悩んだことがあるorz

Nimbusのマルチバイト化けは直ったらしいがあれ重くないか?スケーラブルなLaF目指してるんだろうけど・・・。
ただでさえ、未だにjavaは重いという迷信が信じられてるからなぁ。
0337デフォルトの名無しさん2007/11/13(火) 20:18:53
迷信というかJFileChooserは今でもひどくない?
ファイル多いとファイルリストの取得とは別の何かで重くなってる印象が・・
0338デフォルトの名無しさん2007/11/13(火) 22:27:10
>>337
JavaSE6u2からすごいことになった
どうすればあそこまで悪化できるのかと
0339デフォルトの名無しさん2007/11/13(火) 22:52:07
>>338
今はソース見れるんだから自分で調べられるよ
0340デフォルトの名無しさん2007/11/13(火) 23:51:12
今OpenJDKで公開されてるソースと今公式ビルドに使われてるJDKのソースは違うぞ。
jdk6がOpenJDKベースになるのはまだ先。
0341デフォルトの名無しさん2007/11/14(水) 00:16:14
>>339
そういう意味じゃないだろ
0342デフォルトの名無しさん2007/11/14(水) 03:38:43
>>337
今までひどすぎるとまでは感じなかったんだが、そんなにたくさんのファイルリストを
出すという局面に遭遇してないだけだったりする。
100個くらいリストが出ててもなんともないと思うんだが、いくつくらいだとひどいことになるの?
0343デフォルトの名無しさん2007/11/14(水) 07:17:29
なんでファイル列挙系はバグが入りやすいんだろうな。
なんか共通したミスでもあるんだろうか?
0344デフォルトの名無しさん2007/11/14(水) 07:27:12
ネットで調べると、でかい圧縮ファイルがあるとおかしくなるらしいね
0345デフォルトの名無しさん2007/11/14(水) 09:30:48
>>336
7年後サクサク動くニンバスみて、軽いけどもう古いよなこのLaFとかいってるような気がすれ
0346デフォルトの名無しさん2007/11/14(水) 09:32:31
ニンバスかっけぇんだけどさ、どうもスクロールバーが馴染めない…
0347デフォルトの名無しさん2007/11/14(水) 09:47:09
文字はみんな□になってるけどSwingSet2のデモみるかぎり、遅いとは感じないな。Nimbus。
そんでこれいつからリリースされるのかな。
0348デフォルトの名無しさん2007/11/14(水) 12:36:16
>>342
u2以降は1個の表示でもすごい遅い
u1まではさくさく

まぁ遅いといわれたり直ったりエンバグ繰り返してるのがJFileChooserだから・・・
0349デフォルトの名無しさん2007/11/14(水) 16:43:44
JFileChooserはネイティブ頼りなんだっけ?エンバグの発生率は仕方ないと思う。
0350デフォルトの名無しさん2007/11/14(水) 17:18:38
デスクトップのzipをどけると改善するみたい。開発で頻繁にテストする人はzipを
一時的にどけておくといいかも。
0351デフォルトの名無しさん2007/11/14(水) 19:29:57
つーことは、JFileChooserはファイルの中身を調べるようなことまでやってるのかな。
0352デフォルトの名無しさん2007/11/14(水) 19:34:34
Windowsのエクスプローラとか、Javaのクラスパス解決処理みたいな
どっかのAPIを流用したことによる副作用とかいうオチだったらちょっと笑える
0353デフォルトの名無しさん2007/11/14(水) 19:45:28
DirectXでIMEの例があるから笑うに笑えない・・・。
0354デフォルトの名無しさん2007/11/15(木) 16:57:27
>>351
実行形式の場合、そのファイルのリソースとしてアイコンが格納されているんだから、
API経由か直接かは知らんけど、当然ファイルの中身は見てるはず。
で、PEとかELFとか、実行形式のフォーマットを決め打ちできない分、
アイコン読み取りが複雑になってるんじゃなかろうか。
0355デフォルトの名無しさん2007/11/15(木) 17:06:04
JFileChooserのアイコンってFileSystemView#getSystemIconでしょ
これが遅いってことか?
0356デフォルトの名無しさん2007/11/15(木) 21:18:41
>>354
つまり世の中のGUIは全てファイル選択ダイアログは遅くて使い物にならない、と
それにu1まではそんなに遅くなかった
1.4.2はいくつかのバージョンが遅いけど
0357デフォルトの名無しさん2007/11/15(木) 22:11:41

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29872

質問です
イベントでコンポーネントを追加したいんですが、追加と同時に表示させるにはどうすればいいんでしょうか?
repaint()ではダメみたいです
 
0358デフォルトの名無しさん2007/11/15(木) 22:19:39
>>357
jPanel1.revalidate()
0359デフォルトの名無しさん2007/11/16(金) 00:00:48
ああ、Swingか・・・。
0360デフォルトの名無しさん2007/11/16(金) 00:51:25
>>357
HelloボタンをaddしたあとでMyFrame#pack()を呼ぶ
0361デフォルトの名無しさん2007/11/16(金) 01:08:45
追加はされてるけど、flowレイアウトで1つしか表示できないサイズだから消えてるようにみえるだけ
>>358で正しいよ
0362デフォルトの名無しさん2007/11/16(金) 01:24:19
revalidateだけでは>>357のソースでは「追加と同時に表示させる」ことにはならないから>>360で正しいよ。
0363デフォルトの名無しさん2007/11/16(金) 01:27:07
>>362
おまえはバカか
それはレイアウトマネージャの問題であってrevalidate()で十分尽くされているんだから358が正しいんだよ
03643572007/11/16(金) 01:31:12
レス感謝です

>>361
revalidate()って意味ありますか?
revalidate()せずに、pack()だけで思い通りに表示されました
0365デフォルトの名無しさん2007/11/16(金) 01:39:53
>>364
いろいろ作っているうちに分かるよ。pack()でレイアウト変更後の再描画なんてよっぽど
異常なUIでもない限りやらないよ。pack()の方でフレームを広げてボタン押してみ。
03663572007/11/16(金) 02:01:39
たとえば、ウインドウを最大化してるにも関わらずpack()でウインドウが小さくなるのはおかしいということでしょうか?
0367デフォルトの名無しさん2007/11/16(金) 02:33:01
それでいいならいいけどさ。
■ このスレッドは過去ログ倉庫に格納されています