トップページ⇒tech
803コメント252KB

Java 高速GUI SWT

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
SWTはJavaでOSのネイティブAPIを直接呼び出し、高速に動作する
GUIツールキッドです。

配布時にOS依存のライブラリを同梱する必要がありますが、
アプリケーションコードはOS非依存で書くことができます。

当初はIBMが開発していましたが、現在ではオープンソースで
Eclipse.orgによって開発が進められています。

なお、ライセンスはCPLという、商用利用に寛容な
オープンソースライセンスです。

"JAVA/C++開発環境"eclipse"スレッド2
http://pc3.2ch.net/test/read.cgi/tech/1023103421

SWT FAQ
http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/faq.html

Component Development Resources
http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html

API Reference
http://www.eclipse.org/documentation/html/plugins/org.eclipse.platform.doc.isv/topics_Reference.html
0685680NGNG
>>684
あう・・・。コードですか・・・。
メソッドの引数がfinalで、なおかつ直後のSystem.out.print()では表示されるので、
データが書き換わってることは無いと思うのですが・・・。

void appendLog(final String text, final Color color) {  // Colorはそのうち色をつけようと思って
  shell.getDisplay().asyncExec(new Runnable() {
    public void run() {
      logText.append(text);   // こっちは時々NG
      System.out.print(text);  // こっちはOK
    }
  });
}

ちなみに、asyncExec()、syncExec()両方ともダメでした。
で、SWTの中までステップ実行してみようと思ったら、
「ソースがねぇよ」って画面が現れただす・・・。
環境整えてから試して、再度結果報告させてもらいます。
さんきゅうでした。
0686デフォルトの名無しさんNGNG
>>685
それならtextが書き換わってるってことはないね.

ステップインはswt.jarにソースアタッチしないと.
plugins\org.eclipse.platform.win32.source_2.1.0\src\org.eclipse.swt.win32_2.1.0\ws\win32\swtsrc.zip
とかね.

まぁ,"時々NG"を捕まえるのは大変だろけど.

あとはappendの前後でlogText.getText()をprintln()してみると,どーだろうね.
0687680NGNG
すんません。>>680の件ですが、デバッグでの実行時はもとより、
普通に実行させても再現できなくなりました。
何度も複数のスレッドから大量にStyledTextに書き込ませて、
一件ずつログを追って確認してみたのですが、全て表示されてました。
ここに至って原因は「勘違い」であると断定しました。

>>684様をはじめ、考えてくださった方々、どうも申し訳ありませんですた。
おかしかったのは、DisplayでもasyncExec()でもStyledTextなく私の頭でした。
0688デフォルトの名無しさんNGNG
すみません、質問させてくらさい。

SWTのTableクラスを利用してウィンドウにテーブルを張っつけてます。
テーブルヘッダを作成する為に下記のようなコードを書きました。
TableColumn col = new TableColumn(table, SWT.LEFT);
col.setText("hoge");

で、一度作成したテーブルヘッダを動的に削除する方法が分かりません。
ご存知の方が居ましたらアドバイス宜しくお願いします。
0689デフォルトの名無しさんNGNG
SWTスレ見つけたのでここで質問しようかと思います。

SWT始めてみますた。
eclipse内でSWTアプリ作ってますが、swt-win32-2133.dllを認識してくれまへん。
システム環境変数PATHで通してるはずなんですけど・・・・・。

java.lang.UnsatisfiedLinkError: no swt-win32-2133 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1403)
at java.lang.Runtime.loadLibrary0(Runtime.java:788)
at java.lang.System.loadLibrary(System.java:832)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:108)
at org.eclipse.swt.internal.win32.OS.<clinit>(OS.java:46)
at org.eclipse.swt.widgets.Display.internal_new_GC(Display.java:1291)
at org.eclipse.swt.graphics.Device.init(Device.java:547)
at org.eclipse.swt.widgets.Display.init(Display.java:1310)
at org.eclipse.swt.graphics.Device.<init>(Device.java:96)
at org.eclipse.swt.widgets.Display.<init>(Display.java:291)
at org.eclipse.swt.widgets.Display.<init>(Display.java:287)
at com.sat.sample.HelloSWT.main(HelloSWT.java:21)
Exception in thread "main"

