Java 高速GUI SWT 3

■ このスレッドは過去ログ倉庫に格納されています
2006/11/30(木) 18:03:19
とりあえず、前スレ落ちてから時間たつけど、立ててみた。

前スレ

Java 高速GUI SWT 2
http://pc8.2ch.net/test/read.cgi/tech/1068349883/
254sage
垢版 |
2007/12/08(土) 18:51:08
ネイティブであるアドバンテージはプログラマーでなく、
お客様(ユーザ)が判断するもの。
『ナにこれ?このファイルダイアログ見掛けが変だよ〜。
全部やり直してよ〜。
それまで、お金払わないよ』
っていわれれば 乙。
2007/12/08(土) 20:19:31
>>254
sageはメル欄ね。
2007/12/08(土) 20:38:26
ぶっちゃけファイルダイアログ以外はSwingでいいかなと思ってる。
257デフォルトの名無しさん
垢版 |
2007/12/09(日) 00:53:49
Windowsプログラマのオレにとっちゃ、SendMessage関数 が使えるSWTは神に思える。
2007/12/09(日) 01:10:45
それが使えりゃいい程度なら JNI で作れば良いじゃんと思う今日この頃。
2007/12/09(日) 23:54:22
日本ってJFaceの情報少ないよね。

>>258
話が飛躍しすぎ
2007/12/09(日) 23:59:06
おまいには SendMessage() アダプタ一つ JNI で組むのがそんなに難しいのか?
2007/12/10(月) 02:32:29
Javaで書けるのがいいんじゃね?
2007/12/10(月) 03:01:45
いや特定の Win32 API 使いたいために SWT 選択するくらいなら、そのアダプタ (ブリッジか) JNI
一回作ってしまえば後は AWT なり Swing なり何なり好きなもの選択できるじゃんという話。
そんなに難しいことは言っていない。元の人は Windows プログラマなんでしょ?
2007/12/10(月) 09:35:42
そのアダプタかなんかを作って維持する手間が
馬鹿にならないんじゃない?
Windows以外でアプリを走らせることを
想定してないみたいだし。
2007/12/10(月) 16:59:56
維持? CVS の片隅に塩漬けにしておくのがなんか手間か?
それとも SendMessage() が Win に SP 当てるたびに挙動変わるようなものだと思ってる?
2007/12/10(月) 17:13:27
聞いているのに聞き返すなよw
2007/12/10(月) 17:25:17
わかったわかった

アダプタかなんかを作って → C のソースで 10行? 20行?。フリーの C コンパイラ落とす方が手間なくらい。
維持する手間 → 一回作ればほぼ変更不要。JDK1.1→1.2 の大改革が起きたときくらい?

だから、SendMessage() が使えるから神というなら自分で作る方が選択肢広がるんじゃね、と思った次第。
2007/12/10(月) 18:51:37
SendMessage()だけじゃ使えない。
os.eclipse.swt.internal.w32.*
はどこかから持ってこれるのか?
2007/12/10(月) 18:59:55
話勝手に膨らませてないか?
SWT の Win32 API 機能フルで使えないと認めないと言う話?
2007/12/10(月) 19:05:53
>>257じゃないから分からんけど、

SendMessage()を使うんだったら、それにまつわるメッセージ定数やら
WPARM, LPARAMにパラメータをパックする仕掛けやらを期待するんじゃないのか。
2007/12/10(月) 19:22:26
うーん確かにそうだが、SendMessage() 程度ならどう転んでも 2〜3 時間も作業すれば
十分な気がするんだが。以後何年かは使えそうなのが。

パラメータはメッセージ元と先の取り決めだから Java の呼び出し側でバイト配列組み立てれば良いし、
JNI 側は DWORD とバイト配列を選択的に受け取れる口にしておけばいいし。定数と
パラメータバイナリ組み立てのためのユーティリティ機能を Java 側で用意して、あとなんかあるか?
2007/12/10(月) 19:35:41
多分、自分で使う部分を実装して、必要に応じてちょこちょこ手を入れる、
と言うことになると思う。後は、そーいう諸々の作業(仕様を考えて、
実装して)をする手間と、swtのを使う手間とを天秤にかけてください。
2007/12/10(月) 23:17:33
車輪の再発明してもしょうがないだろ。既にあるならそのまま使っときゃいいじゃん

