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

Java低速GUI Swing 2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
そんなSwingと引き続き付き合っていくみんなのスレッドです。

前スレ
http://pc5.2ch.net/test/read.cgi/tech/1062271447/l50

参考スレ
Java 高速GUI SWT 2
http://pc5.2ch.net/test/read.cgi/tech/1068349883/l50
0286デフォルトの名無しさんNGNG
>>278
仕事なら、RAD環境のあるSwing。
手書きでGUI書くのは、むなしい。
0287デフォルトの名無しさんNGNG
つうかSWT語るならJFaceを忘れるなw
0288デフォルトの名無しさんNGNG
swing使うときにどんなGUIエディタ使っています?
手討ち??
0289デフォルトの名無しさんNGNG
>>273
> インターフェイス=見た目 だと思ってるバカ

271がいってるインターフェースは話の流れから察するにLook&Feelの
ことみたいだから見た目であってると思う。

んで、272のいってるUIマネージャ変えるってのはUIManager使って
Look&Feelを変更しろってことだと思う。たぶん。

自作のアプリじゃない場合は、オプションなどでデフォルトのLook&Feel
を指定すればいい。

> java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel MyApp

0290デフォルトの名無しさんNGNG
SwingのJTableで、セルのデータ検証(バリデーション)を行う標準的な
仕組ってないのかしらん?
今自前のAbstractTableModelとTableModelListenerを使ってやってるんだけど、
セルにデータを保存するとき、選択行が変わろうとするとき
で別々のリスナーを作らないと共通に使える仕組が作れないっぽい
0291デフォルトの名無しさんNGNG
>>288
NetBeansで。
0292デフォルトの名無しさんNGNG
まともにGUIやろうとしたらNetBeans以外ありえんね
0293デフォルトの名無しさんNGNG
eclipse + Visual Editor 見たいな、GUIプラグインの組み合わせは?
Visual Editorはeclipseプロジェクト内の発足だし、Version1.0もリリースされたから、結構使えるんじゃないかと思ってたんだが。
0294デフォルトの名無しさんNGNG
VEは使い物にならん
1.0になったというのはSwingを改良したというよりはSWT対応という意味が大きい
0295デフォルトの名無しさんNGNG
>>294
なんで使い物にならないんだ?


逆に、SWTなら、使い物になるのか・・・?
0296デフォルトの名無しさんNGNG
SWTのほうが力はいってるとおもわれ
0297デフォルトの名無しさんNGNG
おれもNetbeans派なんだが、JBuilderはどうなんだろうと気になっている(使った事ないんで)。
使用者の感想はどうですか。
0298デフォルトの名無しさんNGNG
VE1.0.1.1でも使っててエラーログにどんどんぬるぽ溜まっていくとか
ちょっと品質悪いよね。1.1の計画からもSpring layout
対応とか外れるみたいだし、Swingに力が入ってるとは
思えないな。かといってSWT対応も主担当はIBMじゃなくて
ISCらしいし、どっちもIBMがまじめにやってる感じじゃなかったな。
まあVE1.0の見所を強いていうならEclipse3.0に対応し
ましたってとこじゃないの? 来週RAD6発売だけどVE1.0
からどこまで枯れたか見もの。
0299デフォルトの名無しさんNGNG
JBuilder昔使っていたけど、悪くはない
でもGUIエディタとしてNetBeansが細かいことができすぎる

ウィザードやら親切なものがJBuilderのほうが満載なので
最初にIDEにふれるならEclipseやNetBenasよりは先にさわらせたいかなぁ