てぃなみに、swt.jarはプロジェクトのビルドパスに変数追加してまふ。
何故swt-win32-2133 が見えないのでしょうか?

-Djava.library.path=ほげほげでswt-*.dllがあるフォルダにパス通す。

なども試してみますた。
0690デフォルトの名無しさんNGNG
>>688
>>458

>>689
コマンドプロンプトから実際のコマンド行をコピペしたら何かわかるかも.
どっちにしてもSWTとは関係ないJNIのレベルの話だかが.
0691デフォルトの名無しさんNGNG
俺
gcjって使ってる人います?
http://pc2.2ch.net/test/read.cgi/tech/1046627795/50-51
だけど、同じ症状かもね。
0692デフォルトの名無しさんNGNG
あ、全然違うね。すまそ。
-Djava.library.path=dllへのパス
してみれば?
0693デフォルトの名無しさんNGNG
>>692
だからそれは試したって書いてあるだろ?
0694デフォルトの名無しさんNGNG
>>690

ありがとーございます。
table.getColumns()で取得したTableColumn[] に対して
dispose()したら上手く行きました。

感謝感謝っす。
0695デフォルトの名無しさんNGNG
monalipse
0696デフォルトの名無しさんNGNG
eclipseつかって、SWTを使いとりあえず、WindowAPIを使った画面出そうと思っているのですが、
うまくいきません。
swt.jar などの設定もきちんと設定を行っているので、コード上で、エラーらしき個所は指示されません。

しかし実行をすると以下のようなエラーが出ます。
java.lang.UnsatisfiedLinkError: no swt-win32-2052 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1410)
at java.lang.Runtime.loadLibrary0(Runtime.java:772)
at java.lang.System.loadLibrary(System.java:832)
こんな感じでズラズラと・・・
くだらない質問なんだと思うので、もし、ここでの質問が不適当でしたら、どこで質問して言いか教えて頂けないでしょうか?

よろしくお願いします。
0697デフォルトの名無しさんNGNG
>ウィザードリーオンライン開発中〜
>http://game3.2ch.net/mmominor/dat/1052667275.dat
0698デフォルトの名無しさんNGNG
エラーくらい自分で見方を調べろよ。

> java.lang.UnsatisfiedLinkError: no swt-win32-2052 in java.library.path

java.library.path で指定されているディレクトリに
swt-win32-2052.dll がないというエラーなんで

1. swt-win32-2052.dll を java.library.path で指定されたディレクトリに置く
2. swt-win32-2052.dll があるディレクトリを java.library.path に指定する

のどちらかで対処してください。
0699デフォルトの名無しさんNGNG
>>698
system32に放り込め。確実に逝ける。
0700デフォルトの名無しさんNGNG
>>699

>696は、忘れたころにPC換えて、また同じエラーで悩むと思われ。
0701デフォルトの名無しさんNGNG
>>698
>>699
>>700
ありがとうございます。swt-win32-2052.dll はコンパイル後実行する時に、必要と書いてあったのは覚えていたんですが、
よく考えたら、ビルドした時点で実行してるんですよね。

くだらない質問に答えていただいてありがとうございます。
0702デフォルトの名無しさんNGNG
>>701
あんたの思い込みが正しいとしたら、

な ん の た め の ダ イ ナ ミ ッ ク リ ン ク かと小一時間。
0703デフォルトの名無しさんNGNG
ところでところで、>>696はどんなWindows APIを使おうとしてるの?
今のところIEコンポーネントOLEを呼び出すのしか例を見た事無いから、
できればどんな感じでAPIを呼び出してるのか教えてちょ
0704SWT厨房NGNG
http://download2.eclipse.org/downloads/drops/R-2.1-200303272130/index.php
いつの間にか(一月前からみたいだけど)、eclipse公式で、
SWT単体でダウンロードできる様になってたよ。
0705デフォルトの名無しさんNGNG
SWTSwing
http://chrriis.brainlex.com/swtswing/
0706デフォルトの名無しさんNGNG
SWT関連技術
ClientGUIもJavaが制覇「もう誰にも止められない」
http://girlcom.ghostsp.com/swttop.html
0707デフォルトの名無しさんNGNG
WizOnline開発中!プログラマ緊急募集(C,Java)
http://219.96.231.242/wizonline/
2chスレ
http://game3.2ch.net/mmominor/dat/1053536167.dat




