Java標準低速GUI 6 AW ..
[2ch|▼Menu]
2:デフォルトの名無しさん
07/09/26 20:57:16
関連スレッド

Java 高速GUI SWT 3
スレリンク(tech板)

3:デフォルトの名無しさん
07/09/26 20:59:02
VisualStudioのようなポトペタ開発環境がほしい!!
NetBeans
URLリンク(www.netbeans.org)
Eclipse+VisualEditorPlugin
URLリンク(www.eclipse.org)
URLリンク(www.eclipse.org)

4:デフォルトの名無しさん
07/09/26 22:10:02
jDialogでボタン付きのダイアログを作成して、
ボタンを押すとdispose()して閉じるようにしても
またダイアログを開くと前回表示した内容が残ってしまいます。

2回目の表示のときは、ダイアログを最初から作り直したい
のですが、どのようにすべきでしょうか?

ちなみにVisualEditorを使って作成しています。

5:デフォルトの名無しさん
07/09/26 22:30:42
disposeがやっているのはOS側のリソースの解放だから、OSリソースを
使わないSwingの子供部品はなくならないわけです。部品自体やその階層
関係はそのままのこっていて、描画が必要になったときにOSリソースが
取り直されるだけ。

地道に値を入れなおすか、子供を全部削除して入れ直(あるいはそれを
するメソッドを呼ぶ)せばいいと思うよ。


6:デフォルトの名無しさん
07/09/26 23:27:39
JDialog を new するところからやり直せばいいと思うよ

7:デフォルトの名無しさん
07/09/27 03:04:22
>>1
標準低速ってなんだよw
オレのお茶返せwww

Q. AWT と Swing 混ぜちゃ駄目って聞いたんですけど
  混ぜちゃ駄目なんですか・・・・?
A.
 今まででは、「駄目」というのが正解です。
 が、現在開発中(未リリース)のバージョンではSwingとAWTの混在ができるようになっています。
 正式リリースがされるまで、情報の錯綜があって混乱すると思いますが
 普通の人にとっては「まだ駄目」という状況だと思ってください。

8:デフォルトの名無しさん
07/09/27 07:20:02
>>1
一乙。
>>7
期待してたテンプレthx.

9:デフォルトの名無しさん
07/09/27 09:44:34
SwingとATWを混ぜて使えると良い点は多少軽量化できることがあるとか?
できないよりはできたほうがいいとはおもうけど、Swingのコンポーネント
増やしてくれたほうがうれしい。

10:デフォルトの名無しさん
07/09/27 10:26:06
プルダウンメニュー付のボタンなんか欲しいな〜

11:デフォルトの名無しさん
07/09/27 11:36:39
エクセル的なJTableの拡張が欲しいな〜

12:デフォルトの名無しさん
07/09/27 12:19:58
「標準」でも検索にかかる上に、低速のふりをする良いスレタイだ。

>パフォーマンスの問題は改善されています。
現在完了形キタコレ。

>>9
軽量化よりも環境ネイティブな L&F なのが嬉しそう。
Swing のエミュレーションは見た目は実用レベルで近づいたけど
挙動の微妙な差異にイラっとさせられる時がある。
ファイル選択ダイアログでファイル名をクリックしたら
名前変更モードになっちゃうとか、
ちっこいアイコン叩かないとファイル選択にならないとか、
そういう部分。

13:デフォルトの名無しさん
07/09/27 14:14:13
正直ダイアログ関係はSystemの使ってほしいよね
AWTだと使えるけど、機能が少ないし

AWTとの連携で一番期待したいのはGLCanvasが使えること、かな?

GLJPanelが遅すぎて使い物にならないとか統合チップセット以外なら
Windowモードでも垂直同期が取れているというのが一番大きいかもしれない

14:デフォルトの名無しさん
07/09/27 18:53:18
Eclipse用のGUIエディタプラグインが紹介されてる。
URLリンク(journal.mycom.co.jp)
こんなんあったんだな。VisualEditorは重すぎだし使ってみようかな。

15:デフォルトの名無しさん
07/09/27 20:28:23
>>14
どれも古いプラグインじゃないか。まだ残ってたんだ。

16:デフォルトの名無しさん
07/09/27 20:42:36
>>14

有償なやつはいらないな

17:デフォルトの名無しさん
07/09/28 09:31:11
昔Jiglooってプラグイン使ってたんだけど、まだある?

18:デフォルトの名無しさん
07/09/28 10:27:25
公式扱いということでVisual Editor使ってるんだけど、Jigloo結構いい感じだなあ。
3.3対応のVEはいつでることやら。

>>17
>>14

19:デフォルトの名無しさん
07/09/28 10:30:30
Jiglooは商用製品なんだからフリーよりよくないとこまるだろ

20:デフォルトの名無しさん
07/09/28 12:52:22
Delphi使ってたので、Jiglooのパレットの
並び方はなかなか懐かしくてよいなあ。

21:9
07/09/28 14:20:24
>>12
ああなるほど、そういうのがあったのか。

余談だけど、>>9のATWはAWTですた orz

22:デフォルトの名無しさん
07/09/28 14:41:34
少し凝ったアプリを作ろうとすると、GUIの操作体系考えるの難しいよね。
最初から読み切って作れればいいんだけどそうもいかない。


GUIの部分って書くの時間かかるじゃん。
メニューを動的に変化させたり、いろんな機能と複雑に絡み合っていたり。
人間側で使いやすい操作法と、コーディングのしやすさは相容れない事が多いし。
使ってみて使いにくいから別のやり方に変更とか、やり直しが頻発するときびしい。
デバッグもいろんなパターンをためしていかなきゃいけないし。

23:デフォルトの名無しさん
07/09/28 15:02:16
>>22
イベントの発行順序がかわったりして苦労するとか
ほんと昔からあるとおりデバッグ等は大変だよ

GUIのアニメとか見た目のコントロールはそのフォームべったりになりやすいし
せいぜいビジネスロジックを完全に分離してフロントエンドに何が来てもいいように
するくらいしかない

NetBeansだったら2行以上のロジックはイベントのメソッドに書かないとかIDEごとの常識が存在するし