が、SWT自体がAWTの再発明という罠
2007/12/10(月) 23:22:18
車輪を使いたいために車を買うのはどうかという話をしてんの。
2007/12/10(月) 23:25:18
>>273
だれがうまいこと言えと(ry
2007/12/11(火) 16:56:10
>>272
これを車輪の再発明とはいわない
2007/12/11(火) 17:27:52
程度の問題だな
jpgやzipのデコードエンジンを作るとかならともかくSendMessageするJNIを作る程度なら
SWT頼るよりはJNI組んだ方がよさそうだ
まぁ最初からSTWでコードを組んでるならともかくSendMessageのためにSWT使うのは本末転倒してるな
2007/12/11(火) 18:37:57
まあ落ち着け。何でそんなに必死なんだ。
278デフォルトの名無しさん
垢版 |
2007/12/11(火) 19:12:20
まぁ、SWTはIBMのスーパープログラマーが作っているから
N●◎データや日立△▲で派遣で働くプログラマーよりも信頼性高い
ことは確か・・。
2007/12/11(火) 19:20:24
Inter○tageとか使いたくないよ。Grassfishとかで普通に作りたいなぁ。
ネットにノウハウの少ないマイナーフレームワークなんて使用者からすれば地獄だねorz
2007/12/11(火) 19:26:06
あ、一応ここはGUIネタじゃなきゃスレ違いだったかな
281デフォルトの名無しさん
垢版 |
2007/12/11(火) 20:45:23
すげ〜〜〜!
SWTを2〜3時間で作れるって、>>270 は天才だな。
つか、おまい、SWTのソースコード見たこと無いだろ。
つか、おまい、SWTでプログラミングしたこと無いだろ。
どうだ?図星だろ?

くやしかったら3時間でSWT作ってミロや。
いや、3時間なんてケチな事は言わん。3週間やるからSWT作ってミロや。

匿名掲示板だからっていい加減なこと書くなよな。
どうせ半べそかいて逃げるんだろ?
2007/12/11(火) 20:48:04
バカが出たぞー
2007/12/11(火) 21:34:00
時代はバカアゲ!とか言い出しそう。
2007/12/11(火) 22:45:11
おお、SWTスレがあがってる!
と思って見にきてみたら・・・・・
2007/12/11(火) 22:53:19
久しぶりに盛り上がり(?)ネタが 「SWT 使うほどじゃネェんじゃね?」 じゃな…
2007/12/12(水) 00:18:02
釣りだろ?常識的に考えて・・・
2007/12/12(水) 09:53:28
>>285
いやいや、アンチの言い分がわかって面白かった。
2007/12/12(水) 18:05:41
>>281の発言は永久保存だな。
2007/12/13(木) 00:49:39
>>266
>一回作ればほぼ変更不要。

ほんとうに一回作れば変更不要だったらいいんだがな
2007/12/13(木) 00:51:13
それはビビリすぎ。
291デフォルトの名無しさん
垢版 |
2007/12/13(木) 01:14:40
で?
>>270 は尻尾を巻いて逃げたのかい?
大風呂敷を広げてみっともないねぇ。
2007/12/13(木) 01:16:47
バカが出たぞー
2007/12/13(木) 01:18:49
>>291はまだ自分のバカさに気付いてないのか
気付いたら恥ずかしくて帰ってこれないだろうに
294デフォルトの名無しさん
垢版 |
2007/12/13(木) 01:51:02
ねぇまだ?
2〜3時間でできるんだろ?
2007/12/13(木) 01:53:35
どこまでがんばれるか、彼の今後の活躍にご注目ください。
296デフォルトの名無しさん
垢版 |
2007/12/13(木) 02:14:18
どう頑張ってもSWTを2〜3時間で作るのは無理だろ。
2007/12/13(木) 08:07:28
SWTを2〜3時間で作るなんていう話がどこででてるんだよw
2007/12/13(木) 11:47:15
SendMessageはSWTの肝だろ。そんなものを2〜3時間で作れるっていうなら見せて欲しい
2007/12/13(木) 14:59:41
JNIは全く使ったことがなかったんでJNIの入門HP見ながら書いたけど
ホントにSendMassage呼び出すだけのコードだけど20分ぐらいで出来たよ?
まぁこのままじゃマトモには使えないんでSendMassageで何をしたいのかの用途に合わせてコーディングした方がよさそうだけど

--WindowsAPI.java
public class WindowsAPI{
 static{
  System.loadLibrary("WindowsAPI");
 }
 public WindowsAPI(){
 }
 public native int SendMessage(int hwnd,int msg,int wparam,int lparam);
 }
--

--WindowsAPI.c
#include <windows.h>
#include <jni.h>
#include "WindowsAPI.h"
#include <stdio.h>
JNIEXPORT jint JNICALL Java_WindowsAPI_SendMessage(JNIEnv *env, jobject obj, jint hwnd, jint msg, jint wp, jint lp){
 return (jint)SendMessage((HWND)hwnd,(UINT)msg,(WPARAM)wp,(LPARAM)lp);
}
--
2007/12/13(木) 15:01:09
つか書いてる時間よりも入門HP読んで勉強してる時間の方が長かった
2007/12/13(木) 15:04:24
Swingが自前で描画している、OSにはウィンドウと認識されていないような子ウィンドウに
SendMessage()を送ったときの効果を再現してくれるアダプタだかなんだかは?
302デフォルトの名無しさん
垢版 |
2007/12/13(木) 18:05:50
>>299
で?
たったそれだけでWindowsアプリが書けるとでも思うの?
何の役にも立たんゴミ書いて満足?
2007/12/13(木) 18:20:48
>>299
SendMessageを使う部分がJavaアプリケーションのどれくらいの部分になると思ってるんだ??
Windowsガチイガチアプリが書きたきゃ、C#で書いた方が楽だろう?
2007/12/13(木) 18:28:05
そんな、3時間過ぎたからって、みんなして責めなくても。
3日くらい待てば、>>299はきちんとした仕様と実装を作ってくれるんだよ。きっと。
305デフォルトの名無しさん
垢版 |
2007/12/13(木) 19:19:30
>>299
それ使って Hello world! って表示できるの?
2007/12/13(木) 19:24:52
納得できないなら納得できないやつが納得できるまで自分で書けばいいんじゃね?
取り合えずSendMessageを呼び出すだけなら確かに呼び出してるし
307デフォルトの名無しさん
垢版 |
2007/12/13(木) 19:37:40
書く必要無いよ。だって既に完成品があるんだもん。SWTが。
とりあえず、じゃやなくて、役に立つか立たないか、が問題だね。
学生が学習の為に実験的に書いたのを誇らしげに「どうぞ使ってください」って言われてもねぇ・・・
2007/12/13(木) 19:40:02
役に立つかどうかの前に、スレ違いかどうかを問題にしてくれ。
2007/12/13(木) 19:55:47
>>306
SWTではSendMessage()使える → SendMessage()くらい自分で用意してSwing使え
→ そんなの作れるのか?という流れだから、
SwingでGUIを作ったときに、そのウィンドウにSendMessage()できなきゃだめ。
2007/12/13(木) 20:04:56
>>309
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/awt/AWT_Native_Interface.html
2007/12/13(木) 20:13:35
>>310
ポインタを示すんじゃなくて、自分の言葉で言えない?
2007/12/13(木) 20:15:47
>>311
ひょっとして、読んでも理解できないのか?
2007/12/13(木) 20:29:25
>>312
おー。理解できんよ。

HWNDがSwingから利用できるところにあるって情報だけじゃん。

SwingのウィンドウがHWNDもってるか、とかまったく書いてないのに、
どうやってSwingのウィンドウにSendMessage()できるかどうかわかるんだ?
2007/12/13(木) 20:34:57
>>313
教えてほしいなら AWTスレか JNIスレで質問してくれ。
とりあえず SWTスレで続けるのはスレ違いだから。
2007/12/13(木) 20:41:01
はいはい。使い物になるSendMessage()はSwingでは無理、ということで落着。
2007/12/13(木) 20:54:13
sunのドキュメントを読んでも理解できない程度の技術力の奴が
よく結論出せるなー。
2007/12/13(木) 21:17:15
なんだ、勘違いに気づいたバカが無理やり仕様広げて自分に有利な結論導いたのかw

「それでは使い物にならない」

しかもバカがまったく隠せてないというオチ
2007/12/13(木) 21:40:24
言い負かされた老害エンジニアがよく使う手。
2007/12/13(木) 22:11:41
何だコリャ。実証コードが出たとたんに必死の自演叩きかw
sage と半角使い分ければ他人になれるとでも思ったのか。
2007/12/13(木) 23:13:28
で。
ネイティブAPIをちょっと使うだけならJNIとかでバインディングぐらいさっさと書けばいいものを、SWTをフル実装するような話に膨らませてるのは結局何が主張したかったんだ?
そもそもSWTのSendMessageなんて非公開クラスのメソッドだろうに。
2007/12/13(木) 23:35:12
キチガイが粘着してるだけなんだからスルーしろよ…
2007/12/14(金) 02:26:09
なあ、SWTの存在意義ってSendMessageだけになってしもたん?
2007/12/14(金) 04:25:11
他になにか?
2007/12/14(金) 04:47:22
それすら隠し API 扱いだし。
2007/12/14(金) 10:17:00
>>322
なんちゃってじゃない、ネイティブL&Fだろう。

326デフォルトの名無しさん
垢版 |
2007/12/14(金) 21:03:58
public 宣言されてるのに 隠しAPI とはバカまるだし。

さぁ早く早く。>>299 のコードを利用して "Hello World" をウインドウに表示してみろやクズども!
2007/12/14(金) 21:23:14
>>281,291,294,296,302,305,307,326
そのままコテハンでも付けてくれると無視しやすくて嬉しい。
328デフォルトの名無しさん
垢版 |
2007/12/15(土) 07:27:33
ほんと不毛だな
2007/12/17(月) 12:10:43
「SendMessage 使える」ってのを、
「SWT のコントロールは Windows のウィンドウだから SendMessage でメッセージ送って
いろんなことができる」じゃなくて、文字通り「SendMessage API が呼び出せる」と解釈して
しまった人がいた、というだけのことでそ・・・

Windowsあまり使わない人が読めば後者の意味にしかとれないだろうし。
2007/12/17(月) 12:22:32
SendMessage ベースのメッセージドリブン設計が好きなら素直に VB でも使っとけよと。
2007/12/17(月) 15:18:11
>>329
いや、Windows使ってた奴が >>310 の文書読んで理解できないって事はないでしょ。
2007/12/17(月) 15:21:21
×Windows使ってた奴
○Win32 API使ってた奴

>>301 も Win32 API 使ってた奴の発言とは思えんし……
2007/12/19(水) 15:25:31
>>205
亀レスだけど。
BrowserにSWT.V_SCROLLスタイルけると、2重にスクロールバー付いたりして、うまく動かないねえ。

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.browser.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

public class SimpleBrowser {
public static void main(String[] args) { new SimpleBrowser(); }
public SimpleBrowser() {
Display d = new Display();
Shell shell = new Shell(d);
shell.setLayout(new FillLayout());

Browser browser = new Browser(shell, SWT.V_SCROLL);
browser.setUrl("http://www.google.co.jp");
browser.getVerticalBar().addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) { System.err.println(e.y); }
});