0708デファルトの名無しさんNGNG
「キー入力したら画面を切り替える」
っていうのをやりたいんですが、うまくいきません。
KeyListener#keyPressed()の中で、
前の画面のCompositeをdisposeして、
新しいCompositeを作成ってしてるんですが、
新しい画面でイベントが拾えなくなります。
(CompoisteはShellの子の子に配置しています)

何かいい方法、サンプル、デバッグ手段等あったら、教えてください。
0709デフォルトの名無しさんNGNG
JFaceの質問もここでいいですか?

IStructuredContentProviderやITableLabelProviderなどの
Providerを実装したクラスのメソッド内で例外が発生すると、

org.eclipse.core.internal.runtime.AssertionFailedException: assertion failed: The application has not been initialized.
  at org.eclipse.core.internal.runtime.〜・・・がだらだら続いて、
  at MyClass$1.selectionChanged(MyClass:74)・・・すごーく前の呼び出し元

というクソみたいなスタックトレースを吐きやがります。
Window.IExceptionHandler#handleException(Throwable)も試してみたのですが、
このメソッドが呼ばれたときにはすでに上記の意味不明な例外に置き換えられたあとでした。

多分、ClassCastExceptionだとかArrayIndexOutOfBoundsだとかの実行時例外だと思うのですが、
何が起きてるのかを知るいい方法はないでしょうか?
というか、どのContentProvider内のどのメソッドで発生した例外なのかだけでも分かれば助かるのですが・・・。
0710デフォルトの名無しさんNGNG
>>709
何がクソで何が意味不明なの?

>  at org.eclipse.core.internal.runtime.〜・・・がだらだら続いて、
の最初の要素が直接の発生場所を示してるわけでしょ.
デバッガで覗けばいいじゃない.
0711デフォルトの名無しさんNGNG
>>708
基本的なことだけれど,
Listenerはちゃんと新しいCompositeに登録しなおしてる?
0712709NGNG
>>710 ありがとうございます。

>何がクソで何が意味不明なの?

何が起きようともAssertionFailedExceptionに置き換えられてしまうところが・・・。

>の最初の要素が直接の発生場所を示してるわけでしょ.

いえ、JFace内で全ての例外をキャッチして、
新しいAssertionFailedExceptionを投げているので、直接の原因が分からないままなのです。

今はデバッガで追うのも大変なので、全てのメソッド内をtry〜catchブロックでくくって、
一度スタックトレースを表示してから再度投げるようにしてますが、
実装したProviderのメソッドでnullを返してしまったがために、
JFace内で起きたNullPointerExceptionとかには対応できません。

というわけで、何とか元の例外を知る方法は無いものかと・・・。
0713デフォルトの名無しさんNGNG
>>712
>いえ、JFace内で全ての例外をキャッチして、

そのcatch節でブレークできる場合,
たとえばcatch(Exception e)なら,
Displayビューでe.printStackTrace();をDisplayすれば
ソースをいじらずに元の例外のスタックトレースが見られる.

catch節がからっぽでブレークできないなら,ソースいじるか,
その手前で毎回止めて地道に追いかけてくしかないかな……
0714デフォルトの名無しさんNGNG
>何が起きようともAssertionFailedExceptionに置き換えられてしまうところが・・・。

例外チェーンって言葉を勉強しなおせ。

>713
例外を置き換えてる、って言ってるんだから、その処理がどこかのcatch節に必ず書いてあるはず。
そこでブレークできる。

普通はThrowable#getCause()すればそんなもん探す必要無いんだけどなあ。
0715713NGNG
>>714
うん,それは期待できるんだけど,
catch節の外で投げなおしてる可能性もゼロではないので,
保険として書いておいたのだ.

