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
0385デフォルトの名無しさん
2007/04/13(金) 00:17:500386384じ
2007/04/13(金) 00:30:50巧く説明できないのでおやすみなさい
0387デフォルトの名無しさん
2007/04/13(金) 00:31:04これの一番下の事を言っているのでは
0388デフォルトの名無しさん
2007/04/13(金) 02:46:21うーん、単にJPanelを置いてその中にコンポーネント配置していけばいいんじゃないのかな?
0389デフォルトの名無しさん
2007/04/13(金) 03:07:27public class HogePanel extends JPanel{...} として作っておけば、
JFrame, JInternalFrame, JApplet, JTabbedPane などに乗っけるだけで
いろいろ使える、って意味では?
再利用性を高めるやり方としては間違ってないと思う。
再利用の必要がないなら無駄だけど、個人的にこういう作りは好きだ。
0390デフォルトの名無しさん
2007/04/13(金) 03:27:30つまりJColorChooserみたいな複合ウィジェットを作って再利用ってだけの話なのかね?
JPanelじゃなくてJComponentでいい気がするけど…
0391384
2007/04/13(金) 22:13:53そのとおりです!
気持ちが伝わってなんか嬉しいっす。
JComponentですか。思いつきませんでした。どっちがメリットあるかなぁ。
0392デフォルトの名無しさん
2007/04/13(金) 23:03:480393デフォルトの名無しさん
2007/04/14(土) 15:46:110394デフォルトの名無しさん
2007/04/14(土) 18:29:58awt では Panel 使ったけどが swing で JComponent が Container に
なったから JPanel にする必要は全くなくなったのでは…?
0395デフォルトの名無しさん
2007/04/14(土) 18:32:06どっからそんな情報が沸いてくるん?
0396デフォルトの名無しさん
2007/04/14(土) 18:35:58JComponentはObjectのようなSwingコンポーネントのルートクラスだから
継承するならいいけどぽとぺたやるならJPanelで
0397デフォルトの名無しさん
2007/04/14(土) 20:44:27具体的にJPanelのどの部分がぽとぺたに向いているのでしょうか?
あるいは JComponent のどの部分が向いてないのでしょう?
0398デフォルトの名無しさん
2007/04/14(土) 20:58:040399デフォルトの名無しさん
2007/04/14(土) 21:03:47あれ? と思ったことはあるが、どうせ継承して使うだろうし、あえて
JPanelでなければならないことはなさそうだな。
ただ、ポトペタだとソースレベルで継承して使うことにはおそらくならな
いだろうから、JPanelでないと駄目かも。
0400デフォルトの名無しさん
2007/04/14(土) 21:18:23JPanelを使った場合、JPanelの機能変更に引きずられる可能性がある
それを望むのであればJPanelの上にまとめればよい
独自コンポネントでJPanelに影響を受け手欲しくなければJComponent
0401デフォルトの名無しさん
2007/05/12(土) 15:54:29できないなら正確なサイズを知る事はできるのでしょうか?
0402デフォルトの名無しさん
2007/05/12(土) 16:35:130403デフォルトの名無しさん
2007/05/12(土) 17:52:56JFrameの方はなんとなくわかったのですが
メニューバーの方はわからないのでもう少しヒントをくれるとありがたいです
0404デフォルトの名無しさん
2007/05/12(土) 18:11:44menuBar.setPreferredSize(new Dimension(size.width, 200));
0405デフォルトの名無しさん
2007/05/12(土) 18:35:470406デフォルトの名無しさん
2007/05/23(水) 23:57:55class testKeyEv extends JComponent {
public testKeyEv(){
enableEvents(AWTEvent.KEY_EVENT_MASK);
addKeyListener(new stateCheckKeyHandler());
setFocusable(true);
}
}
setGlassPane()でセットして実行すると、始めはちゃんとキーイベントを取得してくれるのですが、
マウスでほかのボタンをクリックしたりすると二度とキーイベントを取得してくれません。
ちなみに stateCheckKeyHandlerはKeyAdapterをextendsしたのもです。
マウスイベントはほかのコンポーネントにそのまま渡して、KeyEventだけを常に取得し続けるには
どうすればいいでしょうか?
0407デフォルトの名無しさん
2007/05/24(木) 00:13:430408デフォルトの名無しさん
2007/05/24(木) 01:57:16最初から中のコンポーネントにフォーカス当ててそっちでキーイベント拾いましょう
# 関係ないけどリスナーを登録してイベントとるなら enableEvents() は必要ないんじゃなかったっけ?
0409デフォルトの名無しさん
2007/05/25(金) 19:47:41ツリーのノードによってノード毎に違うテキストのツールチップを表示しなきゃいけないんだけど、
この方法はJTreeのgetTooltipText()でノード別のテキスト返すように
オーバーライドするとして、ツールチップテキストを設定するタイミングはどのぶぶん?
カスタムセルレンダラ使ってるんでセルレンダラがレンダリングコンポーネント返す時にそのコンポーネントに
テキスト設定しようと思ってるんだけど、それで良いかな?
ググって漁ってみたんだけど他に思いつかない。アプローチが間違ってんのかすらも分からない。
教えてエロいひと。
0410デフォルトの名無しさん
2007/05/25(金) 21:05:28スクロールとかウインドウの重なり具合とか最大縮小するだけでもよばれるけどそのタイミングでいいの?
0411デフォルトの名無しさん
2007/05/25(金) 21:13:50JComponentのgetToolTipTextをオーバーライドすればいい
0412デフォルトの名無しさん
2007/05/25(金) 21:16:13何のための引数かと
0413デフォルトの名無しさん
2007/05/25(金) 21:50:21と言う名で作りました。
あらかじめNetBeansで個数分貼り付けちゃいました。
それぞれにある一定の処理をしたいのですが。
forなど繰り返し処理のなかで出来るようにしたいです。
JTextFieldの配列などに繋げれば出来そうですが、
それでは最初に全部個数分繋げる作業が必要になるわけです。
JTextFieldの数が大量になった場合大変ですから。
なんとか名前の数字を変更してアクセスする方法ないでしょうか。
よろしくお願いします。
0414デフォルトの名無しさん
2007/05/25(金) 22:41:500415デフォルトの名無しさん
2007/05/26(土) 01:28:30ローカル変数だと出来ないけど。
0416デフォルトの名無しさん
2007/05/26(土) 01:38:03f1,f2,f3,f4,f5,f6,f7 は、とりあえず そのままにしといて、
配列必要になったら new JTextField[]{f1,f2,f3,f4,f5,f6,f7} して配列作るとかすれば?
0417デフォルトの名無しさん
2007/05/26(土) 02:37:48ありがさうございました。(^v^)
0418デフォルトの名無しさん
2007/05/27(日) 04:38:44そんな事はできてもする設計にしてはいけない・・・・
>>417
>>414案が妥当だと思った。が、別に特別にPanelを用意せずにnameプロパティに
何か分かりやすいのを振っておいてコンポネントをより分ければいいと思う。
0419デフォルトの名無しさん
2007/05/27(日) 07:37:22ありがと、できたよ。ソースコード見てみたけどJTree#getTooltipText(MouseEvent)が
回りくどい実装してたんだね。
0420デフォルトの名無しさん
2007/05/27(日) 13:55:22> そんな事はできてもする設計にしてはいけない
同じようなことをたくさんやるときに、利用するのはとても効率的だと思うよ。
リフレクション使って配列に格納するメソッドを用意しておいて、実際の利用は配列を使うというのがいいかと。
nameプロパティ使うのと、本質的な差はあまりないと思う。
0421デフォルトの名無しさん
2007/05/27(日) 16:29:51一般のコードには入れない方がいいと思うんだ・・・・
だから>>420 の利用する部分との分離がいいな
0422デフォルトの名無しさん
2007/05/28(月) 11:45:44リフレクションを使うってことは,せっかく(記述が面倒な)Javaを使うことで得られる
強力なコンパイラの型チェックをスルーしてアクセスするわけだからライブラリや
フレームワークにしてそれなりにテストした上で使うのがいい使い方なんだろうね…
# ってかリフレクションを無駄に使ってるJavaアプリケーション見るとそれならもっと動的な言語使えよとか思う…
0423デフォルトの名無しさん
2007/05/28(月) 11:51:13アプリ側で出てきたときにはそれはもはや実装のバグとよんでもよいかと
0424デフォルトの名無しさん
2007/05/28(月) 12:01:45インスタンス生成みたいな用途が多いと思ってたんだけど、
アクセス制限を回避するなんてキチガイじみた目的がメインで使う人もいるのか……
0425デフォルトの名無しさん
2007/05/28(月) 12:13:45使ってないんじゃね? 思いつく用途がそれだけだっただけで。
0426デフォルトの名無しさん
2007/05/28(月) 12:23:08ライブラリやフレームワークで独自のシリアライズとかする場合には
private なインスタンス変数にアクセスする用途に使われる
まぁメインの用途ではないよね.普通の用途なら Bean の getter, setter呼ぶのに使うとか?
0427デフォルトの名無しさん
2007/05/28(月) 13:04:55DIとかフレームワーク側は普通に使うよ
0428デフォルトの名無しさん
2007/05/28(月) 14:27:56宣言をprivateにしておいて、値は特別な仕組みでリフレクション使って設定するようにして、通常のコードからは値が変更できないようにしておくとか。
0429デフォルトの名無しさん
2007/05/28(月) 14:29:520430デフォルトの名無しさん
2007/05/28(月) 14:38:560431デフォルトの名無しさん
2007/05/28(月) 14:57:08interface 定義してどうのこうのの方がよろしくね?
add した時に add された側(コンテナじゃなくてコンポーネント)で
呼び出されるメソッド(イベント)とかって無いんだろうか。
0432デフォルトの名無しさん
2007/05/28(月) 15:46:09HierarchyListener#hierarchyChanged(HierarchyEvent)
イベント内容で判断しないといけないけど。
0433デフォルトの名無しさん
2007/05/28(月) 16:42:08イディオムになるくらいよく出てくるならそこだけ纏めても別にかまわないと思うが->変なリフレクション
というか纏めてくれないとぬっころすって事にならんか?
0434デフォルトの名無しさん
2007/05/28(月) 21:58:32static <T> List<T> getInstances(Object parent, Class<T>, String prefix)
でこんな感じで使えるようにする。
List<JTextField> fields = getInstances(window, JTextField, "f");
0435デフォルトの名無しさん
2007/05/28(月) 23:55:10設計からやり直した方がよくないか?
テキストフィールドのコンテナクラスを自作するとか。その程度の手間で解決できそうじゃない?
0436デフォルトの名無しさん
2007/05/29(火) 00:08:13数値部分だけ違うインスタンス変数が並ぶんだよな。
手で作れば真っ先に配列か何かにするところなんだが。
0437デフォルトの名無しさん
2007/05/29(火) 01:56:410438デフォルトの名無しさん
2007/05/29(火) 04:42:38配置の自由度が低すぎるので採用できる場面は少なそう。
いまさら手コーディングでGUIも作れんし。
VEなりNetBeansなりが、コンポーネント配列に対応してくれればいいのだけど。
0439デフォルトの名無しさん
2007/05/29(火) 06:03:52ああ、ようやっと変なリフレクションが欲しい場合の文脈が読めた。
GUIビルダーつかってデザインした複数フィールドの時はたしかに欲しいかも。
普段は手で作ってるからそんなに欲しいと思わないけど忙しい時だと欲しいかもしらん。
0440デフォルトの名無しさん
2007/05/29(火) 08:11:520441デフォルトの名無しさん
2007/05/29(火) 10:45:310442デフォルトの名無しさん
2007/05/29(火) 11:15:12いや、そっちのコンテナじゃなくてjavaでいうならコレクションみたいな感じ。
そのコレクションをコンポーネント間で共有するか誰か管理クラスに持たせて問い合わせるようにすれば
コレクションそのものも、フィールドへもアクセスの自由度は確保できる。
外の様子知るためだけにリフレクションは流石にアプリケーションソフトとしてはまずい。
てか、javaでデスクトップアプリ作っててコレクション使う場合が俺には
クラスの動的ロード+コンストラクタorファクトリメソッド呼び出ししか思いつかん。
webフレームワークとかjavascriptならね。
0443デフォルトの名無しさん
2007/05/29(火) 11:27:180444デフォルトの名無しさん
2007/05/29(火) 14:00:09日本語でお・ね・が・い♪
0445デフォルトの名無しさん
2007/05/29(火) 17:04:37初期化時にインスタンス管理クラス呼び出して
自分を登録するようなクラス作成すれば
ポトペタでも管理出来る。けどキモいな。
0446デフォルトの名無しさん
2007/05/29(火) 18:29:110447デフォルトの名無しさん
2007/05/30(水) 02:06:070448デフォルトの名無しさん
2007/05/30(水) 03:30:010449デフォルトの名無しさん
2007/05/30(水) 11:23:390450デフォルトの名無しさん
2007/05/30(水) 12:24:33そのための名前をどうするか。
0451デフォルトの名無しさん
2007/05/30(水) 12:34:39もちろん変数はJTextFieldのままでいい
0452デフォルトの名無しさん
2007/05/30(水) 12:47:07間にJPanel1枚挟んでレイアウトするケースもあるし、
そう単純には行かないんじゃない?
0453デフォルトの名無しさん
2007/05/30(水) 13:44:12ララァは賢いな。
0454デフォルトの名無しさん
2007/05/30(水) 15:49:120455デフォルトの名無しさん
2007/05/30(水) 18:08:480456デフォルトの名無しさん
2007/05/31(木) 03:29:09じゃまです。
0457デフォルトの名無しさん
2007/05/31(木) 04:30:18わざわざ継承使ってコンポーネント作るなら、他に特別な仕組みがいらないリフレクションの方がいいと思うよ。
普通にGUIエディタが使えるし。
順番の指定とかはどうすんの?
0458457
2007/05/31(木) 04:36:09単にコンポーネント配列のために継承使うのはあまりいいとは思えんのだが。
GUIエディタ使いたい場合だと、「変数名を適切に指定して、あるメソッドに食わせたら配列ができる」ってのが一番手軽で影響範囲が少ないと思うのだが。
ここでのリフレクション否定の意見って、「リフレクションだからリフレクションはダメ」という理由ばかりな気がする。
0459デフォルトの名無しさん
2007/05/31(木) 04:38:04そういうセリフあったっけ?
0460デフォルトの名無しさん
2007/05/31(木) 05:35:580461デフォルトの名無しさん
2007/05/31(木) 09:38:42シーンは違うがこれだな
ttp://www.geocities.co.jp/AnimeComic-Pastel/3829/words40_Gundam.html
0462デフォルトの名無しさん
2007/05/31(木) 10:02:260463デフォルトの名無しさん
2007/05/31(木) 11:43:19GUIエディタってのがNetBeansなら継承やマーカーインターフェースは普通につけれるし
順番の制御をしたいのならなおさらかと
0464デフォルトの名無しさん
2007/06/01(金) 11:37:19順番制御とか考えなきゃならんなら
最初から手で書けよ感がするけど。
0465デフォルトの名無しさん
2007/06/01(金) 21:38:57JMenuBar で作成したメニューが Canvas3D の背後に隠れてしまうんですが、
解決できないものでしょうか。
0466デフォルトの名無しさん
2007/06/01(金) 21:45:350467465
2007/06/01(金) 21:48:55java.lang.Object
extended by java.awt.Component
extended by java.awt.Canvas
extended by javax.media.j3d.Canvas3D
0468デフォルトの名無しさん
2007/06/01(金) 21:49:57JPopupMenu#setLightWeightPopupEnabled(boolean) に false渡してもだめ?
0469465
2007/06/01(金) 21:53:180470デフォルトの名無しさん
2007/06/01(金) 21:58:08http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/JMenu.html
> メニューというのは実質的には JPopupMenu が割り当てられたボタンのことです。
JMenu#getPopupMenu()
0471465
2007/06/01(金) 21:58:37JMenu fileMenu = new JMenu("ファイル");
fileMenu.getPopupMenu().setLightWeightPopupEnabled(false);
0472デフォルトの名無しさん
2007/06/01(金) 22:40:36JOGLだったらGLJPanelで問題なしだが
0473デフォルトの名無しさん
2007/06/02(土) 10:24:380474デフォルトの名無しさん
2007/06/02(土) 10:59:080475デフォルトの名無しさん
2007/06/02(土) 11:08:550476デフォルトの名無しさん
2007/06/02(土) 14:40:13Intelのドライバの問題で対応できないのか、対応しないだけなのか分からないけど。。。
0477デフォルトの名無しさん
2007/06/02(土) 17:15:580478デフォルトの名無しさん
2007/06/11(月) 11:25:53ttp://2sen.dip.jp:81/cgi-bin/upgun/up1/source/up5993.jpg
のようにフォントの大部分が太字になってしまいます。
試しに
JFileChooser chooser = new JFileChooser();
chooser.setFont(new Font("Dialog", Font.PLAIN, 12));
のようにしてもダメでした。
どうすればこの太字をFont.PLAINにできるのでしょうか?
識者の方々、どうかアドバイスをお願いいたします。
OS:Windows2000、XP
JDK:1.6.0、1.6.0_01
でそれぞれ試してみました。
0479デフォルトの名無しさん
2007/06/11(月) 12:05:150480デフォルトの名無しさん
2007/06/11(月) 13:15:320481デフォルトの名無しさん
2007/06/11(月) 13:16:55http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Font.html
0482デフォルトの名無しさん
2007/06/11(月) 14:05:12UIManager.setLookAndFeel()
0483デフォルトの名無しさん
2007/06/11(月) 14:23:31http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page=LookAndFeel
フォントを指定して起動する
SwingのデフォルトのLook & FeelであるMetalはメニュー等のフォントがBoldでいまいち見た目がよくありません(JDK1.3までは普通だったのですが…)。JavaVMに起動オプションを与えることで、このフォントを変更することができます。
java -Dswing.plaf.metal.controlFont=Dialog-12 alpha.AppMain
また、JDK1.5ではMetalLookAndFeelでPLAINなフォントを使用するために以下のオプションが利用可能です。
-Dswing.boldMetal=false
コマンドラインオプションではなく、Javaコード中で設定する場合には以下のようにします。
UIManager.put("swing.boldMetal", Boolean.FALSE);
0484478
2007/06/11(月) 15:58:38おおお、ベストアンサーでした。
ありがとうございます!
これで他のコンポーネントもsetFont(new Font("Dialog", Font.PLAIN, 12))をしなくて済みました。
他にもレスをくださった皆様方ありがとうございました。
0485デフォルトの名無しさん
2007/06/11(月) 16:16:40■ このスレッドは過去ログ倉庫に格納されています