shell.open();
while(! shell.isDisposed()) if(! d.readAndDispatch()) d.sleep();
d.dispose();
}
}
2008/01/22(火) 16:52:01
Shellクラスを作成するときにSWT.CLOSEを指定しなくても閉じるボタンがでます。
閉じるボタンを無効化するにはどうすればいいのでしょうか?
335デフォルトの名無しさん
垢版 |
2008/01/22(火) 21:01:45
Display display = new Display();
Shell shell = new Shell(dislay, SWT.TITLE);
shell.setText("hoge");
shell.open();
2008/01/23(水) 16:50:45
>>335
SWT.MINやSWT.MAXを指定すると自動で閉じるボタンがついてしまうようでしたが、
SWT.TITLEだけにしたらできました。
ありがとうございます。
2008/02/01(金) 19:54:37
いきなりですけど、C++からSWTを使う方法ってありますか?
調べた範囲ではJNIを使えばできそうかなと思うんだけど、
もっと簡単に使う方法とかないかな。
338デフォルトの名無しさん
垢版 |
2008/02/01(金) 20:50:33
C++からSWTって無理なんじゃないの?
できたとしても、マルチプラットフォームにならず、
特定のプラットフォームに依存したものになりそう・・。
2008/02/01(金) 21:31:28
素直にC++ベースのGUIライブラリ使えよ。
マルチプラットホームにしてもQtとかwxWidgetsとかあるんだから…