eclipseのAssertionFailedExceptionは
例外チェインみたいな仕組みには対応してないのがちょっとアレだよね.
別にJDK1.4じゃなくても独自に実装できるのだし.
0716デファルトの名無しさんNGNG
>>711
登録してます。

以下のプログラムは何かおかしいでしょうか?

---------------------------------(抜粋ここから)
public void create(Composite parent){
this.parent = parent;
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new FillLayout(SWT.HORIZONTAL));
Label label = new Label(composite, SWT.NULL);
label.setText("hoge");
composite.addKeyListener(new L1(composite));
}

class L1 extends KeyAdapter{
Composite composite;
L1(Composite composite){
this.composite = composite;
}
public void keyPressed(KeyEvent e){
System.out.println(e);
composite.dispose();
new TChangeView().create(parent);
}
}
---------------------------------(ここまで)
0717デファルトの名無しさんNGNG
>>716
補足
イベントリスナーの中でdisposeするってだめ?

画面切り替えってどうするものか、
いいサンプルあったら教えてください〜
0718709NGNG
>>714
いえ、例外チェーンになってたらすぐに分かるのですが、
本当に原因となった元の例外が失われてるですよ。

ちなみに、もしかしてと思ってThrowable#getCause()も試していました。
今までもデバッガで原因を探ってたりしたのですが、
もう少し簡単に分からないものかと思ったです。

>>713のDisplayビューを使う方法は初めて知ったので、試してみます。
少しは楽になりそうです。

ありがとうございました。
0719山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0720デフォルトの名無しさんNGNG
保守
0721デフォルトの名無しさんNGNG
SwingとSWT比べてどっちが簡単に覚えられそうでしょう?
0722デフォルトの名無しさんNGNG
今SwingのUIをSWTに書き換えているんだが、
外からUIのパーツにアクセスするのに
いちいちUIスレッドと同期とってスレッド立てるのってめんどくさくねえ?
Layoutもウィジェットの追加もいちいちSwingと考え方が違うし、
コード書いてるとストレスがたまって暴れだしそうだ。。
SWTになれるころには、Swing が書けなくなっている罠。

誰か書いてたけど、
Swingの別実装とはできなかったんだろうか。。
0723デフォルトの名無しさんNGNG
>>722
まさかswingでイベントスレッド外から好き放題アクセスしてた?
0724デフォルトの名無しさんNGNG
AWT/Swingは内部で同期してるよ。
イベントキューに放り込むようになってる。
Toolkitクラス見てみるよろし。
0725デフォルトの名無しさんNGNG
  _, ._
( ゚ Д゚)
0726722NGNG
>>723
うっ。やっぱりそういう話になる?
たとえばログをテキストエリアに書き出すのに、
それ用のクラス作ってそこにテキストエリアの参照をstaticで保持させて、
それ経由で各クラスからログを吐き出させてますた。

そこまででなくてもSwingだったら作ったフレームの参照渡せば
外から自由にいじれたじゃない?
SWTだととっても不自由に感じる。

とりあえずの解決として、UIのクラスにログ書き出し用のメソッド書いて、
そこでUIスレッドと同期したスレッドを立ててそれ経由で書かせてます。
でログ出力クラスにはUIクラスを保持させると。

でもこんな感じでボタンの有効/無効操作とかテールへの出力とかが
たくさんある。ある程度アクセスするクラスは絞ってるんだけど
さらに絞らんときついなあ。。
SWTだとどうするのが一番いいの?
UIアクセス用のクラスを作るとか?

>>724
それをいちいち書かされるのがイヤ。
while (!shell.isDisposed()) {
  if (!display.readAndDispatch())
  display.sleep();
}
とか書くのもめんどくさい。
主観的だけどどんどん可読性が落ちてく。。

テーブルさえ持ってれば、もうAWTでいいんだけど。
0727デフォルトの名無しさんNGNG
速さを得るためには何かが犠牲になるものよ
0728デフォルトの名無しさんNGNG
AWT:
void log(String text) {
  textWidget.appendText(text);
}

