- 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 ]
- 推奨サイズとかってわかる?
|

|