トップページ⇒tech
1001コメント320KB

Java低速GUI Swing 5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/18(水) 11:50:09
ハードウェアの高スペック化、JavaVMのホットスポットの高速化に伴い、
パフォーマンスの問題は徐々にですが改善されつつあります。
しかしながら、"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
0348デフォルトの名無しさん2007/02/28(水) 08:22:12
> button.setAction(actionMap.get("onClick"));
とかSwing信者から見ると気持ち悪いんだけど。
サーバサイドで慣らされてる人は平気なのかな。
0349デフォルトの名無しさん2007/02/28(水) 11:19:14
いやー平気じゃないと思うぞ
ロジック部分の呼び出しとかなら祖結合でいいけど
各種イベントでコンポーネントの状態を変更しないといけない密結合ではクラス分離して書くということはまずできないし

あのフレームワークの存在意義がわからないとはずっと前からいわれてきたし
startupとかはまぁイベントディスパッチスレッドを意識させないという意味があるのだろうけど
イベントディスパッチスレッドを意識してないと並列動作できないしな
0350デフォルトの名無しさん2007/02/28(水) 13:10:09
そうだね。Webのフレームワークみたいな役割を期待するとすると、
ロジックとGUIの分離、つまり同じアプリでSwing実装とSWT実装と
Struts実装をやりたい場合とか、そういうときに使えるものを
期待してしまう。
0351デフォルトの名無しさん2007/03/02(金) 23:00:01
JDK6のSwingのWindows LaF (Vista)で、JTableのヘッダの高さが通常の2倍ぐらいあるのですが、
これはなんとかならんもんでしょうか。
0352デフォルトの名無しさん2007/03/03(土) 00:24:29
通常の3倍じゃなくて良かったな
0353デフォルトの名無しさん2007/03/08(木) 16:43:26
>>352
オレが思いついてもあえて書かなかったことを・・・
0354デフォルトの名無しさん2007/03/09(金) 12:48:50
機体性能が3倍あるわけじゃないんだぜ?
0355デフォルトの名無しさん2007/03/13(火) 10:35:26
ザク、、、いや、何でもない。
0356デフォルトの名無しさん2007/03/15(木) 21:09:44
SE6になってjavax.swing.undoのドキュメントの一部が丁寧になって少しましになってる。
0357デフォルトの名無しさん2007/03/15(木) 23:02:04
JDK6の日本語マニュアルでたのか?
0358デフォルトの名無しさん2007/03/15(木) 23:15:15
作業中の物ならここに。
ttps://jdk-api-ja.dev.java.net/ja/index.html
0359デフォルトの名無しさん2007/03/15(木) 23:54:52
http://java.sun.com/javase/ja/6/docs/ja/index.html
0360デフォルトの名無しさん2007/03/16(金) 03:24:01
>>359
新機能とかまず概要の日本語がないってことはいまだ未完成ってことね
0361デフォルトの名無しさん2007/03/19(月) 15:45:38
既出かもしれないけど、こんなもの見つけた。
http://journal.mycom.co.jp/column/jsr/006/

手動でリスナ書く手間から開放されるというのはかなり幸せかも。
0362デフォルトの名無しさん2007/03/19(月) 17:02:51
そいつを使うと、コード書かなくてよくなる
http://www.netbeans.org/download/flash/netbeans_6_gui_builder/netbeans_6_gui_builder.html
0363デフォルトの名無しさん2007/03/19(月) 17:12:57
>>361
Beans Binding って Cocoa Binding みたいなもの?
0364デフォルトの名無しさん2007/03/19(月) 17:19:38
似てるね。
0365デフォルトの名無しさん2007/04/02(月) 17:44:32
YAGI3
0366デフォルトの名無しさん2007/04/03(火) 21:26:15
apolloってJWSを食ってしまいそうだな
0367デフォルトの名無しさん2007/04/03(火) 22:16:28
それはないだろ。
食われるほどのJWSの裾野はないし、今JWSでやってるものをおきかえれるほどの力はFlashにはない。
0368デフォルトの名無しさん2007/04/04(水) 01:19:08
>>366
むしろJavaアプリの中でApolloのWeb連携機能が使いたいなぁ
0369デフォルトの名無しさん2007/04/07(土) 16:00:15
SwingでGoogleCalendarみたいなUIをつくることって出来るんでしょうか??
ためしに作ってみようかと思ったんですが、Swingに余り詳しくないのでそもそもどういう風に作れば良いのかわからず悩み中です。
0370デフォルトの名無しさん2007/04/07(土) 16:14:18
ブラウザで出来る程度のことはすべて可能
Swingに詳しいかどうかってのも関係ないな
0371デフォルトの名無しさん2007/04/07(土) 17:22:07
JComboBoxについて質問です。