24:デフォルトの名無しさん
07/09/28 17:11:04
すれ違いだけど、なんかそこら辺を解決するためにWindows Presentation Foundationとか機能があったんじゃなかったっけ?
どこかの記事で読んだだけなんだが、同じようなのJavaで付けてくれないかなあ。

25:デフォルトの名無しさん
07/09/28 17:24:04
それが JavaFX なんじゃない?
詳しいことは知らないけどさ。

26:デフォルトの名無しさん
07/09/28 22:39:31
そのとおりだよ
でもさー、最近のリッチクライアント事情っていったらMSのSilverlightとAdobeのAIRの2人勝負で、JavaFXが蚊帳の外になってるよね

27:デフォルトの名無しさん
07/09/28 23:02:46
>>26
ランタイムはなにさ?

28:デフォルトの名無しさん
07/09/29 14:02:24
SilverlightやAIRと戦えるかどうかはJava Kernelしだい。

29:デフォルトの名無しさん
07/09/29 14:14:31
TransferHandlerでD&Dは出来たのですが、
貼り付けがよく分からないんですけど、
どうやってメニューアイテムとかボタンとかイベントで貼り付けを起動したらいいか分かりません。
あまりググっても出てこないんですけど、日本語の解説サイトとかないですかね?

30:デフォルトの名無しさん
07/09/29 15:15:27
何をどこに貼り付けるの?

31:デフォルトの名無しさん
07/09/29 15:39:55
>>29
それはDnDの範疇ではなく、普通にクリップボードを介してオブジェクトを渡せばいいんじゃないか?
DragSourceから引き出してDropTargetへ落とすまでは一連の操作だから、
ドラッグの開始で得られたTransferableをメニューやボタンなんかの他の操作でどうにかしたりはできない。
Transferableをクリップボードへ→クリップボードから貼り付け対象へ
という二段階のそれぞれを処理するイベントハンドラをメニューやボタンにaddすればいいんじゃないか?

32:デフォルトの名無しさん
07/09/29 15:42:02
>>30
tableにwindows上でファイルを右クリック→コピーでクリップボードに入れたファイル(?)
を解析してそのファイルの情報
D&Dできるようにはした。
URLリンク(up2.viploader.net)

public boolean importData(TransferSupport support) {
if (!canImport(support)) {
return false;
}

try {
Object obj = support.getTransferable()
.getTransferData(DataFlavor.javaFileListFlavor);
List<File> files = (List<File>)obj;

for (File file: files) {
//if (filter.accept(file)) {
frame.addRowFile(file); ←このメソッドでtableにファイル情報が追加される
//}
}

return true;
} catch (UnsupportedFlavorException ex) {
// 失敗したら false を返すだけ
} catch (IOException ex) {
// 失敗したら false を返すだけ
}
return false;
}
D&Dなら投げ込むだけimportDataがたぶん起動してる。
貼り付けの時のどうやってimportDataを動かすか分からない…

33:デフォルトの名無しさん
07/09/29 16:07:51
その貼り付けメニューはどうやって作ってるのよ。
そのメニューに getPasteAction を設定してる?

34:デフォルトの名無しさん
07/09/29 20:53:44
>>33
すいません、ちょっと出かけてました…
その辺がよく分からなくて、
pastejMenuItem.setActionCommand((String)TransferHandler.getPasteAction().getValue(Action.NAME));
と書いてみました。何かでも間違ってるっぽい



35:デフォルトの名無しさん
07/09/29 22:03:23
最近eclipse+VEを使いはじめました。

Timerで1秒間隔でJFrameを描画しなおす為にactionListenerを定義しようと
したんですが、VEで作成したパネル上で
[右クリック]→[Events]→[actionPerformed]
しようとしたんですが・・・・
actionPerformedがメニューに出てきません。
eclipseから全てインストールしなおしても変わりません。
何が原因なんでしょうか?

環境は
eclipse 3.2 + JRE1.6.0_02
GEF 3.2
EMF 2.2.0
VE 1.2

Windows XP Pro SP2


です。


36:デフォルトの名無しさん
07/09/29 22:09:57
>>34
actionPerformedで

Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this);
Object obj = transferable.getData(DataFlavor.javaFileListFlavor);
List<File> files = (List<File>)obj;
以下略

ってやった方が簡単な気がする

37:デフォルトの名無しさん
07/09/29 22:14:26
>>35
VEでは、javax.swing.TimerはGUIコンポーネント扱いされないので、
ポップアップメニューからaddActionListenerはできない。
手書きしよう。そんなに面倒じゃない。

38:デフォルトの名無しさん
07/09/29 23:50:52
実際のところ
javax.swing.Timerはあんまりつかわんよな
1.3以上は

39:デフォルトの名無しさん
07/09/30 01:39:56
>>38
そう?
手書きで精度をあまり問わないちょっとしたもので定期的実行が必要な時によく使うんだが。

40:デフォルトの名無しさん
07/09/30 12:29:43
使うならGUIと直交した java.util.Timer じゃね?
ということかもしれない。


41:デフォルトの名無しさん
07/09/30 13:01:29
1.3から実装されたのはjava.util.Timer
より複雑な並列動作に使うことは多いね

42:デフォルトの名無しさん
07/09/30 17:11:14
java.util.Timer はコールバックが EDT じゃないじゃん

43:デフォルトの名無しさん
07/09/30 17:26:50
単純な定期イベントってのが実際そんなに多くないから
java.util.Timerってことだろ?

44:デフォルトの名無しさん
07/09/30 17:28:44
いまどきは ScheduledThreadPoolExecutor

45:デフォルトの名無しさん
07/09/30 17:57:55
>>44
1.5以上ならjava.util.concurrentはよくつかうね

SwingWorkerはpublishとのタイミングがわからんから使われないことが多いかも
つーか、面倒だよな、あれ

46:デフォルトの名無しさん
07/09/30 18:40:34
java.util.concurrentを学習してない俺が行き当たりばったりで実験コード書いたときは簡単に並列処理できて
文書ソフトのファイルの読み書きと文書内検索にはちょうど良いと思った。
使い捨てのコストもそれならあまり気にならないし。

47:デフォルトの名無しさん
07/10/01 08:27:28
>37

つまりimportしているライブラリによって選べると言う事でしょうか?