swing:
void log(final String text) {
  SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        textWidget.appendText(text);
      }
    });
}

SWT:
void log(final String text) {
  Display.getCurrent().asyncExec(new Runnable() {
      public void run() {
        textWidget.appendText(text);
      }
    });
}
0729722NGNG
>>728
ありがとー。
結局SWTでUIにアクセスするには
必ずUIスレッドに明示的に同期/非同期でRunnable投げろってことすね。
そのへん何で隠蔽してくれないんだろね。
そういう疑問は、
「なんでjavaって型を自動変換してれないの?」
ってのとおんなじかな。。
0730デフォルトの名無しさんNGNG
>>722
SWTでっていうかswingでもな
0731デフォルトの名無しさんNGNG
Javaってこのへんダサいな。使わずに済んでよかったよ。
0732デフォルトの名無しさんNGNG
>>722
>そのへん何で隠蔽してくれないんだろね。

SWT自体は元々eclipseを構成する中の、比較的低レベルなライブラリィだから。

隠蔽したいならeclipseのソース全体を参考にしつつ、自分で書いてみ。

>>731

マルチスレッドでの同期問題を前提にしていないO/Sや言語のほうがダサい。
0733デフォルトの名無しさんNGNG
複数のタブアイテムのうち1つを最前面に出す場合はどうすれば良いんでしょうか?

 TabFolder tf = new TabFolder(shell, SWT.NONE);
 TabItem ti1 = new TabItem(tf, SWT.NONE);
 ti1.setText("1");
 TabItem ti2 = new TabItem(tf, SWT.NONE);
 ti2.setText("2");

こんな感じで作ったタブのうち、起動時に2番目のやつが前面に出ているようにしたいのですが。
0734デフォルトの名無しさんNGNG
>>733
tf.setSelection(1);
0735デフォルトの名無しさんNGNG
>>732
>SWT自体は元々eclipseを構成する中の、比較的低レベルなライブラリィだから。
IBMによるJ2ME/PersonalProfile for Linuxのβ実装見てると、
java.awt -> SWT -> Qt/gtk/motifなんてなってる。
IBMとかOTIの社内じゃほんと汎用的な低レベルライブラリとして
位置付けられているんだろうな。
0736デフォルトの名無しさんNGNG
awt/Swing/SWTそれぞれコードの書き方が違うの?
なんかJavaらしくないな。
0737デフォルトの名無しさんNGNG
Javaらしさってなんだろ。マルチ環境って意味だと↑のどれ選んでも
かなりの数のOS/Window Systemで動くけどね。
0738デフォルトの名無しさんNGNG
Javaなんだから、単一の書き方で全てに対応できるべき。
イチイチ書き直すなんてダサすぎ。
0739デフォルトの名無しさんNGNG
反論その一
そもそも適用できるレイヤが違う物同士に”単一の書き方”を求めるのが間違い。

反論その二
”これで全てOK”な究極の書き方が数年そこらで出来るはずなし。GUIなら尚更。
0740デフォルトの名無しさんNGNG
>>739
>>731
0741デフォルトの名無しさんNGNG
>>736とか>>738とかただの煽り屋なんだろうけど
あまりにアホすぎて涙が出てくる
0742デフォルトの名無しさんNGNG
>>738は一理あると思うんだが、
>>741には説明できないんだろうな。かわいそう。
0743デフォルトの名無しさんNGNG
>>742
>>739



…理解できない事象は無視してしまうのか。プログラマーに向いてないからやめた方が良いよ。
0744デフォルトの名無しさんNGNG
>>743

なんでもかんでも全部理解しようとする奴はすぐ限界に直面する。
分からんことは他人に任せる奴がもっともプログラマ向きだよ。

でもまぁ、Javaはほか言語と比べてダサくないよ、全然。
素直な人間の発想と比べればJavaではまだまだダサいのでせう。
0745722NGNG
>>732
そのためのJFaceフレームワークみたいだね。
完全隠蔽してくれないけど、同期は意識しなくていいみたい。

結局、Tableの予想以上の遅さにSWT化を断念しました。
AWTにListでTableっぽいの作って使おうかな。。。