項目によって、色・フォント・背景色などを
分けたいのですができますか?
もしできるなら教えてください。
お願いします。
0372デフォルトの名無しさん2007/04/07(土) 18:50:31
JComboBox ListCellRendererでググればやりたいことは見つかると思う
03733692007/04/07(土) 20:02:11
>>370
どうもです。GUIはweb系しか作ったことがなかったんで悩んでました。
HTMLに慣れた身にはSwingは面倒くさくてなかなか作る気が起きませんね・・・。
カレンダー部分は線を描画して書くことになるのかなぁ。
0374デフォルトの名無しさん2007/04/07(土) 20:53:24
全部自前で描画してもいいし
適当にラベルをならべる程度でもいいし
お好きなように
03753712007/04/07(土) 21:37:25
>>372
有難うございました。
やりたい事ができました。
0376デフォルトの名無しさん2007/04/08(日) 00:33:25
>>373
やる気がなければ何もできませんな
何で作るのよ
0377デフォルトの名無しさん2007/04/08(日) 00:38:41
本当はWEBアプリのほうが面倒なんだけどな
ダイナミックに動かすにはイベントは別言語を使わなければならないし、
環境依存性が高い

そして通信部分も再読み込みとか2度押し防止とかいろいろと考慮する必要有、と
0378デフォルトの名無しさん2007/04/08(日) 02:30:49
> 373
JLabelにHTML貼り付けでOK
0379デフォルトの名無しさん2007/04/08(日) 23:38:16
>>378
せめてJEditorPaneだと思ったらw
0380デフォルトの名無しさん2007/04/10(火) 22:05:12
swingで作ったGUIアプリを
常に前面に表示させたいんですが、できますか?
もしできるなら教えてください。
お願いします。
0381デフォルトの名無しさん2007/04/10(火) 22:11:17
>>380
1.5 以降なら java.awt.Window#setAlwaysOnTop(boolean) を使う。

それ以前なら標準では無理。
例えば Windows なら JNI経由で java.awt.Window の HWND 得て、SetWindowPos すればできるけど。
0382デフォルトの名無しさん2007/04/10(火) 22:20:42
>>380
できました。
素早い回答ありがとうございました。
03833822007/04/10(火) 22:21:45
すいません、僕は>>380です。
>>381さん有難うございました。
0384デフォルトの名無しさん2007/04/13(金) 00:02:44
すべてのコンポーネントのセットをJPanelをExtendsしたオリジナルなコンポーネントにしておいて
JFrameのレイアウトに置いていく作りにしてるんだけど、これでイケテル?
0385デフォルトの名無しさん2007/04/13(金) 00:17:50
いろんな意味で意味がわかんない
0386384じ2007/04/13(金) 00:30:50
自分でも読んでて意味わかんないやw
巧く説明できないのでおやすみなさい
0387デフォルトの名無しさん2007/04/13(金) 00:31:04
http://www.tohoho-web.com/java/layout.htm
これの一番下の事を言っているのでは
0388デフォルトの名無しさん2007/04/13(金) 02:46:21
>>384
うーん、単にJPanelを置いてその中にコンポーネント配置していけばいいんじゃないのかな?
0389デフォルトの名無しさん2007/04/13(金) 03:07:27
>>384が言いたいのは、
public class HogePanel extends JPanel{...} として作っておけば、
JFrame, JInternalFrame, JApplet, JTabbedPane などに乗っけるだけで
いろいろ使える、って意味では?
再利用性を高めるやり方としては間違ってないと思う。
再利用の必要がないなら無駄だけど、個人的にこういう作りは好きだ。
0390デフォルトの名無しさん2007/04/13(金) 03:27:30
>>389
つまりJColorChooserみたいな複合ウィジェットを作って再利用ってだけの話なのかね?
JPanelじゃなくてJComponentでいい気がするけど…
03913842007/04/13(金) 22:13:53
>>389-390
そのとおりです!
気持ちが伝わってなんか嬉しいっす。
JComponentですか。思いつきませんでした。どっちがメリットあるかなぁ。
0392デフォルトの名無しさん2007/04/13(金) 23:03:48
JPanelのソース見てみ。JComponentほとんどそのままだ。
0393デフォルトの名無しさん2007/04/14(土) 15:46:11
複合ウィジェットならJPanelが自然でしょ。
0394デフォルトの名無しさん2007/04/14(土) 18:29:58
>>393
awt では Panel 使ったけどが swing で JComponent が Container に
なったから JPanel にする必要は全くなくなったのでは…?
0395デフォルトの名無しさん2007/04/14(土) 18:32:06
>>393
どっからそんな情報が沸いてくるん?
0396デフォルトの名無しさん2007/04/14(土) 18:35:58
>>394
JComponentはObjectのようなSwingコンポーネントのルートクラスだから
継承するならいいけどぽとぺたやるならJPanelで
0397デフォルトの名無しさん2007/04/14(土) 20:44:27
>>396
具体的にJPanelのどの部分がぽとぺたに向いているのでしょうか?
あるいは JComponent のどの部分が向いてないのでしょう?
0398デフォルトの名無しさん2007/04/14(土) 20:58:04
背景が透明か不透明かが違いじゃないん?
0399デフォルトの名無しさん2007/04/14(土) 21:03:47
JComponentはこっそりabstractクラスなので、そのまま載せようとして
あれ? と思ったことはあるが、どうせ継承して使うだろうし、あえて
JPanelでなければならないことはなさそうだな。

