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


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

Java低速GUI Swing 8



1 名前:デフォルトの名無しさん [2008/11/21(金) 11:24:21 ]
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。

Java低速GUI Swing 7
pc11.2ch.net/test/read.cgi/tech/1204155623/
Java低速GUI Swing 6
pc11.2ch.net/test/read.cgi/tech/1190807478/
Java低速GUI Swing 5
pc11.2ch.net/test/read.cgi/tech/1161139809/
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

355 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:07:01 ]
ディスパッチってどうやってするねん?

俺も>>350みたいにリスナーぶち込みで対処したことがある

356 名前:sage [2009/02/26(木) 23:17:41 ]
>>355
java.awt.Component#dispatchEvent(AWTEvent)嫁。

357 名前:349 mailto:sage [2009/02/27(金) 00:35:17 ]
getParent().dispatchEvent(event);が一番短くかけるみたいですね。

>>350から355のみなさん、どうもありがとうございました。

358 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:09:26 ]
普通に JLabel の親に対して
addMouseListener(MouseEvent) を呼べば
>>349 に書かれてるような挙動になるけど。


359 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:40:53 ]
c.addKeyListener(new KeyAdapter() {
  public void keyPressed(KeyEvent e) {
    c.removeKeyListener(this);
  }
});

どさくさにまぎれて、一度だけ実行されるリスナーの小技。(流れ上、マウスリスナでないのは手抜き)
めったに使う機会がないと思うけど。。

360 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:54:28 ]
それいけるんだ
Iteratorのループで出来ないかと思ってた〜

361 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:05:56 ]
JComponent.setFont(new Font("メイリオ", Font.BOLD, 42))
とすると一回目だけすごく遅いんですが、フォントの読み込みは
何かテクニックがあるんでしょうか?

362 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:07:54 ]
アプリケーション起動時にあらかじめ読み込んでおくくらいしかないよ
いずれにせよロード時間はかかる

363 名前:デフォルトの名無しさん [2009/03/01(日) 17:17:19 ]
Java SE Development Kit (JDK) 6 Update 11
Eclipse3.4.1
WindowsXP SP3

上記の環境があり、そこでGUIアプリをJavaで作成しようと思っています。
Swing(?)ってのをElipseのメニューから探したのですが、見当たりません。

JavaSEをアンインストールして、JavaEEをインストールするのが妥当な選択なのでしょうか?
それともplug-inがまた別にあるのでしょうか?



364 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:39:46 ]
>>363
LANケーブルを抜いてクビをククルのが最速

365 名前:デフォルトの名無しさん [2009/03/01(日) 17:49:20 ]
>>364
最速か否かは聞かれてないだろww

366 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:54:37 ]
exlipseの標準環境だと、swingアプリはメモ帳でhtml手打ちするようなのりで、
自分でソースコード書いて全部作ることになるっす。

net beansとかいうの使うと、VBみたいなポトペタを標準でできるらしい
eclipseもプラグイン導入するとポトペタできるらしい
が、swingでポトペタやったことないんでわかりません。

367 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:23:02 ]
>>366
Swingやるなら現状ではNetBeans一択らしい。
EclipseプラグインのVE(VisualEditor)は使いもんにならんそうな。
俺はEclipseで手打ちしてるけどナー。
# EcilpseからSwingアプリを起動すると、フォント構成ファイルが無視されて、
# 日本語じゃないフォントで日本語がレンダリングされるという問題も……。
# おかしいなー、フォント構成ファイルの読み込み自体は正常に行われてるんだが。

368 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:00:47 ]
つ jigloo

369 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:02:05 ]
じぐるーも重いしすごくグループレイアウトが使いにくいしだめだよなぁ

370 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:51:25 ]
NetBeansでGUI作って、Eclipseに持ち込んでる俺。
他にもいるでしょ、こんな人。

371 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:11:34 ]
>>367
VEは使ってみて、脱力した。
正直、自分の脳内でレイアウト組んだほうがマシ。
最近は更新もされてないんじゃなかったっけ?

372 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:20:54 ]
swingの印刷機能って、コンポーネント上の文字がカクカクになって印刷されるんだけど、
これって普通なの?

373 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 08:18:06 ]
>>372
アンチエイリアスかければ?



374 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:11:33 ]
>>370
余裕で俺、とウチの社内全員。

375 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:14:31 ]
>>370
NetBeansでそのままつくらずに、Eclipseに持ち込む理由はなんですか

376 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:27:24 ]
大技見つけたぜぃ。

Javaで比較的簡単にホットデプロイする方法。

まず、デプロイしたいクラスのベースとなるHogeを作っておきます。
そして、それを継承したHoge00というクラスを作ります。
ただし、このクラスのファイル名はHogeXX.javaという風にします。
コンパイルできなければ対策を考えますが、クラスをpublicにしなければ通るようです。
そして、修正してデプロイするときには、Hoge00をHoge01という風にクラスの名前も変えます。
ファイル名はそのままです。

クラス名を変えるとコンストラクタ名まで変えないといけません。この時の小技として
コンストラクタの処理を全て関数にしてHoge00クラスにはコンストラクタを記述しないようにします。
その為、Hogeクラスには空のデフォルトコンストラクタを用意しておきます。