>>736
AWTとSwingは書き方がほぼ一緒。
コンセプトはAWTとSWTがほぼ一緒。(端的に言うと)
0746デフォルトの名無しさんNGNG
JFaceでマルチスレッドの扱いがSWTと変わるわけでもないし,
AWTとSwingじゃスレッド回りが全然違うと思うが……
0747デフォルトの名無しさんNGNG
SwingってAWTと同居してたような気がするけど、なんで違うの?
0748デフォルトの名無しさんNGNG
>>745

AWTは当時PureJavaのGUIパーツを作ってる暇無かったから仕方なく、だろ?
SWTみたいに速度や機能のために割り切ってるわけじゃないと思うが。
0749722NGNG
うーん、乱暴やったなー。
勉強不足ですた。
0750デフォルトの名無しさんNGNG
Tableってそんなに遅いか?
0751デフォルトの名無しさんNGNG
>>750
このスレの>>238あたりを読め
0752732NGNG
>結局、Tableの予想以上の遅さにSWT化を断念しました。
>AWTにListでTableっぽいの作って使おうかな。。。

@ITの新着記事でも遅いと書かれていたね。

Windowsプラットホームで言うと、SWTのTableはCommonControlの「ListView」で
無理やり実装されているんだけど、JNIのオーバーヘッド+Rowをオブジェクトで追加
していく方法であれば遅いのは止むなしかと。

私もいろいろ調べたけど、速いTableを使うにはCanvasクラスを継承して新たな
ウィジェットクラスを書くしかないみたい。

SourceForgeにModel/Viewが分離されているよさげなサンプルがあったので、
私はがりがりと書いてみるよ。

eclipse 3.xまでは待てないしね.....

0753デフォルトの名無しさんNGNG
安藤幸央のランダウン[19] 話題のSWTは本当に速いの?
http://www.atmarkit.co.jp/fjava/column/andoh/andoh19.html
0754デフォルトの名無しさんNGNG
>>608
602じゃないですが、Imageを使ってバッファを作ってそこに描画して、
それをShellに直接drawImageすると激しくちらつきます。
何かしなきゃいけないことがあるんでしょうか?
0755デフォルトの名無しさんNGNG
>>752
CPLで公開キボン.

>>754
とりあえずSWT.NO_BACKGROUNDとか.
0756754NGNG
>>755
解決しました。
どうもです。
0757デフォルトの名無しさんNGNG
レイアウトパッケージ駄目すぎ。
だれかGridBag作って
0758直リンNGNG
http://homepage.mac.com/yuuka20/
0759デフォルトの名無しさんNGNG
あげとく
0760デフォルトの名無しさんNGNG
全然人気無いな
age
0761デフォルトの名無しさんNGNG
だな
0762こまちゃんNGNG
tableで。セル(単位)で色を変えるのはどうやるの?行単位(毎)で
変わってしまいます。
よろしゅう。
0763デフォルトの名無しさんNGNG
>>762
自分で描画しる.
org.eclipse.swt.custom.TableCursorのソースが参考になる.
0764デフォルトの名無しさんNGNG
JFace ってどうなの?
SWT と Swing を比較して Swing のほうが API が使いやすいって
よく聞くけど、Swing と API の使い勝手を比較するなら SWT じゃなくて
JFace じゃないの? スタンドアローンアプリケーションで
JFace 使ってる人の意見キボンヌ。
0765デフォルトの名無しさんNGNG
jfaceで2chブラウザ作ってます。
単なる感想だけどなかなか良さげ。

ただ、資料が少ないのでAPI、サンプル、ソースを読みながら出ないと、
呼び出すだけでいいのか、サブクラスで実装しなければいけないのか、とかがわかりにくい。

このページ見てやってみようかなと思ったんだけど、
必要なJarファイルとかが違っていたので要注意ね。
ttp://www-6.ibm.com/jp/developerworks/opensource/030328/j_os-ecgui1.html
0766デフォルトの名無しさんNGNG
>>764
使ってる人が少ない、資料が少ないという時点で「APIが使いやすい」の重要な条件からひとつ外れる。
0767デフォルトの名無しさんNGNG
>>766
そうかもしんない。
ただ、SWTをラップしてUIを作りやすくしてくれるので、
一度は使ってみると良いと思う。