ただ、ポトペタだとソースレベルで継承して使うことにはおそらくならな
いだろうから、JPanelでないと駄目かも。

0400デフォルトの名無しさん2007/04/14(土) 21:18:23
思想的にJComponent使うなら新しいコンポネント作るくらいの意味合いだな
JPanelを使った場合、JPanelの機能変更に引きずられる可能性がある
それを望むのであればJPanelの上にまとめればよい
独自コンポネントでJPanelに影響を受け手欲しくなければJComponent
0401デフォルトの名無しさん2007/05/12(土) 15:54:29
JFrameの外枠とかメニューバーのサイズを変える事はできるのでしょうか?
できないなら正確なサイズを知る事はできるのでしょうか?
0402デフォルトの名無しさん2007/05/12(土) 16:35:13
つ Insets
0403デフォルトの名無しさん2007/05/12(土) 17:52:56
ありがとうございます
JFrameの方はなんとなくわかったのですが
メニューバーの方はわからないのでもう少しヒントをくれるとありがたいです
0404デフォルトの名無しさん2007/05/12(土) 18:11:44
Dimension size = menuBar.getPreferredSize();
menuBar.setPreferredSize(new Dimension(size.width, 200));
0405デフォルトの名無しさん2007/05/12(土) 18:35:47
ありがとうござました
0406デフォルトの名無しさん2007/05/23(水) 23:57:55
JFrame上のKeyEventを常に取得したいと思いまして、次のようなクラスを

class 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:43
そのフォーカスがあたったコンポーネントでは通常の動作はしていいの?
0408デフォルトの名無しさん2007/05/24(木) 01:57:16
>>406
最初から中のコンポーネントにフォーカス当ててそっちでキーイベント拾いましょう
# 関係ないけどリスナーを登録してイベントとるなら enableEvents() は必要ないんじゃなかったっけ?
0409デフォルトの名無しさん2007/05/25(金) 19:47:41
JTreeのノードをDnDで移動できるようにしたんだけど、その関係で
ツリーのノードによってノード毎に違うテキストのツールチップを表示しなきゃいけないんだけど、
この方法はJTreeのgetTooltipText()でノード別のテキスト返すように
オーバーライドするとして、ツールチップテキストを設定するタイミングはどのぶぶん?
カスタムセルレンダラ使ってるんでセルレンダラがレンダリングコンポーネント返す時にそのコンポーネントに
テキスト設定しようと思ってるんだけど、それで良いかな?

ググって漁ってみたんだけど他に思いつかない。アプローチが間違ってんのかすらも分からない。

教えてエロいひと。
0410デフォルトの名無しさん2007/05/25(金) 21:05:28
レンダラのタイミングだとレンダリングし終わるとその後ずっと呼ばれないし、
スクロールとかウインドウの重なり具合とか最大縮小するだけでもよばれるけどそのタイミングでいいの?
0411デフォルトの名無しさん2007/05/25(金) 21:13:50
ヒントもあたえたほうがいいか
JComponentのgetToolTipTextをオーバーライドすればいい
0412デフォルトの名無しさん2007/05/25(金) 21:16:13
「普通に」がぬけてた・・・
何のための引数かと
0413デフォルトの名無しさん2007/05/25(金) 21:50:21
TextField を f1,f2,f3,f4,f5,f6,f7

