- 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
- 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***といった感じで定義しても問題ないでしょうか
- 402 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 20:24:14 ]
- 逆に何を懸念しているのかがわからない
- 403 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 13:39:14 ]
- Swingを勉強するのにお勧めの書籍とかある?
- 404 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:06:20 ]
- どのレベルか、どんな記述が読み易いか示さないと何とも。
- 405 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:15:03 ]
- >>404
Javaの勉強を始めたばかりで、プログラミング言語Java第四版を読み終わったところ。 まあまあ読みやすかった。訳も気にならなかった。 Head Firest Java 第二版を読んでる最中で、 面白いと思うけど、実用性には欠けると思っている。 ざっと機能を概観する入門書と、詳しい内容の2冊進めてもらえるとうれしい。 こんなところでどうでしょう。
- 406 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:16:03 ]
- swinglabs.orgがもう一週間近く死んでる。
- 407 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 06:07:53 ]
- 頭いい人は本から入るのかね?
わしは本読んでると眠くなるんで、いきなりソースコードと戦う派なんだが
- 408 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:29:02 ]
- 武闘派か。端から見てるとPCに向かって何か遣ってる引きこもりにしか見えないが。
- 409 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:39:15 ]
- >>405
詳しい内容ではないが実践的な内容ならEffective Java。 Swing関係ないけど。一通りJavaで組めるようになって開発規模が 大きくなってきた頃に手に取ると大変有用な本だと思う。
- 410 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:03:06 ]
- >>409
Swing本当に関係ないなww Swingの本を薦めてくれ。
- 411 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:23:35 ]
- >>410
申し訳ない。ただJava勉強中のようだったのでつい。 確かにSwing関係ないけど間違いなく勉強になる良い本だよ。 「良いクセ」を学べる本なので、中級へのステップアップ時には 是非読んだ方が良いですよ。 Swing本については、他の人よろしく〜
- 412 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:27:20 ]
- >>411
気持ちはありがたいが、既に本棚にあるのだww
- 413 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 19:29:06 ]
- JavaはJava教室で買わされた本しかもってない、
Swingはグーグル先生に聞いてなんとかした、 読んでないからいい本なんて分からないんだぜ Effective Javaは良さそうだな、読んでみようか
- 414 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:31:16 ]
- 本ではないが、java.sun.com/docs/books/tutorial/uiswing/
- 415 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 00:57:22 ]
- >>413
ちゃんと本を読まなかったので、 javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); の必要性を知らなかった。 人が書いたコードを見ても、余計なことをしてると思っていた。
- 416 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 02:46:43 ]
- そんなの見た事無いや。orz
解説頼む。
- 417 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 03:12:48 ]
- >>416
Swingは、スレッドセーフじゃないから、初期化もイベントディスパッチスレッドで実行しないといけない。 invokeLaterを使うと後でイベントディスパッチスレッドで実行される。
- 418 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 03:23:09 ]
- >>416
スレッドセーフじゃないんだってさ。
- 419 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 10:10:35 ]
- 本ならSwing Hackが実用的かも。
Swingの入門書の次くらいに読むといい本。
- 420 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 23:55:45 ]
- >>419
本屋でSwing Hackをみてきました。見た感じTIPS集みたいですね。 よさそうな入門書だと「Java GUIプログラミング」のVol.1, Vol2なのですが、 ちょっと本気すぎる感じです。以外にSwingの本って売ってないですね。
- 421 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 02:54:08 ]
- >>420
本を買う前に最初はsunのjavaサイトにあるswing関連のチュートリアルで十分じゃないか? APIリファレンスのswingコンポーネントクラスの説明文の多くにリンクがあったりする。
- 422 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 02:58:11 ]
- あ、すま
>>414で紹介されてるね。
- 423 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 03:06:57 ]
- 英語を読むのは面倒くさい
いや読むけどさ(ブツブツ
- 424 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 04:21:31 ]
- >>420
入門書ってどれもほとんど大差ないから。 「Java GUIプログラミング」が本気すぎるとなると習う前に慣れたほうが良いかも。 となるとSwingチュートリアルのソースがベストかな。 英文を隅々まで読まなくても、ソース読んで、実行してみればだいたいわかってくる。
- 425 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 20:45:24 ]
- >>424
ありがとう!やってみる。
- 426 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:52:15 ]
- JOptionPane#showXXXDialog()で適当なコンポーネントをつめたJPanelを
表示した際にダイアログのボタンじゃなくてJPanel内の特定のコンポーネントの 方にフォーカスがあたるようにすることってできる?
- 427 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:06:24 ]
- >>426
???
- 428 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:47:02 ]
- >>427
JOptionPaneをカスタマイズしてJPanelを埋め込んだ場合に、ダイアログのOK/Cancelボタンではなくて追加したJPanel内のコンポーネントに入力フォーカスを当てたい、ということだと思われる。
- 429 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 08:22:29 ]
- できると思う
swing フォーカスでぐぐりゃ解決しそう
- 430 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 11:23:07 ]
- >>428
そういうことです.わかりにくい文ですみません. >>492 ぐぐってみました.ttp://terai.xrea.jp/Swing/DefaultFocus.html JOptionPane#showXXXDialog()系だとJDialogやJFrameがとれないから FocusTraversalPolicyをセットしたりWindowLister#windowOpend()や ComponentListner#componentShown()でrequestFocus()呼べないよなー とか思ってました. んで上のページの EventQueue#invokeLater() 方式を試してみましたが 手元の環境ではJOptionPaneの場合フォーカスはOKボタンの方になってしまいました…
- 431 名前:430 mailto:sage [2009/03/19(木) 11:39:29 ]
- 試したコードはこんな感じです
public static void createAndShow(){ final JTextField textField = new JTextField("Hello"); EventQueue.invokeLater(new Runnable(){ public void run() { textField.requestFocusInWindow(); } }); int result = JOptionPane.showConfirmDialog( null, textField, "Input Text", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); }
- 432 名前:デフォルトの名無しさん [2009/03/19(木) 12:09:21 ]
- >>431
実際にフォーカスを取得するまで、 requestFocusInWindow() を何度も呼んでみるとか。 ちょっと力技かもしれないけど HierarchyListener を使えば JOptionPane.showXxxDialog() で作られるダイアログを取得できる。 そのダイアログに対して WindowListener か ComponentListener を使えばよい。 「コンポーネントが画面に表示されたときに特定の処理を行う」 って、意外と難しいよね? JSplitPane が表示されたときディバイダを中央に移動させる方法を 見つけるのに、すごく苦労したことがある。
- 433 名前:430 mailto:sage [2009/03/20(金) 00:09:49 ]
- >>432
なるほど HierarchyListener は思いつきませんでした。これなら動きそうですね。 >>431 のコードはEventQueue#invokeLater()じゃなくて javax.swing.Timer で 1秒後とかやったら期待通り動いたんでタイミングの問題なんでしょうねぇ… PC性能によって必要な delay 時間が変わるからTimerでやるのは微妙だなー と思ったけど何度でも呼んでみる的アプローチで繰り返しありの Timer を 設定してフォーカスがとれたら Timer を止める、とかでもできそうですね…
- 434 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 01:56:28 ]
- final JTextField textField = new JTextField("Hello");
JOptionPane pane = new JOptionPane(textField, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); JDialog dialog = pane.createDialog("Input Text"); dialog.addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent e) { textField.requestFocusInWindow(); } }); dialog.setVisible(true); dialog.dispose(); Object o = pane.getValue(); int result = (o instanceof Integer) ? (Integer)o : JOptionPane.CLOSED_OPTION; うそくさいし、ひどく面倒
- 435 名前:430 mailto:sage [2009/03/20(金) 13:14:55 ]
- >>434
確かに JOptionPane を直接使えばJDialogがとれますね。参考になります。 戻り値の扱い周りとかが大変面倒くさそうですけど…
- 436 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 13:26:02 ]
- >>432
>「コンポーネントが画面に表示されたときに特定の処理を行う」 Component#addNotify() / removeNotify()をオーバーライドでできると思う。
- 437 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:46:14 ]
- >>436
addNotify() が呼ばれたとき、 そのコンポーネントが表示されてるとは限らない。 たとえば Window.pack() を呼んだとき、 (たとえウィンドウが不可視であっても) ウィンドウ内のすべてのコンポーネントの addNotify() が呼ばれる。 あと、親コンテナの doLayout() が呼ばれるまでは コンポーネントのサイズが確定しないので、 オーバーライドした addNotify() から JSplitPane.setDividerLocation() を呼んでも機能しない。
- 438 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:59:56 ]
- JTableのセルをアニメーションして移動したり表示したりしたいのですが
どういう方法が一番いいでしょうねぇ・・・
- 439 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:12:38 ]
- 単純にセルを描画する命令をタイマーで呼ぶしか方法はないのでは?
その具体的な方法でしょうか?
- 440 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 19:57:58 ]
- えーと、よくSFとかでありますね
上から1行ずつアニメーションしてさらさらと出てくるような表や 項目を追加したらふわっと最終行が浮かんでくる といったような描画をどうやってやるかということに悩んでいます Timer自体はいくらでも使えるのですが
- 441 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 20:18:33 ]
- JTableはセルそれぞれがコンポーネントというわけではないので、あまりスマートにはできません。
上げられた二つの例に限ってですが、代替策として、glasspaneでだますというのはどうでしょう? それがいやなのであれば、Timerかなにかでアニメーションさせてください。
- 442 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:18:49 ]
- >>440
JXLayer使えばいいと思うよ。
- 443 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 23:44:17 ]
- JTreeでツールチップ表示中にホイールスクロールするとやたら重いんだが
どうにか、普通にスクロールさせる方法はないかね
- 444 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 04:22:23 ]
- ツールチップが重い処理だからそんなもの。
無効にするしか。
- 445 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:51:40 ]
- >>443
ツールチップを常に重量コンポーネントとして表示すればよいと思う。 普通 JScrollPane でコンポーネントがスクロールされるときは、 現在表示されているビューポートの外観を少しずつずらしてコピーすることで、 高速なスクロールを実現している。 しかし、軽量コンポーネント(たとえばツールチップ)が 上のレイヤーに重なっているときは、 スクロールされるたびにビューポート全体を再描画しなくてはならないので遅くなる。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:35:26 ]
- >>441
ありがとうございます GlassPaneを調べてみますね。それ以外の場合、Timerでアニメーションするとよいとのことですが アニメーションの内容はどのようなものを? TableSellRendererやJTableなどをいくら拡張しても中々難しそうですね・・・ >>442 なかなかすごそうなコンポーネントです。これはどういうものでしょうか?
- 447 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 02:49:32 ]
- 最近beansBindingを触って疑問に思ったのですが、
ColumnBindingに対してvalidatorを設定した場合、 バリデーションエラーが発生した行の取得はどのようにすればよいのでしょうか?
- 448 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 01:00:27 ]
- 横方向に中央であればFlowLayoutでシンプルに実現できますが、縦方向に中央に配置したい場合の簡単な実現方法はありませんでしょうか?
- 449 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 07:03:52 ]
- >>448
Y_AXISなBoxLayoutで子コンポーネントそれぞれにsetAlignmentX()でCENTER_ALIGNMENTを設定するのは? FlowLayoutと違って子コンポーネントの幅は推奨サイズでなく最大サイズに影響されるので、 推奨サイズにしたいなら子コンポーネントの種類次第では最大サイズを設定してやらないといけないけれど。
- 450 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 10:24:26 ]
- private static JLabel createLabel(String text){
JLabel lb = new JLabel(text); lb.setAlignmentX(Component.CENTER_ALIGNMENT); lb.setMaximumSize(new Dimension(300,30)); return lb; } public static void main(String[] args) { JPanel pn = new JPanel(); pn.setLayout(new BoxLayout(pn,BoxLayout.Y_AXIS)); pn.add(createLabel("hoge")); pn.add(createLabel("fuga")); //... } このようなコードで試してみましたが、やはりY方向には上に詰められてしまいます。 中央寄せしたいコンポーネントの上下をBox.createVerticalGlue()で詰めるというのはありでしょうか?
- 451 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 12:54:35 ]
- >>450
縦方向に中央揃えでコンポーネントを並べることと勘違いしてた。 Box b = Box.createVerticalBox(); b.add(Box.createVerticalGlue()); b.add(コンポーネント); b.add(Box.createVerticalGlue()); みたいな感じでいけるんじゃないかな。 でももしかすると上下のグルーが同じ比率で伸びずに完全なセンタリングにならないかも。 その場合、どれくらいで簡単な実現方法とならないかが分からないけれど、 GridBagLayoutやGroupLayoutみたいな少し複雑なレイアウトマネージャを使うとか、 縦方向について中央配置するマネージャを自作するとか。
- 452 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 12:57:58 ]
- >>450 縦に中央ってこんな感じ?
JLabel label1 = new JLabel("Hello, World!!"); label1.setBorder(BorderFactory.createTitledBorder("label1")); label1.setAlignmentX(JComponent.CENTER_ALIGNMENT); JLabel label2 = new JLabel("Goodbye, world!!"); label2.setBorder(BorderFactory.createTitledBorder("label2")); label2.setAlignmentX(JComponent.CENTER_ALIGNMENT); JPanel inPanel = new JPanel(); inPanel.setLayout(new BoxLayout(inPanel,BoxLayout.Y_AXIS)); inPanel.add(label1); inPanel.add(label2); inPanel.setAlignmentY(JComponent.CENTER_ALIGNMENT); inPanel.setBorder(BorderFactory.createTitledBorder("in")); JPanel outPanel = new JPanel(); outPanel.setLayout(new BoxLayout(outPanel,BoxLayout.X_AXIS)); outPanel.add(inPanel); outPanel.setBorder(BorderFactory.createTitledBorder("out")); JFrame frame = new JFrame("VerticalCenterLayout"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //frame.add(BorderLayout.WEST, outPanel); frame.add(BorderLayout.CENTER, outPanel); frame.pack(); frame.setVisible(true);
- 453 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:32:37 ]
- 初心者です。
javaでゲーム製作の本を買って、 コードがすべてAWTで書かれてるんですが、 swing用の本を買いなおしたほうがいいですか?
- 454 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 15:23:18 ]
- >>453
別にそんなことないだろ。 Swingの本なら、awtの知識は前提としているだろうし。
- 455 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:13:35 ]
- >>454
ありがとうございます。 今の本で勉強してみます。
- 456 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:39:38 ]
- >>453
時間の無駄をいとわないならその本でOK。 時間の無駄がいやなら買いなおすべし。
- 457 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:44:33 ]
- ゲームを作るつもりでその本を買ったなら Swing の本を
買い直す必要は全くないと思うが… Swing の勉強をするつもりで買ったの?
- 458 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 04:25:34 ]
- あとでswingの本読んで、swing化してみるのは実力が付いていいと思うけどね。
基本は大事。
- 459 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 06:53:59 ]
- >>440
>>453 ゲームで、グラフィック表示ばっかりなら、Swingはあまり関係ないと思われる。 java.awt.Graphics2Dを使ってるから「コードがすべてAWT」というオチではないよな?
- 460 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:44:16 ]
- 440関係なかった・・・
- 461 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:49:53 ]
- javaでゲームだと結局java2dだとか3d使うんだべ
- 462 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 11:50:26 ]
- そんなことないべ。
コマンドアドベンチャーとかなら、普通に既存コンポーネントだけで作れるべ。
- 463 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:57:11 ]
- >>461
シミュレーションだとJava2DとSwingでがっちり組むみたいよ。 最近ので、ちょっと期待してしまうDarkSideとか www.darkside-game.net/index.jsp 自分ではJava3Dを使いたいんだけど再配布がな・・・
- 464 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:06:37 ]
- >>463
Java Web Startにすると、そのあたりも自動でインストールしてくれるらしい
- 465 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:33:46 ]
- >>464
そんなうまい話があるわけない。 開発者の手間は変わらない。(JNLPの分面倒か)
- 466 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:05:32 ]
- >>465は技術者として終わっとるな。
- 467 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 04:11:55 ]
- Java Web StartでのJava3D配布は、このあたりで話題になってた
pc11.2ch.net/test/read.cgi/tech/1033703640/909-915 詳しくはここを https://j3d-webstart.dev.java.net/test/ これが参考になるかもしれない。 ziddy.japan.zdnet.com/qa4257080.html
|

|