フォント、イメージの破棄とか簡単になるし・・・。
0768デフォルトの名無しさんNGNG
http://www-6.ibm.com/jp/developerworks/opensource/030328/j_os-ecgui1.html
0769山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0770デフォルトの名無しさんNGNG
swtでJEditorPaneに相当するのって
MultiPageEditorとかですかねぇ。
0771デフォルトの名無しさんNGNG
>>770
JEditorPaneに何を期待しているかによって違うと思う
・単純なテキスト編集 -> Text
・ちょっとした装飾のあるテキスト編集 -> StyledText
・HTML解析+表示 -> OLE or 3.0で出るとか出ないとか言う何か
0772デフォルトの名無しさんNGNG
ShellにText付けたクラスをMyFrameとかいうクラスにしておいて、
別のクラスからMyFrameのインスタンスを何個も作りたいのだが
その場合
while (!shell.isDisposed()) {
  if (!display.readAndDispatch())
  display.sleep();
}
はどこに書けばいいんですか?
0773デフォルトの名無しさんNGNG
>>772
どういうShellを出したかろうと,
readAndDispatchのループを書く位置とは無関係.
0774デフォルトの名無しさんNGNG
>>772
HogeクラスからMyFrameのインスタンスを2つ同時に
new MyFrame().open();
new MyFrame().oepn();
で出力したい場合に、ループ処理をMyFrame側に書いてしまうと
2つ目のインスタンスは1つ目のインスタンスのループ処理を
抜けないと到達不可能になるのと思うんだけど、ほんとに無関係??
0775デフォルトの名無しさんNGNG
>>774
無関係.

"MyFrame側"というのが具体的に何なのかわからないが,
無関係というのはどこに書いてもいいという意味じゃないんだ.
アプリごとに適切なやり方でループする必要があるんだよ.
でもその適切なやり方はShellを何枚出すかには
基本的に関係ないということ.

new MyFrame().open();
new MyFrame().oepn();
で動かないならそもそものやり方が適切じゃないのだろう.
0776デフォルトの名無しさんNGNG
Shellを2枚出力する場合は
while (!shell1.isDisposed() || !shell2.isDisposed()) {
  if (!display.readAndDispatch())
  display.sleep();
}
ってやらんといけないのか?
0777デフォルトの名無しさんNGNG
>>776
そうしないといけないということはない.
ループを抜ける条件はアプリによって違う.

お決まりの書き方として捉えるのではなく,
そのコードが何をやっているのかを考えてほしい.
0778デフォルトの名無しさんNGNG
Java GUI SWT編
http://www.cbook24.com/bm_detail.asp?sku=4877830863

なんてものが出てるようだけど、既出ですか?
0779デフォルトの名無しさんNGNG
>>778
まだ実物見てないけど,大村タンなら悪くないかもね.
しかし何でそのページ著者の情報がないのだろう.
0780デフォルトの名無しさんNGNG
Amazonでは著者情報があるみたい。大村タンですね。
http://www.amazon.co.jp/exec/obidos/ASIN/4877830863/ref=sr_aps_b_3/249-7737806-4181927
0781デフォルトの名無しさんNGNG
おお、SWT本ないなあと思ってたんだよ。
雑誌の記事だとHelloWorldどまりだし。
0782デフォルトの名無しさんNGNG
無修正画像への入り口!今夜はここで過ごしてね!
http://www3.free-city.net/home/espresso/princess/pinkjelly.html

最高画質の無修正画像がたくさん集まってる!
http://www3.free-city.net/home/espresso/bigapple/queen.html
0783デフォルトの名無しさんNGNG
sweingよりホント早いの?
0784デフォルトの名無しさんNGNG
大村さん元気だな。
末期のOS/2Worldひとりで書いてたもんな・・・
種村さんはどこへ行ったのかな?
■ このスレッドは過去ログ倉庫に格納されています