Java低速GUI Swing 8 ..
[2ch|▼Menu]
357:349
09/02/27 00:35:17
getParent().dispatchEvent(event);が一番短くかけるみたいですね。

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

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


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

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

360:デフォルトの名無しさん
09/02/27 01:54:28
それいけるんだ
Iteratorのループで出来ないかと思ってた〜

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

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

363:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/01 17:39:46
>>363
LANケーブルを抜いてクビをククルのが最速

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

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

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

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

368:デフォルトの名無しさん
09/03/01 20:00:47
つ jigloo

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

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

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

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

373:デフォルトの名無しさん
09/03/03 08:18:06
>>372
アンチエイリアスかければ?

374:デフォルトの名無しさん
09/03/03 23:11:33
>>370
余裕で俺、とウチの社内全員。

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

376:デフォルトの名無しさん
09/03/04 00:27:24
大技見つけたぜぃ。

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

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

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

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

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

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

377:デフォルトの名無しさん
09/03/04 01:39:21
URLリンク(space.geocities.jp)

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

378:デフォルトの名無しさん
09/03/04 01:53:06
なんだか麻布の臭いがする。。。

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

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

381:デフォルトの名無しさん
09/03/04 20:24:28
ネタ・・・じゃ・・・ないの・・・・か?

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

383:デフォルトの名無しさん
09/03/05 09:36:17
作れば良いんじゃないの

384:sage
09/03/06 00:33:36
以下のバグが1.4でも6.0でも再現するんだけど、JTextField#setTextはスレッドセーフじゃないの?
それとも検証方法自体が間違ってるの?
URLリンク(bugs.sun.com)

385:デフォルトの名無しさん
09/03/06 00:42:39
swing自体スレッドセーフじゃなかったと思う

386:デフォルトの名無しさん
09/03/06 00:44:55
1.4.2で直ってないって書いてあるし、放置されてるんじゃね?

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

388:デフォルトの名無しさん
09/03/06 00:50:16
>>385
↓スレッドセーフだと書いてあるんだが・・・
URLリンク(sdc.sun.co.jp)(java.lang.String)

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

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

390:389
09/03/06 01:15:33
ソースは Java 6 しかみてない。すまん

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

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

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

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

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

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

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

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

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

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

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

398:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/03/08 00:12:39
Beans Bindingはもう見捨てられたのかと思ってたけど、先月スペックリードが変わってるね。
これは期待してもいいんだろうか。

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

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


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4350日前に更新/99 KB
担当:undef