Timerは置いておいてパネルだけ作って追加しようとしてもメニューに表れません。手書きしてしまうのも良いのですが、今の状況がVEの正しい挙動なのか気になるところです。

そもそも、eclipseのGUI作成プラグインとしてVEを選んだのが正解だったかも疑問です。eclipse使ってる方々はGUI作成はどうしてるのか教えていただきたいです。

48:デフォルトの名無しさん
07/10/01 09:44:17
>>47
「パネルだけ作って追加」の意味が分からないが、
addActionListenerはJPanelにはない。

javax.swing.TimerはGUIコンポーネント扱いされないが、
Java Beansとして置く分には可能なので、それで追加して
addActionListenerを手書きするといい。
上で挙げられているような
java.util.Timerとどちらを使うかはお好きに。
どちらにしてもGUIコンポーネント扱いはされない。

ちなみに俺はVE使ってるが、半分意地みたいなところがある。
これがベストの選択肢という自覚はない。
昔Jigloo使ったことがあるけど、
com.cloudgarden.*なクラスが勝手に作られたり
自動生成されたコードが見づらかったりと
(1メソッドに全てのコンポーネント設定コードが詰め込まれるタイプ)
不満だったので止めた。今は良くなってるのかもしれないけど。

NetBeansという選択肢もあるが、わざわざ使い分けるのが面倒くさい。

49:デフォルトの名無しさん
07/10/01 12:34:02
フォームにタイマーをおいて・・・というのは感覚的にVBだなぁあとおもた
まぁNetBeansだとできるけど、Eclipseだと商用製品に手をつけるのがオススメ

50:デフォルトの名無しさん
07/10/01 12:47:55
ってかVEって使い物になるレベルだっけか?
最近は改善されてるのかな…

51:デフォルトの名無しさん
07/10/01 12:50:36
いや、放置されてる

52:デフォルトの名無しさん
07/10/01 14:05:18
上の方ではJiglooがいいねって話してた。試してみたら?

53:デフォルトの名無しさん
07/10/02 13:12:58
Java.comから、JREについてフィードバック送れるね。
開発環境じゃないけど、
URLリンク(bugreport.sun.com)
JREが改良され、使われる様になったら、ここにいる人にもメリットあると思うので、
なんかあればfeedbackしておくと良いと思う。

54:デフォルトの名無しさん
07/10/03 22:32:49
JTableのセルへ数字以外入力できないようにしたいんだけど、どうやるのが一番キレイかな?
やり方はいろいろありそうだけど、ソースがきれいになりそうなやり方あれば教えてちょ。

55:デフォルトの名無しさん
07/10/03 22:44:23
JFormattedTextFieldとかTableCellEditorとか使うんじゃないかね。


56:デフォルトの名無しさん
07/10/03 23:40:31
KeyListener#keyTyped(KeyEvent e)を実装して、そこで
char c = e.getChar();
if(c >='0' && c <=9)
return;
else
e.consume();

とかしても結構すっきりして好きだなー

57:デフォルトの名無しさん
07/10/03 23:41:20
あ、JTextFieldかなんかを拡張してTableCellEditorを実装した上でってことねー

58:デフォルトの名無しさん
07/10/04 00:48:54
JTableに限らず書式つけるならテキスト部分はJFormattedTextFieldだろ・・・

59:デフォルトの名無しさん
07/10/04 01:16:02
JTableのセルをクリックして入力モードになるとCellEditorでの入力を行ってるっぽいけど、
セルを入力モードにせずに適当なキーを押して入力した場合はCellEditorを使ってないの?
CellEditorをかならず使うようにしたいのだが、どうすればよいかな。。。

60:デフォルトの名無しさん
07/10/04 01:27:14
>>59
もう少しわかるように

61:デフォルトの名無しさん
07/10/04 02:17:15
>>56
Character.isDigit使う方がよくね?
と思ったが、漢数字や全角数字にもtrueを返すんだよな。


62:デフォルトの名無しさん
07/10/04 16:26:51
JTableネタが出てるのでちょっと聞きたいのですが、
ヘッダ行の文字数が多すぎると、項目によっては
...で項目名が省略されちゃいますよね。

セルの横余白を調節することってできませんか?

63:デフォルトの名無しさん
07/10/04 16:51:11
JTable#setIntercellSpacing(Dimension) かなんかで出来なかったっけ?

64:デフォルトの名無しさん
07/10/04 18:11:06
>>62
列の幅変えたいなら

TableColumn column = table.getColumn(col);
column.setMinWidth(min);
column.setMaxWidth(max);
column.setPreferredWidth(width);

65:デフォルトの名無しさん
07/10/04 23:46:59
>>63,64

ありがとうございます。でもすみません,ヘッダ行についてだけなんです。
これだと,普通のセルの余白が変更されちゃうんじゃ・・・



66:デフォルトの名無しさん
07/10/04 23:59:03
ヘッダのサイズだけ変えたいと

そう申すのか?

67:デフォルトの名無しさん
07/10/05 00:05:20
>66

そのとおりです。たとえば,ヘッダ行が

|  果物名  |  産地 |  価格  |

のようにあったときに,


| 果物名 | 産地 | 価格 |

としたいのです。列のサイズ自体を変更することはできますが,ある程度
小さくすると項目行が「果...」とかになってしまって見にくくなって,
でも余白はきっちりとられているものですから,なんとかならないかなーと。


68:デフォルトの名無しさん
07/10/05 00:09:34
TableColumn#setHeaderRenderer 使えば済む話?

69:デフォルトの名無しさん
07/10/05 10:24:07
>68
ありがとうございます。

とりあえず,new DefaultTableCellHeaderRenderer()したものをそれぞれの列に
セットすることができるようになりました。
ただ,そのヘッダ行だけ周りのL&Fから浮いてしまっているだけでなく,クリックや
マウスホバーにも反応しないのが大変痛いです。

TableColumn#getHeaderRendererで中身を取って,それを操作してやるのが一番
よいのではないかと思ったのですが,うまくいかず・・・

(DefaultTableCellHeaderRenderer)JTable.getColumnModel().getColumn(0).getHeaderRenderer();
とかだとnullが返ってきてしまいます。



70:デフォルトの名無しさん
07/10/05 11:11:43
MVCパターンの仕組みから勉強した方がよさそうだな。