地味にDB管理ツールがらくだったり
0300デフォルトの名無しさんNGNG
SWTはSWTで問題も多いからなぁ
SWTスレのぞいてみなされとしか
0301デフォルトの名無しさんNGNG
SWT はノキアやモトローラが味方について組み込み向け JFace とか
作るみたいだし、貧弱な実行環境向けでは残るんじゃないかな。
SwingもJ2ME向けにProfile作ればいいのにな。最近のPDAならそろそろ
いい気がする。
0302デフォルトの名無しさんNGNG
テキストエディタでSwingを使うのはおかしいのか…
0303デフォルトの名無しさんNGNG
V2Cの作者はemacsで作ってるとのこと
0304デフォルトの名無しさんNGNG
テキストエディタでGridbag書くのは精神衛生上よろしくない
0305デフォルトの名無しさんNGNG
>>302
おかしいとはいわないけど、量産にはむかない。
0306デフォルトの名無しさんNGNG
>>303
ツールの場合はRADのうまみがあまりないので、問題ないと思う。
業務システムで年端もいかないプログラマにコーディングさせると問題。
0307デフォルトの名無しさんNGNG
画面数少なければ、そりゃ問題ないよな・・・。
0308デフォルトの名無しさんNGNG
>>307
それと、ツールの場合、画面の動的な制御が多いから、RADであらかじめ画面を作れてもおいしくない。
0309デフォルトの名無しさんNGNG
そこでSwiXmlですよ
http://www.swixml.org/samples/index.html

SwiXml, is a small GUI generating engine for Java applications and applets. Graphical User Interfaces are described in XML documents that are parsed at runtime and rendered into javax.swing objects.

…いや、ThinletとかSwingMLでもいいかもしれないんだけどね
0310デフォルトの名無しさんNGNG
NetBeansのフォーム定義XMLからフォームが生成できるエンジンがあってもいいね。
0311デフォルトの名無しさんNGNG
>>309
すごいネーミングのセンスだな。
Xwingじゃだめだったのか?
0312デフォルトの名無しさんNGNG
>>311
Xwingは商標的な面倒に巻きこまれそうだ。
0313デフォルトの名無しさんNGNG
ある意味、宗教的
0314デフォルトの名無しさんNGNG
むしろ宗教そのもの
0315デフォルトの名無しさんNGNG
ちゃんとした現世利益があれば宗教だってかまわんだろ
0316デフォルトの名無しさんNGNG
>>310
それだ!

っていうか「NetBeansのフォーム定義XML」ってどういうの?
どっかに仕様書とかある?
.formファイルの例ってない?
ttp://jp.sun.com/software/sundev/ffj30/faq/GUI.html
とか見つけたけど、詳しく書いてないし。

当方eclipseユーザなもので…。
0317310NGNG
実は、前から作りたいと思って探してたんだけど、みあたらない。
本気では探してないけど。
NetBeansのXML定義からSpringやSeasarのBean定義に変換するのもおいしそう。
そんなアイデアも、form定義の仕様を探さないことには。
実際には、イベントまわりの実装に腐心しそうだ。
0318デフォルトの名無しさんNGNG
XMLからフォーム作るのはいいんだけど、イベントとか動的な処理をどこで設定するの?
0319309,316NGNG
>>318
SwiXmlの場合、
SwingEngine#render("コンポーネントのViewの定義.xml")で、
コンポーネントのツリーを組み立ててから、
SwingEngine#find("コンポーネントの名前")で、
該当するオブジェクトの参照を取り出して、
そこにイベントハンドラをaddしてゆく、
…というのが基本的な使い方になります。

>>317
このSwiXmlみたいに、
「XMLはViewを定義するだけ。Model や Controller は、Javaでソースを書け!」
ってことにして、とりあえず切り放して考える、というのもアリだと思うよ。
0320デフォルトの名無しさんNGNG
>>319
うん、おれは話題からして、UIをXMLからロードして作れる程度のものを想像していた。

SwingUIMgr mgr = new SwingUIMgr( hoge.xml);
JFrame frame = mgr.getJFrame( "hoge");

てな感じで。あとはframeつかって好きにしろや、ってことでよろしく。
0321デフォルトの名無しさんNGNG
XMLで別定義とかしたいところだが、特に要望の強いであろう業務系では
イベントとかの嵐だしプロパティをガンガンいじるからなぁ
0322デフォルトの名無しさんNGNG
NetBeansの.formファイルを、
XSLTでSwiXmlに変換して使えるとしたら、
実装はわりと簡単になるよな。
0323デフォルトの名無しさんNGNG
XMLもいいがGroovy(Groovy Markup)はどうかね。
0324デフォルトの名無しさんNGNG
>>323
どんな書き方になるの?
0325デフォルトの名無しさんNGNG
Groovy Markup。Swing以外にも使える。