と言う名で作りました。
あらかじめNetBeansで個数分貼り付けちゃいました。

それぞれにある一定の処理をしたいのですが。
forなど繰り返し処理のなかで出来るようにしたいです。

JTextFieldの配列などに繋げれば出来そうですが、
それでは最初に全部個数分繋げる作業が必要になるわけです。
JTextFieldの数が大量になった場合大変ですから。

なんとか名前の数字を変更してアクセスする方法ないでしょうか。
よろしくお願いします。
0414デフォルトの名無しさん2007/05/25(金) 22:41:50
JTextFieldだけを乗せるJPanel(というかContainer)を作って、getComponentsを呼び出せばいいかもね
0415デフォルトの名無しさん2007/05/26(土) 01:28:30
メンバー変数としてf1,f2,...があるのならリフレクションで取れるよ。
ローカル変数だと出来ないけど。
0416デフォルトの名無しさん2007/05/26(土) 01:38:03
>>413
f1,f2,f3,f4,f5,f6,f7 は、とりあえず そのままにしといて、
配列必要になったら new JTextField[]{f1,f2,f3,f4,f5,f6,f7} して配列作るとかすれば?
0417デフォルトの名無しさん2007/05/26(土) 02:37:48
>>414さん、>>415さん、>>416さん
ありがさうございました。(^v^)
0418デフォルトの名無しさん2007/05/27(日) 04:38:44
>>415
そんな事はできてもする設計にしてはいけない・・・・
>>417
>>414案が妥当だと思った。が、別に特別にPanelを用意せずにnameプロパティに
何か分かりやすいのを振っておいてコンポネントをより分ければいいと思う。
0419デフォルトの名無しさん2007/05/27(日) 07:37:22
>>410
ありがと、できたよ。ソースコード見てみたけどJTree#getTooltipText(MouseEvent)が
回りくどい実装してたんだね。
0420デフォルトの名無しさん2007/05/27(日) 13:55:22
>>418
> そんな事はできてもする設計にしてはいけない

同じようなことをたくさんやるときに、利用するのはとても効率的だと思うよ。
リフレクション使って配列に格納するメソッドを用意しておいて、実際の利用は配列を使うというのがいいかと。
nameプロパティ使うのと、本質的な差はあまりないと思う。
0421デフォルトの名無しさん2007/05/27(日) 16:29:51
リフレクションってのは、フレームワークレベルで使うのはいいと思うが
一般のコードには入れない方がいいと思うんだ・・・・
だから>>420 の利用する部分との分離がいいな
0422デフォルトの名無しさん2007/05/28(月) 11:45:44
>>421
リフレクションを使うってことは,せっかく(記述が面倒な)Javaを使うことで得られる
強力なコンパイラの型チェックをスルーしてアクセスするわけだからライブラリや
フレームワークにしてそれなりにテストした上で使うのがいい使い方なんだろうね…
# ってかリフレクションを無駄に使ってるJavaアプリケーション見るとそれならもっと動的な言語使えよとか思う…
0423デフォルトの名無しさん2007/05/28(月) 11:51:13
プライベートなものも自由に触れるからな
アプリ側で出てきたときにはそれはもはや実装のバグとよんでもよいかと
0424デフォルトの名無しさん2007/05/28(月) 12:01:45
リフレクションって、どっちかっつーとコンストラクタ貰ってきて
インスタンス生成みたいな用途が多いと思ってたんだけど、

アクセス制限を回避するなんてキチガイじみた目的がメインで使う人もいるのか……
0425デフォルトの名無しさん2007/05/28(月) 12:13:45
>>424
使ってないんじゃね? 思いつく用途がそれだけだっただけで。
0426デフォルトの名無しさん2007/05/28(月) 12:23:08
>>424
ライブラリやフレームワークで独自のシリアライズとかする場合には
private なインスタンス変数にアクセスする用途に使われる
まぁメインの用途ではないよね.普通の用途なら Bean の getter, setter呼ぶのに使うとか?
0427デフォルトの名無しさん2007/05/28(月) 13:04:55
>>424
DIとかフレームワーク側は普通に使うよ
0428デフォルトの名無しさん2007/05/28(月) 14:27:56
ここで反論する理由がひとつでもある人は、使ってもいいと思う。
宣言をprivateにしておいて、値は特別な仕組みでリフレクション使って設定するようにして、通常のコードからは値が変更できないようにしておくとか。
0429デフォルトの名無しさん2007/05/28(月) 14:29:52
フレームワークで使うのは誰も否定してないんじゃね?
0430デフォルトの名無しさん2007/05/28(月) 14:38:56
ちょっとスレから外れてきた。 Java 低速GUI ネタよろ…
0431デフォルトの名無しさん2007/05/28(月) 14:57:08
今回の件に関しては reflection 使わずに
interface 定義してどうのこうのの方がよろしくね?