71:デフォルトの名無しさん
07/10/05 17:07:29
まえから気になってるんだけど、
マウスイベントで、シングルクリックとダブルクリックを識別するには、
MouseEvent#getClickCount()でボタンを押した回数が分りそうに思えるけど、
ダブルクリックをするとイベントが二回発生して、
一回目はClickCount=1のイベント、
二回目にClickCount=2のイベントというように発生するよね。

たとえば画面に丸印を用意して、その丸をシングルクリックのときは四角に、
ダブルクリックのときは、三角に変化させる。
別のボタンを押すとまた丸にもどる。というプログラムを作りたいとする。

ところがダブルクリックのときは、まず1回目のクリックでmouseClicked()が呼び出され、
二回目のクリックで再び同メソッドが呼び出される事になる。

だから次のようなコードを書いたとすると・・・

public void mouseClicked(MouseEvent evt) {
 int count = evt.getClickCount();
 if(count == 1) {
  //四角を描画
 } else if(count ==2) {
  //三角を描画
 }
}

ダブクリのとき、1度目のクリックで四角が描画され、
二度目のクリックで三角が描画されることになってしまう。
ダブクリとシングルクリックを識別することがmouseClicked()では
実のところできないような気がするのだけど、みんなどんなやり方してますか?


72:デフォルトの名無しさん
07/10/05 17:39:10
べつにいいんじゃない。
結果としてワンクリック目の四角形は消えて最終的に三角形だけが残るんなら。

73:デフォルトの名無しさん
07/10/05 17:49:35
>>72
じゃあシングルならダイアログAが開き、ダブクリならダイアログBが開くような場合は?

74:デフォルトの名無しさん
07/10/05 18:11:45
>>73
そんないかれた仕様にするならどちらかをモディファイアキー有りにするかポップアップメニューにしてくれ…
# シングルクリック時にタイマーを設定してダブルクリック時にタイマーをキャンセルとかすればできなくはないか…

75:デフォルトの名無しさん
07/10/05 18:14:16
>>73
ダブルクリック1回のつもりが失敗してシングルクリック2回になってしまうことはよくある。
その逆もよくある。
そういうゲームならともかく、ミスったら終わりみたいなユーザインタフェイスはやめた方がいいと思う。

76:デフォルトの名無しさん
07/10/05 18:33:36
UI設計論の話してんじゃないから、文意をくみ取ってちょ。

>>74
まあタイマー使うことになるよね。

>>75
ワンクリでアイテム選択、ダブクリでアイテムプロパティ設定とか、よくあるでしょ。
MSのパワポとか。