ttp://groovy.codehaus.org/GroovyMarkup
0326デフォルトの名無しさんNGNG
>>318
現実的な話をすると、OGNLとか式言語を使えるようにして、リスナーを追加できるようにするのがいいのかと。
0327デフォルトの名無しさんNGNG
winlaf 0.5 が出ている。 https://winlaf.dev.java.net/
0328デフォルトの名無しさんNGNG
オススメのビルダー教えてください。
できれば無料ので
0329デフォルトの名無しさんNGNG
もっと勉強してからにしなさい
0330!= 328NGNG
>>329
何を勉強すればいいんですか?
0331デフォルトの名無しさんNGNG
329のように電波ゆんゆんになるための勉強(というか修行)
0332名無しNGNG
そういうことはhttp://shkell.net/でお願いします。
0333デフォルトの名無しさんNGNG
せっかくWindowsのシステムクリップボードにファイルをコピーできるようになったと思ったら
Linuxでは駄目なのね
悪いのは俺なのかJavaなのかLinuxなのか…
0334デフォルトの名無しさんNGNG
>>333
なんの話?
0335333NGNG
>>334
クリップボードはAWTだからスレ違いか
0336デフォルトの名無しさんNGNG
>>333
どっちかというと、「Linux」の名のもとにクリップボードの仕組みを統一できてないLinuxが悪いね。
0337デフォルトの名無しさんNGNG
現状LINUX上でCUIで動いているプログラムにできるだけ簡単に!、
GUIを実装したいのですが何を使ったらよいでしょうか?

javaでswingを使うなど考えたんですが、CUIとのデータのやり取り
が大変そう(自分の実力のなさから、、、)でどうしたものか悩んでるところです。
CUI側プログラムにwebサーバを実装して、GUI(javaが適当?)プログラムでは、
local接続して値をやりとりするってのはどうなんでしょか?
0338デフォルトの名無しさんNGNG
普通にファイル経由。これ。
0339デフォルトの名無しさんNGNG
>>337
CUI側のプログラムを別のマシンで動かそうという考えがなければ別にソケット使う必要はないよ
(別のマシンで動かす場合でもwebサーバー実装は大げさというか無意味)
0340デフォルトの名無しさんNGNG
>>337
そこでjettyですよ
http://jetty.mortbay.org/jetty/
0341デフォルトの名無しさんNGNG
>>337
RMIが楽じゃないの?
0342デフォルトの名無しさんNGNG
わざわざアプリ鯖立ち上げて通信させるくらいならそのままスタンドアロンアプリつくればよかろう
Swingってべつにそんなにたいへんなものではないし、レイアウトマネージャ理解してくれば別に問題なし

とりあえずNetBeansいれてぺたぺた貼り付けてみて問題があったらまた質問するがよろし
0343デフォルトの名無しさんNGNG
とりあえず、そのCUIのプログラムって、どんなアプリなんだよ?
0344デフォルトの名無しさんNGNG
Netbeans 4.0正式版が出たぜ!
0345デフォルトの名無しさんNGNG
Netbeans 4.0をいじってて気がついたが、実行コマンドbin/netbeansにMac OS X用に
unameが「Darwin」だったら、てなところがあるんだよな。

で試しにMac OS X独自のプロパティ「apple.laf.useScreenMenuBar」を追加して、trueに
してみた。起動してみたらちゃんとMacのメニューバーになってやがる。

これNetbeans 3.6のころはちゃんと動かなかったんだよ。しかしDarwinだったら特殊な
プロパティを設定するような起動ロジックを入れるんなら、はじめからこのプロパティも
設定しときゃいいのに....
0346345NGNG
ごめん、投げるところを間違えてるよな...
Netbeansスレに逝ってくる...orz
0347デフォルトの名無しさんNGNG
tableで現在表示されている、可視領域の行のtopのINDEXを取得
する方法ってありますか?
0348デフォルトの名無しさんNGNG
>>347
スクロールバーの値を取得して
JTableのrowAtPointを使えばいいんじゃない?
0349デフォルトの名無しさんNGNG
JTableで、スクロールバーのイベントを捕まえる
にはどうすればよいですか?
0350デフォルトの名無しさんNGNG
>>349
JTable自身はスクロールバーを持たない。
持つのは、JTableをviewに設定したJViewport。
あとはJViewportの持つJScrollBarを拾ってきてあれこれする。
0351デフォルトの名無しさんNGNG
>>347
atmarkit にも ほとんど同じ質問が出てるな。