あとは、コンパイルしてシステムのクラスローダを使ってHoge01クラスを読み込んで
Hogeにキャストして使用できます。Hogeにはインターフェースとなる関数を用意しておきます。

従来の方法だと別のクラスローダを使ったりするので、同じクラスを違うクラスであるとしてしまう為
キャストしたり出来ません。なので、リフレクションなどを使ってアクセスする事になります。
これがどうもうまくないと思ったので、別の方法を考えたら思いつきました。

今からサンプルを作ります。

377 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:39:21 ]
space.geocities.jp/solver9999/

ホームページに置きました。
なぜか、antから起動しないとToolProvider.getSystemJavaCompiler()がnullになってしまうので
antを使ってください。この辺を調べてみます。でゎ、おやすみ。

378 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:53:06 ]
なんだか麻布の臭いがする。。。

379 名前:デフォルトの名無しさん [2009/03/04(水) 10:33:20 ]
GUIはまったく初心者だったけど「Javaアプリケーション作成講座」という本を読んで
だんだんわかるようになってきた
とりあえず簡単なテキストエディタやブラウザは作れるようになった

380 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:28:11 ]
javax.tools.ToolProvider.getSystemJavaCompiler()がnullを返すのは
JAVA_HOME\lib\tools.jarにクラスパスが通ってない事が原因でした。

381 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 20:24:28 ]
ネタ・・・じゃ・・・ないの・・・・か?

382 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:06:57 ]
Swingに印刷プレビューダイアログってありますか?

383 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 09:36:17 ]
作れば良いんじゃないの



384 名前:sage [2009/03/06(金) 00:33:36 ]
以下のバグが1.4でも6.0でも再現するんだけど、JTextField#setTextはスレッドセーフじゃないの?
それとも検証方法自体が間違ってるの?
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4765353

385 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:42:39 ]
swing自体スレッドセーフじゃなかったと思う

386 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:44:55 ]
1.4.2で直ってないって書いてあるし、放置されてるんじゃね?

387 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:46:00 ]
この再現コードみたいなことをすること自体基本的にないからなぁ

388 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:50:16 ]
>>385
↓スレッドセーフだと書いてあるんだが・・・
sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/text/JTextComponent.html#setText(java.lang.String)

389 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:13:56 ]
ざっとソースをみたところ、スレッドセーフじゃないね。

テキストのモデルであるDocumentへの書き込みがアトミックであったとしても、
UIスレッドを用いてコンポーネントから何らかの値をとってくるメソッドで
Documentのインスタンスを2回以上使うような操作をする全てのメソッドは
その間はDocumentへの書き込みを排他していないといけないはずなのだが、
少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。

390 名前:389 mailto:sage [2009/03/06(金) 01:15:33 ]
ソースは Java 6 しかみてない。すまん

391 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:18:31 ]
setTextする処理をEDTに投げればいいんじゃないの?的外れだったらごめん。

392 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:43:30 ]
>>389
>.少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。

setTextの話だったんだけど、typo?

393 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:53:44 ]
>>392
getTextが変な値を返す原因がsetTextをUIスレッド以外でアクセスしたことにあるなら、
setTextはスレッドセーフだといえる?



394 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 07:33:43 ]
>>393
setTextの時点で変な値にならないのであれば、setTextはスレッドセーフじゃないの?
(よくわかってないかもしれん・・・)

そもそも>>384の再現コードは、getTextした値が""や"12"や"21"になることがあり、
以下のように思ってるんだが、違うかな?

""は、setTextが値を一度クリアしたタイミングで、getTextしているから。(getTextがスレッドセーフではないから)
"12"や"21"はsetTextがロックする前にAbstractDocument#getLengthを呼び出していることが原因。
(setTextもスレッドセーフではない?)

395 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 13:04:40 ]
JavaDoc を見る限り getText() はスレッドセーフじゃないんだな…知らなかった…
別スレッドからsetText()して結果的に画面に"12"や"21"や""が描画される
ことがないのであれば setText() はスレッドセーフといえる…のかな?

でも現状は >>394 のいうようにsetText()もスレッドセーフじゃないように見えるなぁ

396 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 17:43:09 ]
setText()のスレッドセーフを確認するのに、スレッドセーフではないgetText()が絡んでくるとややこしくなるので
setText()するたびに文字列を溜めておいて、最後に検証するというのはどうだろう。

397 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:28:23 ]
AbstractDocument.readLockを使えば、少しはましになるけど、ダメだった。
たまに、"12"と"21"が出てくる。

398 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:27:20 ]
swingコンポーネントをディープコピーしようとしたら、
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.io.NotSerializableException: com.sun.java.swing.plaf.windows.XPStyle$Skin
っていわれるんだけど、どうすりゃいいの?

399 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:12:39 ]
Beans Bindingはもう見捨てられたのかと思ってたけど、先月スペックリードが変わってるね。
これは期待してもいいんだろうか。

400 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:08:00 ]
スペックリードとは仕様定めるリーダーみたいなものでしょうか?

401 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 10:41:55 ]
複数のクラスで共用するダイアログなどで、わざわざそれぞれのフィールドとして持たせたくない場合は、UIUtilitiesなどを作ってそこでshow***といった感じで定義しても問題ないでしょうか






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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