# とか書いておいてなんだけどぐぐったらこんなの出てきた。動くかどうかは知らんが。
# http://www.pure-native.com/swtcpp/swtcamp.html
340デフォルトの名無しさん
垢版 |
2008/02/24(日) 22:01:02
Swingスレとマルチで失礼します。

RTF文章を何らかの形で表示(編集できなくてもOKです)させたいと思い、SWT_AWTを経由してSwingのJEditorPaneを使ってみたのですが、
実装があまりにも古すぎてJREに同梱されているLICENSE_ja.rtfすらマトモに読めない、という情けないことになっています。
一応他に何らかの代替/回避方法はないかSwingスレで聞いてみましたが、SWT側でなんらかの形でRTFを表示させる方法はないでしょうか?
多少ググって見たのですが、どうも一字毎に文字列・書式を解釈する、という方法しか引っかかってこないようです
2008/02/25(月) 11:25:25
>>340
sourceforge.netでjava rtf libraryで検索かけたら
いろいろ出てきたので有用なのもあるかもしれん
342340
垢版 |
2008/02/26(火) 10:25:50
>>341
お返事ありがとうございます。
うーん、この辺を利用or参考にして、自分でパースしていくしかないのかなぁ……。
単にRTF文章をSWT上で表示させたいだけなんですけどね(苦笑)
343デフォルトの名無しさん
垢版 |
2008/02/28(木) 23:04:26
SWTでComposite内にGroupを作成し、Tab順を指定するプログラムを作っているのですが
Compositeのコンストラクタ内にthis.setTabList(new Control[]{ボタン,テキスト}の
ようにしてもComposite内に配置してあるコンポーネントはTab順が決めれるのですがGroup内の
コンポーネントをControl[]の配列に入れるとエラーが出てしまいます・・・・
何か良い方法ないでしょうか・・?
宜しくお願いいたします
344デフォルトの名無しさん
垢版 |
2008/02/29(金) 00:06:06
このケースは親子関係のないコントロールを指定しているために
エラーが発生します。
Compositeに関してsetTabList()メソッドを指定して引数にGroupを要素に含む配列を
指定し、再度、Groupに関してもこのメソッドを使用しそのGroup内の
コントロールを指定します(GroupクラスはCompositeクラスを
継承しているのでこのメソッドが使用できます)。そうすれば、
もしもGroupにTab
のトラバーサルが来たときにはGroupはコントロールの性質上フォーカスを
もてないので、その子のコントロールにフォーカスが移ります。その順序は
Groupに対してメソッドで指定した順序、メソッドを使用していなければ
OSでのデフォルトの順序になります。
2008/03/11(火) 09:55:36
CoolBarの前回の使用状態を復元したいのですがどのような方法をとるのが適切でしょうか?
346デフォルトの名無しさん
垢版 |
2008/03/11(火) 17:55:08
使用状態とは?
復元とは?
具体的にどう復元したい?
2008/03/11(火) 18:05:56
位置のことです。
移動ができるのでその移動した状態に復元したいのです。
348デフォルトの名無しさん
垢版 |
2008/03/11(火) 19:06:41
CoolBarクラスの
getItemOrder(), getItemSizes(), getWrapInduces()
setItemLayout()
を使用すると保存と復元は可能。
2008/03/11(火) 19:45:16
自分で保存しないといけないんですね。
XMLEncoder,Decoder的な便利なものがないのかなと思ったのですがそうもいかないですか。
ありがとうございました。
2008/03/11(火) 23:00:25
SWT & JFaceの必須ライブラリって今変わってるんでしょうか?
かなりの時間かけてほぼ総当たりで調べてようやく分かったのですが他に分からない人が出てきた場合のために・・・

/plugins/org.eclipse.swt.win32.win32.x86_3.3.3.v3349.jar
/plugins/org.eclipse.jface_3.3.2.M20080207-0800.jar
/plugins/org.eclipse.equinox.common_3.3.0.v20070426.jar

JFaceのソース
/plugins/org.eclipse.rcp.source_3.3.3.r33x_r20080129-8y8eE9UEUWI6qujeED0xT7bc/src/org.eclipse.jface_3.3.2.M20080207-0800/src.zip

優しさと見せかけて自分メモでした。
すみません。
2008/03/12(水) 00:46:27
Mavenで取ってこれないか?
2008/03/12(水) 04:01:49
>>350
いや、こうやって記録残してくれると助かるよ。
例え助かる人間が一人や二人でも、それに掛かる時間がすごい短縮できるから。
俺もウザがられつつも、残すようにしてる。
2008/03/15(土) 12:02:18
JiglooのSWTエディタ使ってる人いる?
使い方が悪いのかもしれないけど、Swingに比べてバグが非常に多くない?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況