そーいや Eclipse スレだったか SWT スレだったかで
JTable 使えねーとかわめいてる奴もいたな。
0352デフォルトの名無しさんNGNG
>>351の2行目までと、3行目以降が繋がらないんだが、分裂病もとい統合失調症か何かですか?
0353デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1100324475/550-
0354デフォルトの名無しさんNGNG
質問ですが起動時に最大化するにはどうしたらよいでしょうか?
それと起動時からルックフィールをWindowモードにするのも教えてください。
0355デフォルトの名無しさんNGNG
・起動時に最大化(JDK1.4以降限定)
frame.setExtendedState(Frame.MAXIMIZED);
setStateというメソッドもあるが、アイコン化と通常状態への戻ししかできない。

・起動時にL&FをWindowsに。
ウィンドウを1つでも開く前に
UIManager.setDefaultLookAndFeel(クラス名);
クラス名は
XP風なら
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
それ以前の(95以降XPより前)なら
"com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"

作ってしまったウィンドウのL&Fを変えるには、
そのあとで
SwingUtilities.updateComponentTreeUI(最上位のComponent);
する。invokeLaterから呼ばないとダメかも。
0356デフォルトの名無しさんNGNG
LAF設定はSystemLAFにしたほうがいいかと
0357355NGNG
>>356
御意。

もとの質問者の意図が、
「どんなプラットフォームで動かされたときでもWindows L&Fにしたい」
なら355の方法、354がたまたまWindowsを使っていて、
「動いているプラットフォームの標準L&Fにしたい」なら、クラス名の所は
UIManager.getSystemLookAndFeelClassName()
の返値を使ってくれ。
0358デフォルトの名無しさんNGNG
>>357
>>355 は Windows 以外じゃ動かないんじゃない?
0359デフォルトの名無しさんNGNG
>>358
sunのWindowsLAFが用意されてる環境なら、どんなプラットフォームでも動くけど、デフォルトやライセンス的にはWindowsだけだな。
厳密にいえば、355は特別なことをしてなければWindows上のSunのVMでしか動かないね。
0360デフォルトの名無しさんNGNG
そういえばWindows以外でWindows Look and Feel使うと例外になるんだったな。
0361デフォルトの名無しさんNGNG
初カキコです。

Swing部品で、手入力可能な部品があるぢゃないですか?
(例えば、JTextFieldやJComboBox)
その部品で以下の現象が発生します。

 IMEを起動し、よみ入力状態(未確定)中に
 Ctrl+V(ペースト)を押下するとExceptionが発生する。
 ※JDK1.3でも1.4でも発生するようです。

この問題の回避方法を検討しているのですが、
良い方法が思いつきません。
過去に解決した方いらっしゃいましたらアドバイスおながいします。

あと、この問題を解決する上で一つ試してみたい方法があります。
「現在読み入力中である。」というのが分かれば
その時だけCtrl+Vをconsumeしてやれば
回避できそうな気がしているのですが、
Javaで「現在読み入力中である。」というのは
判断可能なんでしたっけ???

教えてくんですんませんが、よろしくです。
0362361NGNG
自己解決♪

読み入力中かどうか判断できたので、
コピペのキーイベントを消費すれば
回避はできますたー。

