[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 02/06 15:43 / Filesize : 197 KB / Number-of Response : 766
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Java低速GUI Swing 5



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

Java低速GUI Swing 4 (前スレ)
pc8.2ch.net/test/read.cgi/tech/1140533866/
Java低速GUI Swing 3
pc8.2ch.net/test/read.cgi/tech/1121700954/
Java低速GUI Swing 2
pc8.2ch.net/test/read.cgi/tech/1095398949/
Java低速GUI Swing
pc5.2ch.net/test/read.cgi/tech/1062271447/l50

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

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

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

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

84 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 22:37:08 ]
>>83
それはどのVMで動かした話?

85 名前:デフォルトの名無しさん mailto:sage [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

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

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

88 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 23:41:13 ]
>>85
updateナンボかが問題

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

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

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



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

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


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

93 名前:デフォルトの名無しさん mailto:sage [2006/11/07(火) 04:40:58 ]
SWT だとなんかそういう軽量コンポーネントがある。

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

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

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

97 名前:デフォルトの名無しさん mailto:sage [2006/11/07(火) 12:35:17 ]
自前で描画しとけ


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

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

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

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

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

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

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



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

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


103 名前:86 [2006/11/07(火) 18:31:17 ]
>>99さん
ご忠告ありがとうございます。

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

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

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

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

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


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

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



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


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

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

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

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

114 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 23:40:31 ]
そのやり方は本当は危険なんだけどね。

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


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

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

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

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

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



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

122 名前:デフォルトの名無しさん mailto:sage [2006/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 mailto:sage [2006/11/11(土) 18:42:23 ]
追加

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

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

124 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 18:44:20 ]
Swingとまったく関係がないことについて

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

126 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 18:53:04 ]
よーし、おねえさん、がんばってSwingしちゃうわよー

127 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 19:03:57 ]
スイングスイング二木ゴルフっすか?>>126


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

129 名前:デフォルトの名無しさん [2006/11/12(日) 13:58:33 ]
www.uploda.org/uporg577307.jpg.html

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

130 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 14:03:06 ]
あきらかに異常だね



131 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 14:11:35 ]
>>130
やっぱりそうなのか。
thx

PCが悪いのかな?

132 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 14:31:17 ]
ソース

133 名前:デフォルトの名無しさん [2006/11/12(日) 14:38:42 ]
javaってvistaでも使える?

134 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 16:24:14 ]
>>134
まだ初心者か?
Swingにはメニューバー用の専用メソッドがあるよ
他にもクラス設計など指摘したいところがたくさんあるがまあいいか

136 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 22:03:15 ]
>>134
最低限、改行して見やすいコードをさらせ。

137 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 23:04:37 ]
>>134
frame.setJMenuBar()
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/JFrame.html#setJMenuBar(javax.swing.JMenuBar)

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


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

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



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

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

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

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

144 名前:141 mailto:sage [2006/11/15(水) 15:48:34 ]
>>142
9999よりかはキレイですね。こっちにしておきます。どうもです。

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

145 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 17:23:54 ]
SwingつかうならPackは必須だと思うのだが

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

147 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 17:57:32 ]
それレイアウトマネージャ勉強しろとしかいえない

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


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

150 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 19:59:26 ]
さんきゅ!
助かったー!



151 名前:148 mailto:sage [2006/11/15(水) 20:00:35 ]
>>149
さんきゅ!
助かったー!

152 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 20:23:00 ]
よくわからんが
paint()じゃなくて
paintComponent()をオーバーライドしなされ
あと1.5.0_08はSwingにバグがあるので1.5.0_09にしたほうがいい

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

155 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 21:00:04 ]
>public Canvas self = this;
すまん,うけたw

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

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

159 名前:157 mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 13:51:45 ]
それにしても、マウスクリックした時と初回描画時やウィンドウサイズを変えたりした時で描画領域の
原点の位置が変わってしまうなんて、Swingって妙な仕様ですね・・・。

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

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

165 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 18:35:49 ]
高速GUIのスレがいつの間にかなくなっているな

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

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

168 名前:・∀・)っ-○◎●創聖のダンゴリオン ◆DanGorION6 mailto:sage [2006/11/24(金) 23:14:23 ]
×SWTが
○SWTアプリが

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


170 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 00:17:53 ]
日本語でおk



171 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:22:34 ]
>>166
XmlGridLayoutでも使ってみれば?

172 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:28:22 ]
>>165
需要大してなかったみたいだし、仕方ないね・・・

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

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

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

175 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 19:37:08 ]
>>171
ありがたや。ありたがや。

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

177 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 20:32:43 ]
あるあるwwww

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


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

180 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 16:15:58 ]
>>179
ありがとうございました。



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

182 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 00:52:17 ]
推奨サイズとかってわかる?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<197KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef