Java 高速GUI SWT 2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1032448424/
0052デフォルトの名無しさん
NGNG通じゃなくて厨の間違いだろ(ゲラ
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG元ネタ
ttp://kyoto.cool.ne.jp/thinksoft/
ウォッチスレ
http://pc.2ch.net/test/read.cgi/os/996051906/
後継者たち
http://pc.2ch.net/test/read.cgi/os/1039237412/
0056デフォルトの名無しさん
NGNGhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=37998
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNGだめぽ。
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGSwingと違い、速いというのはEclipseでSWTに興味のない人にも理解されてると思う
1,SWTの日本語ドキュメントがない、もしくは少ない
2,Swingに慣れ親しんでいるので新しいAPIを覚える気がでない
3,Swingと比べてクラス設計がダメダメ
4,JavaなのにネイティブAPI使うから気持ち悪い
5,SWT? Swingで十分だしどうでもいい
書いてみると結構全部該当するんかなぁとか思ったり
適材適所だけどもうちょっとSWTが普及すればJava使う人もそのソフトを使う人もハッピーになれる場合があると思う
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG1,SWTの日本語ドキュメント>ttp://www3.vis.ne.jp/~asaki/java/eclipse/swt.html
2,糞Swingに慣れ親しみたく無い方はSWTを覚えよう!
3,Swingと比べてクラス設計がC++ライクでとっても素敵!
4,JavaなのにネイティブAPI使うから高速!
5,Swingよりシンプルで高機能なSWTを覚えて夢の高収入!
6,SWTでJavaのGUI需要激増!
7,最新のAPIがJava勢力図を塗り替える!
8,業界のデファクトスタンダードIDE、Eclipseの軽快さに
Javaプログラマは皆SWTに興味深々!
こんなもんか。
0069デフォルトの名無しさん
NGNGつーかそのほかも強引すぎてアヤシイ広告みたいだな・・
0070デフォルトの名無しさん
NGNG後9, ユーザの要望を満たす高性能GUIを提供するswt.jar!JavaWebStartとも相性最高!
>>69
ネガティブより、ポジティブすぎるくらいのほうが良いでしょ。
0071デフォルトの名無しさん
NGNGSWTでShellやImage、ColorとかDisplayを引数に要求してるけど別にnullでもいいよね
Displayって具体的にどういう役割のもの?
サンプルみるととりあえずnewしてImageとかの引数に使ってるけど
0072デフォルトの名無しさん
NGNGこのクラスのインスタンスは、SWTと根本的なオペレーティング・システムの
関係を管理します。
Displayクラスの一番重要な機能は、プラットフォーム固有のイベントモデルで
SWTイベントループを実装することです。
また、Displayクラスはオペレーティング・システムに関する情報に
アクセスする様々な方法を提供し、SWTが取得するOS寄りの資源に対する
全面的な管理を行います。
0073デフォルトの名無しさん
NGNGという大事なクラスらしいので、
将来ぬるぽが出ないように、ちゃんと引数に渡すが吉。
007471
NGNGサンクスー
0075デフォルトの名無しさん
NGNGSWT ○ 速い × 非標準 新参者 ツールがない
Swing ○ 標準 枯れてきた ツールがある × 遅い
速さは神だったので、SWTが期待されたけど、JDK1.4.2でSwingが速くなって、SWTのデメリットを考えたときの魅力が少なくなった。
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNGSWTを詳しく扱ったものはまだ少ないのかなー?
0078デフォルトの名無しさん
NGNG本にするほどの書くこと無い
0079デフォルトの名無しさん
NGNGScrolledCompositeの上にComposite1を配置し、その上にさらにComposite2を配置したいのですが
何故か反映されず、Composite1しか表示されません。
どなたか原因をご存知の方ご教授お願いします。
※Composite2上にはさらにLabe等lを配置したいと思っています。
0080デフォルトの名無しさん
NGNGText.getText(int start, int end)だと、行単位が難しいよねえ。。
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNGttp://download2.eclipse.org/downloads/drops/S-3.0M6-200312182000/eclipse-news-part1-M6.html
3.0M6落とすの面倒なんで,試してはいないけど...
0083デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/1590593251/qid%3D1074100588/250-3696692-4601018
発売されるのは今年の4月らしいけど期待。
0084デフォルトの名無しさん
NGNGcanvas.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if (e.character == 15 && e.stateMask == SWT.CTRL){
hoge();
}
}
text.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if (e.character == 111){
hogehoge();
}
}
とすると、canvasのほうでは、意図したとうりに動くのですが、textのほうでは「o」を押しても
hogehoge()が実行されません。逆にtext.addKeyListenerを最初にもってきて、canvas.addKeyListener
を下にもってくると、textのほうでは意図したとうりに動くけどcanvasでは動かないというまったく逆
の症状になります。
両方でaddKeyListenerが働くようにするにはどうしたらよいのでしょうか?
0085デフォルトの名無しさん
NGNG008684
NGNG>KeyListener を一つだけ作って両方に addKeyListener してやればいいんでないの
まったくそのとうりでした。ありがとうございます。
008785
NGNGその「とおり」
と正しい日本語を書いてくれ。
0088デフォルトの名無しさん
NGNGまったくそのとうりですよね。
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGおまえのゆうとうりです。
バカだから、そこまで気がまわらないんだよね。
0092デフォルトの名無しさん
NGNG少なくともプログラムを書くものとして
細かいことを気にしてられないというのは致命的だ。
0093デフォルトの名無しさん
NGNGfor 文を far と書いているようなものだな。
0094デフォルトの名無しさん
NGNG×られない
○いられない
0095デフォルトの名無しさん
NGNG細かい文法違反も見逃さない。
ただし、文法以外は何も指摘してくれないから注意な。
0096デフォルトの名無しさん
NGNGちなみに俺はよく「abstract」を「abstruct」と書き間違えるぞ
0097デフォルトの名無しさん
NGNG×じゃなくて△程度にしとけよ。
0098デフォルトの名無しさん
NGNGちなみにabstractは全部左手だからちょっと打つのうざい。
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNG(・∀・)
0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNGhttp://cjasmin.fc2web.com/
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGどこかにありませんか? 英語でもいいです。
0105デフォルトの名無しさん
NGNG実際にどういう変更があったかは各milestoneのNew and Noteworthyを見る。
最終的にどういうことが予定されているかはそれぞれの3.0planを見る。
0106デフォルトの名無しさん
NGNGやはりそうでつか……。がんがって読みます。
0107デフォルトの名無しさん
NGNGttp://download2.eclipse.org/downloads/drops/S-3.0M6-200312182000/index.php
ここからSWT Binary and Sourceを落として自分で解析するっていうのはだめかい?
0108デフォルトの名無しさん
NGNGSWTにポーティングしたのだが、かなり大変な作業だな。
もとのアプリで、GUIと処理系のアルゴリズムを
完全に切り放していたので、Swingで構成された GUI 用の
パッケージを丸々SWTでリライトすれば動くと踏んだのだが、
その、リライト自体が大変だった。
で、リライトが終わったら、結局メイン側もリライトが入った。
元のプログラムがピークで20本以上のスレッドが立って、
それらが表示の更新をしていたため、
インスタンス生成時とは別のスレッドで表示の更新を行なうときは、
display.syncExec(...
しないとダメだということで、ローカル変数で処理していたものを
クラスフィールドに昇格。
SWT のものを Swing に持って行くのは楽だろうが、逆はきつい。
SwingWTは、内部で相当リソースの無駄な消費を
しているんじゃないだろうか?
0109デフォルトの名無しさん
NGNG> インスタンス生成時とは別のスレッドで表示の更新を行なうときは、
> display.syncExec(...
> しないとダメだということで、ローカル変数で処理していたものを
> クラスフィールドに昇格。
ごめん,よく分からないんだけど,ただ単にローカル変数の内容をどこかに
表示するだけなら
void methodA(){
final int value = 0;
display.syncExec(new Thread(){
public void run(){
<valueを表示する>
}
});
}
みたいに書けばいいんでは? 見当違いのこと言ってたらすまんです。
0110デフォルトの名無しさん
NGNGttp://java.sun.com/j2se/1.4/ja/docs/ja/api/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable)
しなきゃいけないパターンじゃないか?
0111デフォルトの名無しさん
NGNGこんな感じ。
結局ローカル変数を一時的に保存するのではなく、
インスタンスを丸ごと抜いたよ。
該当箇所のクラスがいっぱい出来てしまった。典型的なパッチ当てって感じ。
もっといい方法があるかもしれない。
< Swing 時 >
class Class{
private JLabel[] xx[沢山];
Class(){
// xx[沢山]を初期化
}
// 他のスレッドがこいつを使いまくる。
public void changeText(int num, String str) {
xx[num].setText( str )
}
}
< SWT:これはコンパイル失敗 >
// 他のスレッドがこいつを使いまくる。
public void changeText(int num, String str) {
display.syncExec(new Thread(){
xx[num].setText( str ); // num が未定義でエラー。
// 108 を書いたときはテンポラリーのクラスフィールドに num を保存して対処。
});
}
続く...
0112デフォルトの名無しさん
NGNG< SWT:インスタンスを引っ張り出す >
// 他のスレッドがこいつを使いまくる。
public void changeText(int num, String str) {
display.syncExec(new SetText( xx[num] , str ) );
}
private class SetText implements Runnable {
private JLabel l;
private String str;
SetText(JLabel l, String str){
this.l = l;
this.str = str;
}
public void run() {
l.setText( str );
}
}
0113109
NGNG動きそうな気がするんだけど,これだと何か問題があるんでしたっけ?
public void changeText(int num, String str) {
final Label label = xx[num];
final String string = str;
display.syncExec(new Thread(){
public void run(){
label.setText( string );
}
});
}
一応自分が問題にしてるのはローカルインナークラスのインスタンスからのfinalを付けた
ローカル変数の参照の方です。
0114デフォルトの名無しさん
NGNGJLabel#setTextって非AWTスレッドから呼んでいいわけ?
ttp://www-6.ibm.com/jp/developerworks/java/010427/j_j-thread.html#7
0116デフォルトの名無しさん
NGNG改良ソースありがとう。
invokeの件と混みで自分のソースを改造してみるよ。
初めて2ちゃんのスレで書いたけど、
みんな親切なので驚いたよ。
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNGSASH_WIDTHというメンバがありますが、これを変えても変化ないみたいです。
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGSwingが速くなったからSWTいらないって言ってるし。
PCが速くなったからSwingのデメリットは消えたって言ってるし。
Swingの方がAPIが美しいから云々って言ってるし。
0121デフォルトの名無しさん
NGNGそれ誰が言ってたの?
言ってることは正しいと思うけど
0122デフォルトの名無しさん
NGNG2ちゃんのスレです。どこのスレかは忘れました。
0123デフォルトの名無しさん
NGNGなるほど、サンクス。
Eclipse自体はとっても素敵なんだが、どーもSWTが好きになれないんだよな。
「先生、Linux上でだけテキストの端っこがちょちょ切れます」とかイヤだな
Javaの思想に合ってない気がするし。
「EclipseがSWT捨ててSwingに移行する」
↓
「んじゃあNetBeansも一緒にやろうやってんで統合」
↓
「ウマー」
ってなればいいのにな
0124デフォルトの名無しさん
NGNG1ネイティブコードソフトウェアとGUIの仕様が同じである(最重要)
SwingのGUIと各OS本来のGUIに違いがあるのでGUIソフトウェアのユーザがSwingを嫌います。
ソフトウェアを作らないユーザは開発側の都合で操作方法が異なることを受け入れません。
2動作が速い
Swingが遅すぎるのでGUIソフトウェアのユーザがSwingを嫌います。
これについてはSwingの速度向上で自然消滅するでしょう。
3GCJやMingw GCJでネイティブコードに変換できる
GCJはJavaソフトウェアをSWTも含めネイティブコンパイルできますが、
AWTをコンパイルできません。当然Swingもだめです。
SwingでなくSWTを選べばJRE不要のネイティブコードソフトウェアを作れます。
Fedora Core 2ではより多くのGCJを利用したJavaソフトを含む予定です。
(AWTとSwingを使用しないもの限定。Ant, Tomcat, Jakarta, Eclipseなど。)
Fedora Core 2 Schedule
http://fedora.redhat.com/participate/schedule/
>more Java software using gcj (Ant, Tomcat, Jakarta, Eclipse, but not Mozilla plugins, AWT, or Swing),
Swingの速度向上でアマチュアJavaプログラマーのSWTブームが去っても
広く使われるGUIソフトウェアではSWTが使われていくのではないでしょうか。
0125デフォルトの名無しさん
NGNGJETのAWT対応もライセンスの関係でJREのDLLだけ抜き出して配布
できないからJRE丸ごと必須ってことらしいし、IBM自身もAWTアプリ
をネイティブコンパイルできるJava(J2ME)環境を出しているし。
まあ後者はSWTの上にAWTを乗っけているわけだけど。
0126デフォルトの名無しさん
NGNGGNU classpath には AWT も Swing もアルファ版品質程度のがあるから
GCJ でネイティブコンパイルされた AWT アプリ作ろうと思えば作れるんだけどね…
SWT でネイティブコンパイルすれば JRE 不要っても
SWT のランタイム自体は必要になるし。
0127デフォルトの名無しさん
NGNGGNU Classpath の Swing ってまともに動いたっけか?
0128デフォルトの名無しさん
NGNG> SWT でネイティブコンパイルすれば JRE 不要っても
> SWT のランタイム自体は必要になるし。
何が言いたいんだ?
JREの代わりにSWT のランタイムごときで済むのがありがたいんだろ。
0129デフォルトの名無しさん
NGNGネイティブコンパイルされた実行形式が結構でかいからサイズでも大してアドバンテージないし、
配布時にライセンス気にしなきゃいかんとか、そーゆー手間も考えると大して変わらん。
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNGどうすればいいのでしょうか?Windowsでやっています。
おねがいします。
0133デフォルトの名無しさん
NGNG違うか?
0134デフォルトの名無しさん
NGNGバージョンは? 3.0系だとM6あたりまでは
https://bugs.eclipse.org/bugs/show_bug.cgi?id=45149
が存在する。
0135デフォルトの名無しさん
NGNGどうもありがとうです。
まだよくわかってませんが、いろいろ調べます
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNG何かと評判の悪いOracleのインストーラや管理ツールもSWTだったら良いのに。
0138デフォルトの名無しさん
NGNGよね。WSADのインストーラもJavaベースだけどSWT使ってないし、
SWTアプリケーションの開発自体、サポート外。IBMのnewsgroupでSWT
の質問した人は「サポート外だからeclipse.org行け」って返事されてるし。
あとはRCPの完成度がどれくらいになるかだな。
0139デフォルトの名無しさん
NGNG>GNU classpath には AWT も Swing もアルファ版品質程度のがあるから
swing使えんの?
0140デフォルトの名無しさん
NGNG自分が使うんだったら、SWTの方が嬉しい
皆さん頑張ってSWT普及させて下ちい
0141デフォルトの名無しさん
NGNG確かにそんな感じかもね。
0142デフォルトの名無しさん
NGNG試してみりゃわかる
0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNGCTRLキーを押しながら「A」を押したときに「A」を判別する方法が分かりません。
似たようなことをしているjfaceのActionクラス関連のソースを見ましたが、
どこで判別してるのか突き止められませんでした。
回答でもヒントでも構わないので、何か知ってる人はいませんか?
0145デフォルトの名無しさん
NGNG同一人物かどうかわからんけど、まとめると
public class TextViewerWindow extends ApplicationWindow {
public TextViewerWindow() {
super(null);
}
public static void main(String[] args) {
ApplicationWindow w = new TextViewerWindow();
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();
}
protected Control createContents(Composite parent) {
TextViewer viewer = new TextViewer(parent, SWT.BORDER);
Document doc = new Document();
doc.set("ぬるぽ");
viewer.setDocument(doc);
viewer.getTextWidget().addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.stateMask == SWT.CTRL && e.keyCode == 'a') {
System.err.println("^a");
}
}
public void keyReleased(KeyEvent e) {
}
});
return viewer.getControl();
}
}
こんなかんじでいいのかなあ。はじめてさわったからよくわからん。
0146デフォルトの名無しさん
NGNGwin32だと、アクセラレータに登録して、TranslateAcceleratorがコマンドに変換するから
AをとるとかじゃなくてAの時に適切なコマンドがくるように設定するから、
SWTだとShellがMenuItemをもっててそれがアクセラレータをもってるみたい。
MenuItem.setAcceleratorで設定するみたい。
0147144
NGNG> 同一人物かどうかわからんけど、まとめると
同一人物ではありませぬ。
>if (e.stateMask == SWT.CTRL && e.keyCode == 'a') {
だめでした。if 文が true になりません。e.keyCode は 0 ですた。
>146
今MenuItemのソースを見てるんですが・・・
やろうとしてることが実は結構難しいことがわかりますた。
方向性を変えて、「CTRL+A」という文字列を返す方法を探します・・・
0148145
NGNGされるけど。
public class TextTest {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Text text = new Text(shell, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP);
text.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.stateMask == SWT.CTRL && e.keyCode == 'a') {
System.err.println("^a");
}
}
public void keyReleased(KeyEvent e) {
}
});
text.setText("ぬるぽ");
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
0149144
NGNGうーん、ソースをコピペしてやりましたが、結果はさっきと同じです。
ちなみにこちらの環境はWinXP & JDK1.4.2 & eclipse2.1.1です。
なんでだろ?
0150148
NGNG#開発はR2.1.2上でやってるけど、SWTライブラリは3.0M6。
bugzilla見てみるかな。
0151148
NGNGhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=35210
確かにR2.1.xだと上のコードだと駄目だけど、
public void keyPressed(KeyEvent e) {
if (e.character == 1){
System.err.println("^a");
}
だと^aが表示されるな。}
■ このスレッドは過去ログ倉庫に格納されています