でも、これってswingの
障害に見えるのですけど
どーなんですかねぇ???(*´д`*)
0363デフォルトの名無しさんNGNG
>>361
Windows2000SP4 & j2sdk-1.4.2_06 の環境では発生しないんだけど、
そちらの環境はどんな?
0364デフォルトの名無しさんNGNG
環境と例外のスタックトレース晒してくんない?
あと、IME に何をつかってるかにもよるのかも?
WindowsXP + MS-IME
java version "1.5.0_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_01-b08)
Java HotSpot(TM) Client VM (build 1.5.0_01-b08, mixed mode, sharing)
だと例外は出ない。
0365デフォルトの名無しさんNGNG
結論:MFC使え。
0366デフォルトの名無しさんNGNG
MFCって、広く使われてるクラスライブラリの中では最悪の部類に属するよね。
0367デフォルトの名無しさんNGNG
うん。MFC以下の商用ライブラリを知らない。
0368デフォルトの名無しさんNGNG
そこでAWTですよ。
0369デフォルトの名無しさんNGNG
ここはSwingスレだしAWTやMFCは・・・
0370361NGNG
当方では、1.3.1_01と1.4.1_03で現象が発生することを確認してますね。
1.3.1_01は、以下のVMです。
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_01a)
Java HotSpot(TM) Client VM (build 1.3.1_01, mixed mode)
1.4.1_03は失念です。。。…(;´Д`)

発生Exceptionはこんな感じ。
java.lang.IllegalArgumentException: Invalid substring range
at java.text.AttributedString$AttributedStringIterator.<init>(Unknown Source)
at java.text.AttributedString.getIterator(Unknown Source)
at javax.swing.text.Utilities.drawComposedText(Unknown Source)
at javax.swing.text.PlainView.drawElement(Unknown Source)
at javax.swing.text.PlainView.drawLine(Unknown Source)
at javax.swing.text.PlainView.paint(Unknown Source)
at javax.swing.text.FieldView.paint(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$RootView.paint(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.paintSafely(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.paint(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithBuffer(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
0371361NGNG
ちなみに、OSは
WindowsXP SP1 + MS-IME
ですた。
0372デフォルトの名無しさんNGNG
1.4.2だけどそんなえらーでねぇよ
0373デフォルトの名無しさんNGNG
どっちにしてもバージョンが低すぎる
1.4.1だけみても_07までいってるわけだしな
1.3.1なんて_14だ
0374デフォルトの名無しさんNGNG
そうだね。
1.3.1の最新と1.4.1の最新で試してみたら?
0375デフォルトの名無しさんNGNG
demo/jfc/Notepad/Notepad.jar で試してみたけど、
1.3.1 も 1.4.1 も例外吐くね。素直に 1.4.2 を使えって事か。

java version "1.3.1_15"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_15-b01)
Java HotSpot(TM) Client VM (build 1.3.1_15-b01, mixed mode)

java version "1.4.1_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_07-b02)
Java HotSpot(TM) Client VM (build 1.4.1_07-b02, mixed mode)
0376デフォルトの名無しさんNGNG
1.4.1は問題多かったし1.4.2へ移行できるからいいけど
1.3.1は1.3系最終だからきっついな

どっちにしろ移行フェーズにはいってるVMだからなんとも
0377デフォルトの名無しさんNGNG
1.3でSwing使うな、っていう考え方だな。
0378デフォルトの名無しさんNGNG
>>377
1.3 で Swing 使うならその程度の不具合があっても我慢しろ、でなくて?
0379デフォルトの名無しさんNGNG
1.3のSwingには重いという最大の不具合が。
0380デフォルトの名無しさんNGNG
>>379
Swing が重いのは 1.3 に限った事ではない。
スレタイにも低速って書いてあるしな。
0381デフォルトの名無しさんNGNG
1.4.1以降でSwingさわってないやつまだいたのか
0382361NGNG
>>372-381

ま、みなさんのご意見は
ごもっともですわぁ。

ただ、いろいろ事情があって
そう簡単にバージョンも
上げられんのですよ。

swingの障害だということが
分かったことだけでも
ちょっとスッキリ?です。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4686956
0383デフォルトの名無しさんNGNG
ダイヤログボックスのボタンが「了解」になってるんだけど変えることは出来ませんか?
0384デフォルトの名無しさんNGNG
>>383
UIManager.put("OptionPane.okButtonText", "表示させたい文字列");
0385デフォルトの名無しさんNGNG
>>384
ありがとうございます。
もひとつ、ウィンドウの大きさを固定するには(ウィンドウの角にマウスを合せても何もできない)
どうしたらいいでしょうか?
■ このスレッドは過去ログ倉庫に格納されています