add した時に add された側(コンテナじゃなくてコンポーネント)で
呼び出されるメソッド(イベント)とかって無いんだろうか。
0432デフォルトの名無しさん2007/05/28(月) 15:46:09
>>431
HierarchyListener#hierarchyChanged(HierarchyEvent)
イベント内容で判断しないといけないけど。
0433デフォルトの名無しさん2007/05/28(月) 16:42:08
>>424
イディオムになるくらいよく出てくるならそこだけ纏めても別にかまわないと思うが->変なリフレクション
というか纏めてくれないとぬっころすって事にならんか?
0434デフォルトの名無しさん2007/05/28(月) 21:58:32
こんな感じのメソッドを定義しておけばいいんだよね。
static <T> List<T> getInstances(Object parent, Class<T>, String prefix)
でこんな感じで使えるようにする。
List<JTextField> fields = getInstances(window, JTextField, "f");
0435デフォルトの名無しさん2007/05/28(月) 23:55:10
>>434
設計からやり直した方がよくないか?
テキストフィールドのコンテナクラスを自作するとか。その程度の手間で解決できそうじゃない?
0436デフォルトの名無しさん2007/05/29(火) 00:08:13
ポトペタで同じような部品を並べていくとその手の変数名が
数値部分だけ違うインスタンス変数が並ぶんだよな。
手で作れば真っ先に配列か何かにするところなんだが。
0437デフォルトの名無しさん2007/05/29(火) 01:56:41
ポトペタで配列作ればいいじゃんw
0438デフォルトの名無しさん2007/05/29(火) 04:42:38
>>435
配置の自由度が低すぎるので採用できる場面は少なそう。
いまさら手コーディングでGUIも作れんし。
VEなりNetBeansなりが、コンポーネント配列に対応してくれればいいのだけど。
0439デフォルトの名無しさん2007/05/29(火) 06:03:52
>>438
ああ、ようやっと変なリフレクションが欲しい場合の文脈が読めた。
GUIビルダーつかってデザインした複数フィールドの時はたしかに欲しいかも。

普段は手で作ってるからそんなに欲しいと思わないけど忙しい時だと欲しいかもしらん。
0440デフォルトの名無しさん2007/05/29(火) 08:11:52
NeXTやOSXにはあるね
0441デフォルトの名無しさん2007/05/29(火) 10:45:31
リフレクションとこのぽとぺたとは関係ないぞ
0442デフォルトの名無しさん2007/05/29(火) 11:15:12
>>483
いや、そっちのコンテナじゃなくてjavaでいうならコレクションみたいな感じ。
そのコレクションをコンポーネント間で共有するか誰か管理クラスに持たせて問い合わせるようにすれば
コレクションそのものも、フィールドへもアクセスの自由度は確保できる。
外の様子知るためだけにリフレクションは流石にアプリケーションソフトとしてはまずい。

てか、javaでデスクトップアプリ作っててコレクション使う場合が俺には
クラスの動的ロード+コンストラクタorファクトリメソッド呼び出ししか思いつかん。
webフレームワークとかjavascriptならね。
0443デフォルトの名無しさん2007/05/29(火) 11:27:18
デスクトップアプリでコレクション???
0444デフォルトの名無しさん2007/05/29(火) 14:00:09
>>442
日本語でお・ね・が・い♪
0445デフォルトの名無しさん2007/05/29(火) 17:04:37
JTextField から派生して
初期化時にインスタンス管理クラス呼び出して
自分を登録するようなクラス作成すれば
ポトペタでも管理出来る。けどキモいな。
0446デフォルトの名無しさん2007/05/29(火) 18:29:11
ContainerListenerを使って、JTextFieldが追加されたときにArrayList<JTextField>に追加していくって手もあるな
0447デフォルトの名無しさん2007/05/30(水) 02:06:07
それだと、結局リフレクションが一番手間が少ない。
■ このスレッドは過去ログ倉庫に格納されています