Java低速GUI Swing 5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/10/18(水) 11:50:09パフォーマンスの問題は徐々にですが改善されつつあります。
しかしながら、"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
0792デフォルトの名無しさん
2007/08/25(土) 15:43:210793デフォルトの名無しさん
2007/08/25(土) 15:43:42もう少し具体的にソースなど挙げないとなんとも言えません。
0794デフォルトの名無しさん
2007/08/25(土) 15:44:460795デフォルトの名無しさん
2007/08/25(土) 15:45:270796デフォルトの名無しさん
2007/08/25(土) 15:50:200797デフォルトの名無しさん
2007/08/25(土) 15:54:49コードさらしてみろ
0798デフォルトの名無しさん
2007/08/25(土) 19:08:09ポップアップメニューをクリックした時に、TransferHandlerへ
Ctrl+C、Ctrl+Vの時と同じ通知をしてやりたいんだが、どうやってやればいいんだ?
0799デフォルトの名無しさん
2007/08/25(土) 21:45:10TransferHandlerのjavadoc読んで分からんなら諦めろ。お前には無理だ。
0800デフォルトの名無しさん
2007/08/25(土) 22:14:340801デフォルトの名無しさん
2007/08/25(土) 22:48:390802デフォルトの名無しさん
2007/08/25(土) 22:58:360803デフォルトの名無しさん
2007/08/25(土) 23:41:46おう、取得できたぜ!
だがしかし、小さいアイコンが取れた。
大きいアイコン取れるようにがんばってみるぜ
0804デフォルトの名無しさん
2007/08/25(土) 23:59:25Swing だけじゃ、大きいアイコンは取れなかったはず。
大きいアイコン取りたい場合は JDIC、jconfig みたいなライブラリ使うか、JNI かな。
sun.awt.shell.ShellFolder 使えば取れるかもしれんけど、内部ライブラリだから、
メソッドが変更されたり無くなったり、クラスそのものが無くなったりしても文句言えない。
0805デフォルトの名無しさん
2007/08/26(日) 00:02:56マジッスカー
チューザーが使うアイコンって言葉にちょっと引っかかってたんすけどね。
ほな、今は諦めて別の作業しまっすー
0806デフォルトの名無しさん
2007/08/26(日) 02:05:59javadoc読んで分からんかったけど、Tutorialにサンプルプログラムあったのね。
親切にありがとう。
0807デフォルトの名無しさん
2007/08/26(日) 06:46:540808807
2007/08/26(日) 06:49:13paintComponentの内部でのGraphicsのインスタンスを使ってテキストを縦書きに描画したいんです。
普通のdrawStringだと横書きになってしまいます。
0809デフォルトの名無しさん
2007/08/26(日) 08:09:30Swing だと自前でやるしかない。
java.awt.Component#setComponentOrientation(ComponentOrientation)
java.awt.ComponentOrientation#isHorizontal()
ってのが使えそうなんだけど、これ縦書き用のインスタンス持ってないから。
OSが縦書き用フォント持ってれば
縦書き用フォントから字形ひっぱってきて 90度回転させて表示するとか、
もしくは横書き用フォントから字形ひっぱってきて
英数文字や鍵括弧のように90度回転させるか
日本語のように縦書きするか決めてながら、自前で再配置するとかしないとダメ。
フォントから字形を引っ張ってくるには
java.awt.Font#createGlyphVector
java.awt.font.GlyphVector#getOutline
回転させるには
java.awt.geom.AffineTransform#getRotateInstance
java.awt.geom.AffineTransform#getTransformedShape
あたり使え。
AttributedCharacterIterator とかの書式付きでやりたいなら
GlyphVector の代わりに TextLayout 使うと便利。
0810デフォルトの名無しさん
2007/08/26(日) 09:50:11んであとは位置指定して文字描画。
0811デフォルトの名無しさん
2007/08/26(日) 10:48:040812デフォルトの名無しさん
2007/08/26(日) 10:58:37Windowsの @MS ゴシック みたいな VHEA とか VMTX とか見て作ってるフォントは
VHEA とか VMTX 無視する Java の、っつーか Sun の JRE が持ってるフォントレンダラでは
扱えないんじゃなかったっけ?
縦書きって専用フォントじゃないとカギカッコとか句読点とか再配置面倒なんだよね。
0814デフォルトの名無しさん
2007/08/26(日) 22:27:100815デフォルトの名無しさん
2007/08/26(日) 22:38:23System.getenv("USERPROFILE") + "\\デスクトップ"
0816デフォルトの名無しさん
2007/08/26(日) 22:49:310817デフォルトの名無しさん
2007/08/26(日) 22:56:01それで無理やり作れるっすねぇ
>>816
WSHっすか
0818デフォルトの名無しさん
2007/08/30(木) 22:08:25これって、すでに動いてるフレームには使えねえのな。
なんか、動的にやっちゃう方法はないのか
0819デフォルトの名無しさん
2007/08/30(木) 23:09:39これか?
http://java.sun.com/docs/books/tutorial/extra/fullscreen/index.html
0820デフォルトの名無しさん
2007/08/30(木) 23:36:17フルスクリーン用にフレームを作って元のフレームの中身を入れる…とか?
0821デフォルトの名無しさん
2007/08/30(木) 23:49:18いんや、そこまで本格的じゃないの。
コンテンツ領域をダブルクリックしたら、窓枠とタイトルバーのないウィンドウを最大化で表示する感じ
>>820
コンストラクタに元のフレームを突っ込んで、中で変数をわっしょいわっしょいしてやったぜ
次のJAVAでは動的なフルスクリーンとかサポートされるといいなぁ
0822デフォルトの名無しさん
2007/08/31(金) 00:06:41setVisible(false)とdispose()の後で設定し、setVisible(true)にする感じだったかと。
昔試した記憶なんで定かではないが
0823デフォルトの名無しさん
2007/08/31(金) 00:27:440824デフォルトの名無しさん
2007/08/31(金) 01:24:48それって質問者の解決になってないんじゃない?
動いているものってのがリソースの破棄を示すとはおもえんし
とはいえ>>821のコンストラクタでというのはナンセンスすぎ
モデルと分離するのがよかろう
0825デフォルトの名無しさん
2007/08/31(金) 04:22:190826デフォルトの名無しさん
2007/08/31(金) 11:58:54フィルレート稼ぐためとかだな
0827デフォルトの名無しさん
2007/08/31(金) 12:02:490828デフォルトの名無しさん
2007/08/31(金) 12:26:11ほんの一部のblitとかしかきかないけど
0829デフォルトの名無しさん
2007/08/31(金) 12:27:33逆にJOGLだとフルスクリーン時問題がでることがある
0830デフォルトの名無しさん
2007/08/31(金) 13:04:15kwsk
JOGLフルスクリーンにできないの?
0831デフォルトの名無しさん
2007/08/31(金) 13:28:59やってみればすぐわかる
解像度変更しなくてもフルスクリーン化しただけでダメだよ
GLJPanelのほうならいくけど遅くて実用性ないし
0832デフォルトの名無しさん
2007/08/31(金) 16:52:07あと、JOGLはドライバによっては実行中に突然コケる。
そういうドライバは大体、ライダーに変身しそうな勢いでファンが回り続けるけど・・・。
0833デフォルトの名無しさん
2007/08/31(金) 19:58:15ただたんに画面いっぱいに表示したいだけだからエセフルスクリーンでいいんだな
>>824
おう、そうすりゃちょっと気分もコードもスッキリするな
0834デフォルトの名無しさん
2007/08/31(金) 20:52:05なら5だったか6だったかで新しく実装された常に手前で表示とフレームなしのウインドウの最大化で事足りる
それをやらないとタスクバーの手前にこない
0835デフォルトの名無しさん
2007/08/31(金) 22:45:12>>823
できたー
お前すげえ
ちょっと誤爆してきた
0836デフォルトの名無しさん
2007/09/01(土) 00:30:07disposeでリソース破棄が必要ってのは
0837デフォルトの名無しさん
2007/09/01(土) 02:11:16やってみた・・・なんかだめっぽいね
残念
0838デフォルトの名無しさん
2007/09/01(土) 23:05:12どうやればいいの?
0839デフォルトの名無しさん
2007/09/02(日) 00:47:51それ以外の描画自体はすべてそのまま動いてるっぽいがなんだこの現象は・・・
0840デフォルトの名無しさん
2007/09/02(日) 02:11:11OpenGL のテクスチャは左下が原点だってことと関係ありそう?
0841デフォルトの名無しさん
2007/09/02(日) 10:48:460842デフォルトの名無しさん
2007/09/04(火) 20:09:54画面のサイズを取得して、setBoundsで広げてみたけど、これは俺の知ってる最大化とちと違う。
最大化ボタンを押した時の挙動を実現する方法を教えてくだせぇ
0843デフォルトの名無しさん
2007/09/04(火) 20:15:26java.awt.Frame#setExtendedState(int)
0844デフォルトの名無しさん
2007/09/04(火) 20:26:40...先生!
最大化したあとでノーマルに戻すと、サイズがでかいままです!
0845デフォルトの名無しさん
2007/09/04(火) 20:29:190846デフォルトの名無しさん
2007/09/04(火) 20:30:22ノーマルサイズの状態にせずに、
いきなり最大化状態で表示すると、そうなったりする。
0847デフォルトの名無しさん
2007/09/04(火) 20:30:33getPreferredSizeとsetPreferredSizeを使ってみたらどうかね
0848デフォルトの名無しさん
2007/09/04(火) 22:28:30今更ながら自己レス
FileSystemView fs = FileSystemView.getFileSystemView();
File[] roots = fs.getRoots();
これでデスクトップ取って来れたよ
0849デフォルトの名無しさん
2007/09/05(水) 00:07:49メソッド名とあわんけどな
0850デフォルトの名無しさん
2007/09/05(水) 00:16:32メソッド名と処理が全然直感的じゃないことに脱帽する。
0851デフォルトの名無しさん
2007/09/05(水) 00:38:26デスクトップを取得したかった理由は、エクスプローラみたいなツリーを作りたかったからなんで、
今回はokです。
デスクトップ取得して、そこから展開してったらサクっとエクスプローラみたいになってびっくり。
ウィン以外だとどんな動作になるのやら。
0852デフォルトの名無しさん
2007/09/05(水) 00:51:47名前のとおりの動作になる
ファイルシステムのルート
説明によるとDOSだとドライブ番号らしい
でもデスクトップってユーザーごとに違うからそこがファイルシステムルートってのもピンと来ないんだよなぁ
0853デフォルトの名無しさん
2007/09/05(水) 22:21:28左右の端っこでカーソル?が止まるべ。
右端で右を押したら、一段下の左端にカーソルもってこうとしてこんなん書いてみた。
protected void keyPresse(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_RIGHT:
int index = getLeadSelectionIndex();
int width = getWidth() / getFixedCellWidth();
if (index % width == width - 1) {
getSelectionModel().setLeadSelectionIndex(index + 1);
}
以下略
だがしかし、これだと左端の一つ右にカーソルがいくっす。
どうしたら、左端にきっちり止まるかな?
0854デフォルトの名無しさん
2007/09/05(水) 22:28:30左端に移った後で右へ移動の処理が呼ばれてるんじゃね?
e.consume()とかしたら伝搬せずに済むかも。
0855デフォルトの名無しさん
2007/09/05(水) 22:48:00なるほどっす、ありがとっす
if ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) != 0) {
getSelectionModel().setLeadSelectionIndex(index + 1);
} else {
setSelectedIndex(index + 1);
}
e.consume();
シフトキー押してなくても右端と左端を選択するようになったから、
e.consume();の前にif文かましてみたっす。
0856デフォルトの名無しさん
2007/09/05(水) 22:58:030857デフォルトの名無しさん
2007/09/05(水) 23:05:35右端だったら次行の1つめへ、
というActionを定義して、
ActionMapに名前を付けて登録。
InputMapの右キーのトコにその名前を登録。
と処理するのが正当かもしれんね。
0858デフォルトの名無しさん
2007/09/11(火) 01:51:36これで関連付けでファイルを開けるんだが、ディレクトリを2、3個開くとVMが落ちる。
画像は平気。
今後に期待ってところかね
0859858
2007/09/11(火) 02:07:360860デフォルトの名無しさん
2007/09/11(火) 02:32:560861デフォルトの名無しさん
2007/09/11(火) 04:35:390862デフォルトの名無しさん
2007/09/11(火) 07:08:01リンクっぽく表示されるけどクリックできません。
リンクを開くにはどのようにすればいいのでしょうか?
0863デフォルトの名無しさん
2007/09/11(火) 08:33:29JLabel に MouseListener つけて mouseClicked を検地して自前で処理する。
ハイパーリンクのクリックイベントを捕らえられるのって、JEditorPane
だけじゃないかな。
0864デフォルトの名無しさん
2007/09/11(火) 13:02:58問題はSwingの話題がないことだろう
0865デフォルトの名無しさん
2007/09/11(火) 13:04:130866デフォルトの名無しさん
2007/09/11(火) 13:06:27SwingのHTMLは表示させるためだけのものってどこかに書いてあったようななかったような…
0867デフォルトの名無しさん
2007/09/11(火) 13:24:350868デフォルトの名無しさん
2007/09/11(火) 14:27:26Desktop desktop = Desktop.getDesktop();
desktop.open(new File("C:\\"));
desktop.open(new File("C:\\WINDOWS"));
desktop.open(new File("C:\\WINDOWS\\system32"));
desktop.open(new File("C:\\Documents and Settings"));
で、4個開いてみたけどVM落ちない。再現条件が違うんじゃね?
0869デフォルトの名無しさん
2007/09/11(火) 17:08:28どなたかご教示ねがいます。
0870デフォルトの名無しさん
2007/09/11(火) 17:36:20それともJFileChooserだけを変更したいっていう話?
0871デフォルトの名無しさん
2007/09/11(火) 17:39:41UIManagerのsetを呼び出す場所が間違ってました。
ごめんなさい(m´・ω・`)m ゴメン…
0872デフォルトの名無しさん
2007/09/12(水) 01:19:58ボタンを押す毎に月の変数を増減させ、その変数の値を見て31日を追加したり削除したりさせたいのですが、
removeが動作してくれません。大まかに書くと下記のような感じなのですが↓
public void actionPerformed(ActionEvent e){
month++;
if(month == 9){
panel1.add(day31);
}
else if(month == 10){
panel1.remove(day31);
}
else if(month == 11){
panel1.add(day31);
}
}
上記の「day31」が削除されません。
変数の値は間違い無く条件式に対し真を返す値である事は確認しています。
何故か、30日を示す「day30」が存在しないと、削除に成功します。
色々試しましたが解決策が見つかりませんでした。そこが悪いのでしょうか?
0873872
2007/09/12(水) 01:30:18×そこが悪いのでしょうか
○どこが悪いのでしょうか
解決策が見つからない事は確かに悪いのですが・・・
0874デフォルトの名無しさん
2007/09/12(水) 09:22:09レイアウトを使用しているなら、コンポーネントの追加と削除をした場合
にはrevalidate()なりを呼び出さないといけない。
そういう手間がいやなら、day31.setVisible(false)とかで表示上消して
しまえばいい。いちいちコンテナに追加したり削除したりすると後が面倒。
たとえば7月から8月にした場合とか、両方とも31日ある月とか
30日以下の月が連続した場合に面倒だろ?
ところで9月は30日なんだが、
if(month == 9){
panel1.add(day31);
}
この判定はいったいなんだ?
0875デフォルトの名無しさん
2007/09/12(水) 09:49:16月の範囲が0−11
0877デフォルトの名無しさん
2007/09/12(水) 11:09:15Java がどうとかじゃなくて、もっと昔からの慣習なんだろうけど。
0878デフォルトの名無しさん
2007/09/12(水) 11:13:520879デフォルトの名無しさん
2007/09/12(水) 11:17:010880デフォルトの名無しさん
2007/09/12(水) 16:54:46文字列の配列のインデックスのためでしょ
0881デフォルトの名無しさん
2007/09/12(水) 20:20:47回答ありがとうございます。おかげで解決しました。
つたない質問に丁寧に答えて頂き、本当に有難う御座いました。
0882デフォルトの名無しさん
2007/09/12(水) 23:14:55これでjpgファイルを読み込んで、JLabelにイメージアイコンとして突っ込んで表示してたら変な色になるファイルがある。
暗いところ明るい緑に、白いところは赤っぽくなる。
なんか変なフラグでも立ってるのかね?
0883デフォルトの名無しさん
2007/09/13(木) 22:47:17>>882(自己レス)
ImageIOのバグなのか?
ここに書いてある通りにしたらうまくいった。
jpgはこれで読み込んで、jpg以外はImageIOにやってもらえばいいか。
0884デフォルトの名無しさん
2007/09/13(木) 23:05:230885デフォルトの名無しさん
2007/09/13(木) 23:15:500886デフォルトの名無しさん
2007/09/13(木) 23:28:540887デフォルトの名無しさん
2007/09/13(木) 23:30:32読み込んだjpegがどんな機能使ってるかだな。
実は2kだったりしたら笑えるw
0888デフォルトの名無しさん
2007/09/14(金) 17:12:51ttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6578753
まー、SunはみんなSolarisだから、気づかないんだろうけど。
真面目にチェックしてリリースしろよ。
0889デフォルトの名無しさん
2007/09/14(金) 18:33:360890デフォルトの名無しさん
2007/09/14(金) 21:15:256u2で重く感じたのはやはり気のせいじゃなかったか
0891デフォルトの名無しさん
2007/09/15(土) 01:39:07u2ってbug fixだったな。
0892デフォルトの名無しさん
2007/09/16(日) 00:19:34ルートのフレームから、その子供みんなにどどーんとイベントを発行できたらいいなぁ。
なんて思ってるんだけど。
具体的には、各部品が勝手に開いてるファイルをファイル名指定して「閉じろ」って命令したいんだな。
■ このスレッドは過去ログ倉庫に格納されています