77:デフォルトの名無しさん
07/10/05 18:34:12
>>71
こんなのは? シングルクリックの動作が遅れるのは
原理的にダブルクリックとの判別にそれだけ時間をかけないといけないからなので仕方がない
四角の描画は別スレッドなのでシングルスレッドルールに反してはいけないときはEDTに描画を投げるようにして
まあ基本的にこういうふうにクリック回数で処理を分けるUIはよくないと思うが
private final int mci = ((Integer)Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval")).intValue();
private boolean flag;
public void mouseClicked(MouseEvent evt) {
int count = evt.getClickCount();
if(count == 1) {
new Thread(new Runnable() {
public void run() {
flag = true;
try { Thread.sleep(mci); } catch (InterruptedException e) {}
if (flag) {
//四角を描画
}
}
}).start();
} else if(count == 2) {
flag = false;
//三角を描画
}
}

78:デフォルトの名無しさん
07/10/05 18:50:12
前々から思ってたんだけど

AWTは知らないけど、少なくともSwingのコンポーネントの多くはそのコンストラクタで
オーバライド可能なメソッドを呼び出したり、
そのインナークラスをイベントリスナーとして登録してるんだけど、
どう考えればいいのかな。

コンストラクタが終了する前に this を漏洩することは、
オブジェクトが整合性を整える前にメソッドが呼び出される可能性がある。
とりあえず、基本EDT限定なので、まあ、別スレッドから呼び出される心配はないかもしれないが、
それを差し引いても、例えばリスナー登録の瞬間にコールバックされたりなど
シングルスレッドでも、コンストラクタ完了前に呼び出される危険がある。

とりあえず、今考えているのは、Swingを使う場合は
自前コンポーネントでthisを漏洩しないよう(ファクトリメソッドを作るとか)複雑にしても、
既に親クラスが漏洩しているので、複雑にした分だけ損。それなら、毒を食らわば皿までということで、

1.コンストラクタでイベントハンドラの登録やオーバライド可能なメソッドの呼び出しはOKとする
2.イベントの仕組みを作る場合は、イベントを登録した瞬間にコールバックしない
  (標準で用意されているSwingのコンポーネントはそうなってるのかなあ?)
3.オーバライドを前提としているメソッド(paintComponent()など)以外は、絶対オーバライドしない

というルールでカバーできるのかなと思っているのだけど、どなんでしょうか

79:デフォルトの名無しさん
07/10/05 18:51:47
>>76
エクスプローラとかパワポとかテキストエディタは、実際にワンクリ目の動作 (項目選択とかカーソル移動とか) を実行してる。
その後にダブクリの動作を実行するけど、そういう流れで問題ないユーザインタフェイスになってるからな。

80:デフォルトの名無しさん
07/10/05 18:51:58
>>77
おー、シンプルでいいね!
漏れが考えたのはもう少し冗長だった。
勉強になりますた!

81:デフォルトの名無しさん
07/10/05 18:59:28
>>79
言われてみればそうだね。
クリック回数で処理を分けるのは、よほどの理由がないかぎり
やらないほうが良いのかもしれない。

82:78
07/10/05 21:27:33
メソッドの呼び出しがイベントを発生する可能性があるから、

4.リスナーの登録はコンストラクタの最後にする。

が必要か。リスナーの登録メソッド自身がイベントを発生したら木阿弥だけど。
いいのかこんなので

83:デフォルトの名無しさん
07/10/05 22:59:32
this参照の漏洩を防止するためにはコンストラクタからイベントリスナを決して登録すべきではない

84:デフォルトの名無しさん
07/10/05 23:41:33
イベントリスナが this を(直接的にも間接的にも)参照してなければ
コンストラクタで登録しても問題ない

85:デフォルトの名無しさん
07/10/06 00:15:19
Swingのイベントの話してるのか

・SwingコンポーネントのイベントはAWTスレッドでしか発行しない

これだけでおけでは?

ところでDesktopがWindowsXPで動かないわけだが、これはいったいどういうコードになってるんだ?

86:デフォルトの名無しさん
07/10/06 00:33:40
solarisチェックが入っている

87:デフォルトの名無しさん
07/10/06 00:50:29
>>85
URLリンク(www-06.ibm.com)
URLリンク(www-06.ibm.com)

88:デフォルトの名無しさん
07/10/06 01:03:45
>>86
同じXPでも動くマシンと動かないマシンがあるのだ
すべてJREは同一という不思議

>>87
俺が言いたいのはコンストラクタをAWTスレッドでしか生成しないと問題は少ないという意味なんだが
生成中にthis公開するのが変というのは常識だろ

>>78の前提がおかしいのは当たり前で
それをふまえてそのままのコードでいかに問題なく動かせるかの話じゃないの?

そして現在の実装において問題が発生することはないはず(5.0までは)

結局AWT/Swingなんてソース見ればわかるとおりほとんどVM依存コードの塊なんだけど、
SunのVMで実行しているかぎり問題は表面化していないというのが正しいか

89:デフォルトの名無しさん
07/10/06 01:54:54
ぬるぽが発生しなさそうで、発生しそうなコード

final AtomicReference<String> lastSetText = new ...

@Override
public void setText(Strint text) {
super.setText(text);
lastSetText.set(text);
}


90:デフォルトの名無しさん
07/10/06 16:17:20
暇なので書き込み

public class NPO extends JTextField {
public NPO(String text) { super(text); }
>>89 のコード
}

として、nullでない文字列を使ってクラスNPOのインスタンスを生成すると、
その時点で、ぬるぽになる。
オーバライド可能なメソッドをコンストラクタで使うことは、
生成中にサブクラスに this を漏洩しているのと同じでやってはいけない。

このような常識を Swing は平然と破っている。したがって、Swing を使うには、
「このメソッドは、(心の目でみると) final が付いているからオーバライドしてはいけないんだ!」
などという脳内変換ルールが必要なのは明らか。

91:デフォルトの名無しさん
07/10/06 16:24:07
NPOって何かと思ったらNPEのことか

92:デフォルトの名無しさん
07/10/06 17:09:08
nuru-poとnull pointer exceptionか?

93:デフォルトの名無しさん
07/10/06 17:54:36
あんまりぬるぽぬるぽいうから間違えちゃったのね。

94:デフォルトの名無しさん
07/10/08 13:48:57
NullPointerObject

95:デフォルトの名無しさん
07/10/10 06:22:58
JFrame#pack()はsetVisible(true)の前に実行することが推奨されていますか?

ふと以前何処かでそういう文章を読んだことを思い出し、とりあえず盲目的にそれを追記してみた所、
バキュームベッドから空気を掃除機で全部吸い取った様に空間の余裕が消え、ピッチピチに圧縮されました。
setBounds()でウィンドウサイズを設定していたのにたまったもんじゃないです。
しかしまぁそれで大体どういう動きをするメソッドか分かりました。

ただピチピチにパックするだけでは無いだろうと思い調べてみたのですが、
それ以上の情報は見つからず、必ずパックしろといった記事も見つかりません。
今までパックしていなかったにも関わらず何事も無く動いていたので、何かの勘違いだったんでしょうか。
それとも偶々運良く動いていただけなんでしょうか。

96:デフォルトの名無しさん
07/10/10 08:58:37
>>95
余白が欲しければちゃんとBorderなりをセットしてからpackしろ
setBounds()で固定サイズとかダメすぎ

97:デフォルトの名無しさん
07/10/10 11:19:45
>>95
大体とか言わず、正確に理解しといた方がいいと思うよ

URLリンク(java.sun.com)()
>サブコンポーネントの推奨サイズおよびレイアウトに合わせて、この Window をサイズ変更します

余裕が欲しいコンポーネントには推奨サイズを設定 (setPreferredSize) しておけば、そのサイズに合わせてくれる

98:デフォルトの名無しさん
07/10/10 14:27:26
>>97
合わせてくれるかどうかはレイアウトマネージャ次第。
推奨サイズなんだから無視されても文句は言えない。
>>96のようにBorderでマージンとるのを推奨。

99:デフォルトの名無しさん
07/10/10 20:26:34
スレタイ存続の危機?
次期Java 6、Direct3Dの概要が明らかに - WindowsでのSwing 2D描画を高速化
URLリンク(journal.mycom.co.jp)

100:デフォルトの名無しさん
07/10/10 20:34:26
いやいや、まだまだ低速のタイトルは外せません><

# いや、そういうコトなら結構昔に変わってるはずで・・・

101:95
07/10/10 20:44:20
EmptyBorderをセットしてpack、と実装したところうまく行きました。
今までモヤモヤしていた部分が引き締まったようで、とってもすがすがしいです。
>>96さん、>>97さん、どうもレスありがとうございました。

102:デフォルトの名無しさん
07/10/11 00:12:05
>>99
デフォルトでオンはいいよね。MacではOpenGLがオンになるんだろうか・・・。

103:デフォルトの名無しさん
07/10/11 00:29:46
Mac では Java2D は Quartz で描いてたはずかと

104:デフォルトの名無しさん
07/10/11 00:38:44
レンダリング品質はどうなるのだろうか・・・
現状だとDirect3Dモードにすると品質がかわるので使い物にならない

105:デフォルトの名無しさん
07/10/11 01:08:52
>>103
それがさ、Java SE 6からSunのレンダラがデフォルトになる予定なのよ。

106:デフォルトの名無しさん
07/10/11 04:10:28
今までのwin版sun JVMなら-Dsun.java2d.ddraw=trueがデフォルトだったな。
-Dsun.java2d.d3dは支援がまともに得られないから無効だった(パフォーマンス落ちる)
当然-Dsun.java2d.openglはバグ回避で無効。
しかし、D3D9ベースになるのかPS2.0も使うみたいだしVGAとドライバ依存がでかくなるな。

それよりNimbusはマルチバイト文字通るようになるの?w

107:デフォルトの名無しさん
07/10/11 13:03:09
>>105
去年でたDeveloperPreviewでは、PSフォントのレンダリングがガタガタだったんだけど
それ以来、DeveloperPreview無しのまま。
スレリンク(mac板:172番)
>>106
JDK6u5では、日本語通ってるよ。
org.jdesktop パッケージのは古いよ。
URLリンク(download.java.net)
では、パッケージ自体が変わってる。
sun.swing.plaf.nimbus.NimbusLookAndFeel
ね。
org.jdesktop.swingx.plaf.nimbus.NimbusLookAndFeel
のヤツは化ける。

108:デフォルトの名無しさん
07/10/11 20:02:53
そうなのかスナップショット版だと直ってるのか。>Nimbus

けど、-Dsun.java2d.d3d=trueがデフォになるってことはJOGLでプログラマブルシェーダー使うときは明示的にfalseにしないとOpenGLのシェーダーが効かなくなるな。
(win版JVMはd3dとddrawがtureだと効かない、他はDirectXがないので関係ない)
けど、バックエンドがD3D9とPS2.0に変更になっただけで
描画アルゴリズムは今まで通り、OpenGL版と同じだからパフォーマンスは対して変わらんだろうなぁ。
むしろ、OpenGLパイプラインの一部がJOGLと共通化されてOpenGL使った方がJOGLやSwingにはメリットあるんだよな。

けど、個人向けVGAのOpenGLドライバはNVIDIAもATIもバグが回避出来んしなぁ。

もういっそ、J/Directをry・・・w

それよりjdk6に密かに入ってるJava Smart Card IO APIのjavax移動はマダー!?
jdk6はいろんなモン隠しすぎw

109:デフォルトの名無しさん
07/10/11 20:21:44
>>108
JDesktop側のweeklyビルドの方が古い様子。
どうも、JDK6u5が一番始めに組み込まれてるんじゃないかと。
JDK7にもまだ入ってないし。

110:デフォルトの名無しさん
07/10/11 23:58:07
OpenGLでもDirect3Dでもいいが、そろそろJava2Dでαブレンディングまともに実装してほしい

111:デフォルトの名無しさん
07/10/15 22:49:48
スレ違いなんだが、Mistralって画像ライブラリ?でアニメーションGIFを動かすにはどうすりゃいいんだろうか

読み込んで表示まではいけたんだが、最初の1フレームだけ表示してる感じ

アニメーションGIFだけMistralを使わないとか、もう全部Mistral使わないでやったほうがいいんだろうか

112:デフォルトの名無しさん
07/10/16 01:09:07
マルチイメージのフレーム取得なんて標準で出来るじゃん。

113:デフォルトの名無しさん
07/10/16 01:40:30
>>112


114:デフォルトの名無しさん
07/10/16 03:08:55
image I/Oだっけか
確かpngはできないけどgifできたような気がする

115:デフォルトの名無しさん
07/10/16 03:15:32
アニメーションGIF表示するだけなら、ToolkitでloadImageしてdrawImageの最後の引数に表示先コンポーネント指定してやれば勝手にアニメーションする

116:デフォルトの名無しさん
07/10/16 03:15:34
気がする!!!!!!

117:デフォルトの名無しさん
07/10/16 03:55:17
MIDPはするけど、SEやCDCはしなかった気が・・・

>>114
pngのアニメーション仕様なんて画像ビューアーにすら忘れ去られてる存在だから気にしないw
対応してるのは次期Fxくらい。

118:デフォルトの名無しさん
07/10/16 04:03:18
Mozillaの出したAPNGは対応入るのかな?

119:デフォルトの名無しさん
07/10/16 19:04:35
mozillaは標準規格の普及に力入れてるな・・・。
jpeg2000は使われることなく次世代策定中かorz
実際、jpeg2000の拡張仕様まで実装したらPNGどころじゃない超万能規格なんだが。

ウェーブレットいいよ、ウェーブレット!

120:デフォルトの名無しさん
07/10/16 22:07:55
jpeg2000はjpegよりブロックノイズとかの面で優れてるけど
良い面を全部帳消しにするぐらい現在のCPUでも結構重いってのがな……

121:デフォルトの名無しさん
07/10/16 22:17:58
確かにデコード重いな。PNGより重いからな。

122:デフォルトの名無しさん
07/10/16 23:24:27
そろそろJAIのメモリリークは直った?

123:デフォルトの名無しさん
07/10/16 23:33:46
標準APIであるDesktopが動かないバグが放置なのに
JAIがまともになるはずないだろ・・・

124:デフォルトの名無しさん
07/10/17 02:22:17
1.3あたりから無視されてるバグもあるしなぁ

125:デフォルトの名無しさん
07/10/17 14:13:04
それは、Bug Paradeには乗ってるの?

126:デフォルトの名無しさん
07/10/18 08:49:07
さて流れを読まず俺がしょぼい質問する…
JFileChooserのcancelボタンに表示する文字を変えるにはどうすればいい?
ApproveButtonは変えれるのに、キャンセルはなぜ変えれない?

127:デフォルトの名無しさん
07/10/18 11:12:57
自分でダイアログを作って、その中に JFileChooser を放り込んで、JFileChooser のボタンは非表示にして自分でボタンを置くってのでどうだ

128:デフォルトの名無しさん
07/10/18 16:42:55
GUIの部品に日本語使いたくなるの俺だけ?(w

JTextFields 名前 = new JTextField();
JRadioButton 女 = new JRadioButton("女");
JRadioButton 男 = new JRadioButton("男");
JButtonGroup buttonGroup.add(女);
JButtonGroup buttonGroup.add(男);

Javaの変数名はダブルバイト可だし、自然言語風に書くのがスタイルなんだし。

129:デフォルトの名無しさん
07/10/18 16:45:33
下2行まちがえた。
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(女);
buttonGroup.add(男);

130:デフォルトの名無しさん
07/10/18 16:52:32
>>128
ファイルシステムに依存しやすいクラス名と違ってフィールド名やローカル変数は問題は出ないよ

DBでも日本語名のカラムを使うかどうかという話と同じく宗教だから気にすんな
クラス名でつかうのはさすがにとめる

131:デフォルトの名無しさん
07/10/18 17:23:17
文字コードの問題は、機種やOSに依存するからな。
マルチプラットホームのJavaではまさに致命的だし、うかつに手を出せん。

132:デフォルトの名無しさん
07/10/18 17:41:37
変数名で機種依存の問題になるのか?

133:デフォルトの名無しさん
07/10/18 18:21:43
理論上unicodeで表せれば問題ないがフォント側しだいだな。

134:デフォルトの名無しさん
07/10/18 18:24:02
>>132
まあ、無駄に怖がってるのかも試練がな。
だが、linuxなんかで文字コードに苦しんだ俺としては、
少しでもリスクを減らしたい。

135:デフォルトの名無しさん
07/10/18 18:33:24
つーか

変数名に日本語使えるのか!しらんかった!

136:デフォルトの名無しさん
07/10/18 20:23:17
具体的には、
Character.isJavaIdentifierStart(char)
Character.isJavaIdentifierPart(char)
で調べられる。
識別子の頭に使えるかと頭以外で使えるかがチェックできるよ。

137:デフォルトの名無しさん
07/10/19 00:17:38
漢字の変数名はコンパイル通ればOKじゃね?
クラス名はクラスファイルで問題出る可能性があるけど

String 半角カナ = StringConverter.get半角カナ( 全角ひらがな );
氏名フィールド.setText("ほげほげ");
JMenu ファイルメニュー = new JMenu("ファイル(F)");
JMenuItem 開くアイテム = new JMenuItem("開く");
ファイルメニュー.add(開くアイテム);

みたいな使い方もできるから、大胆に使ってみたいんだが、
やっぱりなんか気がひける。w
Java言語のスタイルとしては、ある意味、正しいように思うけど。

138:デフォルトの名無しさん
07/10/19 00:19:14
>>137
入力がうざそうだなぁw

俺カナタイパーだから、IMEオンのままコード打つの難しいし

139:デフォルトの名無しさん
07/10/19 00:20:47
うへぇいちいち入力切替なんてやってられんわ

140:デフォルトの名無しさん
07/10/19 00:33:55
俺もカナタイパーなんだけど、鍛えたんで打つのは苦にならんのよ。w
DOS/VキーでATOKの話だけど、タッチタイプで親指で[変換]キーを叩いて、
全角/半角の切替をマスターしたらけっこう楽に入力できるよ。

チームの中で一人だけ漢字でメソッド名つけたりする人いるのはまずそうだが。w

141:デフォルトの名無しさん
07/10/19 00:39:53
JMenuItemのやJTextFieldの数が増えてきたとき、日本語で書いておくと
けっこういい感じなんだけどね。わかりやすい。
本番で採用したことはないけど。
英語圏の人には災難。

142:デフォルトの名無しさん
07/10/19 00:41:07
>>139
ローマ打ちの人に「面倒じゃない?」ってよく言われる

ローマ打ちの方が遅いから、「平気、っーかよくわかんない」

143:デフォルトの名無しさん
07/10/19 00:41:14
>>137
スマン!気が引ける事もなく最近じゃ普通に使ってる。
プロジェクトとして利用を推進してる。
ホント分かりやすいよ。
>>138-140
補完されるから日本語を全部打つ事はあまりない
>>140 ではないが、Macの流儀に合わせて変換キーで全角モードに入るようにしている

144:デフォルトの名無しさん
07/10/19 00:42:46
>>143
まーじーかー

どうせリファクタリングでゴリっと直せるんだし、挑戦してみようかな

145:デフォルトの名無しさん
07/10/19 00:51:14
>>143
おーっ、勇気あるなーww

Javaはもともとダブルバイトを変数名やメソッド名に許しているんだからして、
そういう作法もありだとSunも暗黙に認めてるってことじゃないかと。
将来には見たこともないフォントで書かれたソースコードが
出てくるような気がするんだよね。

146:デフォルトの名無しさん
07/10/19 00:57:15
>>137のようなコードをあんまり見たこと無いからだろう。
個人的に使う分にはまったく問題ないし。

147:デフォルトの名無しさん
07/10/19 00:58:28
もしIDEでちゃんんと補完が効くのなら入力もそれほど苦じゃないかもね

148:デフォルトの名無しさん
07/10/19 01:20:31
>>145
ちょっと気になったので・・・・フォントと文字自体は、別のものですよ。
見た目と意味、くらいの違いがあります・・・・
老婆心ながら、ちょっと調べておいた方がよいかと・・・

149:デフォルトの名無しさん
07/10/19 01:21:39
メソッド名にはあまり日本語を使いたくないな、気分的にw
Javaを全て日本語で書くとかいう研究がどっかであったけど、
ソースがあまりにもカッコ悪くて、プログラミング言語のほとんどが英語で良かったと思っている

150:デフォルトの名無しさん
07/10/19 01:31:10
アニメーションGIFをImageIconとして読み込んで、JLabelにアイコンとして設定したらちゃんとアニメーションしてくれたのね
で、JLabelを継承して、paint(Graphics g)をオーバーライドしたら、拡大縮小回転を楽しめたんですよ。

ここで質問です。
paint(Graphics g)が呼ばれたときに、
アニメーションGIFの何フレーム目を表示しようとしてるか検出できますかね?

拡大縮小回転のさせたBufferedImageを保存して再利用したいんだけど、
今何フレーム目とかわからないと、再利用できない気がするんだぜ

151:デフォルトの名無しさん
07/10/19 01:50:12
>>149
気分とかカッコいいとかそういった主観に基づい行うもんじゃないだろ。
便利なのか必要なのかどうかで違ってくる。
それも言語仕様でサポートされてるから安心して使えるし。

152:デフォルトの名無しさん
07/10/19 03:48:14
日本語ってなかなかにグルー言語よね

153:デフォルトの名無しさん
07/10/19 07:37:14
>>151
同意!

154:デフォルトの名無しさん
07/10/19 07:46:07
>>148
文意を理解してよw
ギリシア語やタイ語の文字のグリフで変数名が書かれているかもしれないってこと。

155:デフォルトの名無しさん
07/10/19 08:45:12
日本語とハングルを同時表示するには両方に対応しているフォントが必要じゃね?

156:デフォルトの名無しさん
07/10/19 09:44:44
SDCだったかでハングルでコメント入ったソースコードは見たことある。
日本語環境のIDE上で表示できるかどうかはしらんけど。

157:デフォルトの名無しさん
07/10/19 12:18:44
>>140
エキサイト翻訳ででてきた意味不明な英語がはいるよりは漢字のほうがましだと思う
そのアプリは日本国外での開発で、海外で売る気があるのかい?と

数年後メンテをやらなくてはならない場合に
ドキュメントが残ってない場合把握しやすいというメリットもある

DBで日本語の項目名いれてNetBeansなりでJPAを生成でもすれば
日本語名のプロパティが見事に生成されるわけだが、わりとみやすいし
いざとなればリファクタリング一発だから問題はねぇな

158:デフォルトの名無しさん
07/10/19 12:19:33
>>150
とりあえず軽量コンポーネントでpaintそのものをオーバーライドするのやめれ

159:デフォルトの名無しさん
07/10/19 14:17:33
>>157
NetBeansだとGUIまわりのリファクタリングはひっかかるケースが多いけど。

160:デフォルトの名無しさん
07/10/19 14:44:40
Javaのバイトコードって変数名なんかも保存してるんじゃなかったっけ?
変数名に日本語使えばバイトコードにも残るの?

161:デフォルトの名無しさん
07/10/19 15:14:30
UFT8に変換されて残るからソースのエンコーディングがなんであれ問題なし。

162:デフォルトの名無しさん
07/10/19 16:18:19
ローカル変数も残るんだっけか?

163:デフォルトの名無しさん
07/10/19 16:24:36
テストケースのメソッドは日本語がたいへんよろしい。

164:デフォルトの名無しさん
07/10/19 16:26:36
デバッグ情報として残すことも残さないこともできる

165:デフォルトの名無しさん
07/10/19 21:02:52
ローカル変数やGenericsの型指定は残らないと思った。
C#だとGenerics型は残るらしいね。
Javaのはキャストしてるだけってのが理由だろうけど。

166:デフォルトの名無しさん
07/10/19 21:22:05
ローカル変数はフレームごとに領域(とlongとかあるので型のサイズ)だけ
確保されてたはず。


167:デフォルトの名無しさん
07/10/19 21:42:43
どっちにせよ日本語変数は問題なさそうだな

168:デフォルトの名無しさん
07/10/19 22:25:36
>>159
NetBeansのGUIコンポーネントの話はしてないよ
リファクタリングはJPAのほう
GUIのコンポーネントのリファクタリング問題は4.1あたりで直すとか言ってたのだが
絶賛放置中

>>167
なさそうではなくて問題ない
問題が出るとしたらマッピングがおかしい場合だけ

169:デフォルトの名無しさん
07/10/20 00:50:24
>>159
Netbeansは、リファクタリング無しでも日本語が使えないGUIエディタまわりがあるな。
Javaで作って、何でそうなるのか問い詰めてやりたい。

170:デフォルトの名無しさん
07/10/20 04:02:05
そりゃ日本語使ってないやつが作ってんだからそうなるだろ。
使わないものがどうなっていようとそれは仕様です。

171:デフォルトの名無しさん
07/10/20 04:45:28
aho

172:デフォルトの名無しさん
07/10/20 06:30:17
>>170
確かに国際化は意識して対応しないとまともに動かないけど
それってsunは他言語のことなんて知りません、手抜きですって告白してるようなものなんだが

173:デフォルトの名無しさん
07/10/20 06:52:51
Sunは、NetBeansを支援しているだけ。建前上は。

174:デフォルトの名無しさん
07/10/20 21:09:54
国際化で一番ひっかかるとこってどこだろうね。
やっぱフォントまわりかな。
文字列はダブルバイトでも1文字でカウントしてくれるし、
ファイルにはUnicodeで書き出するようにすればてっとり早い。

でもアプリの性質にもよるか。
エディタのように文字を扱うのは問題おきやすいかもね。

175:デフォルトの名無しさん
07/10/20 23:01:36
最近は見なくなってきたけど昔は Reader,Writer を使わずに
InputStream, OutputStreamで処理してる糞アプリや糞ライブラリ
をよく見かけたな…

176:デフォルトの名無しさん
07/10/21 00:04:32
NetBeansの日本語問題は直すつもりがないらしーぜ

177:デフォルトの名無しさん
07/10/21 00:59:58
使ってないから別にいいよ

178:デフォルトの名無しさん
07/10/21 03:01:53
どういうところが糞な

179:デフォルトの名無しさん
07/10/21 03:46:16
URLリンク(videointroplayer.web.fc2.com)

180:デフォルトの名無しさん
07/10/21 06:58:55
>>175
よく見かけるほどJavaアプリがあったのか

181:デフォルトの名無しさん
07/10/21 08:31:45
確に、GUI関係は何とかした方がよい。
Appletもいらない。


182:デフォルトの名無しさん
07/10/21 10:23:38
↑Appletはとても役に立っているから株やってみろ。まったく見識がないところは見逃してやるがなw

183:デフォルトの名無しさん
07/10/21 13:00:16
Appletはこれからだよ〜。

184:デフォルトの名無しさん
07/10/21 13:07:28
AppletよりJava Web Startの方がいいように思うんだが、なんか使ってるとこないねぇ……。

185:デフォルトの名無しさん
07/10/21 13:21:20
比べるものじゃなくて、どっちも必要だと思うよ〜。

186:デフォルトの名無しさん
07/10/21 14:02:14
Web Startってどういう場合に使うものなの?
アプリ配布じゃ駄目なのか?

187:デフォルトの名無しさん
07/10/21 14:08:52
>>186
バージョンが上がってもユーザーは自分の意志でダウンロードしなくていい。

望めばデスクトップのアイコンやスタートメニューのエントリも作ってくれる(後からでも)。
あたりまえだがアンインストールにも対応してる。


188:デフォルトの名無しさん
07/10/21 14:47:22
つまりバグを大量に仕込んだまま出荷しても、ほとんどのエンドユーザに気づかれずにアップデート可能ということか。

189:デフォルトの名無しさん
07/10/21 15:02:20
組み込み型DBつかってたりプラグインのあるアプリには使えないんじゃないの。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4901日前に更新/252 KB
担当:undef