5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Java低速GUI Swing 8

1 :デフォルトの名無しさん:2008/11/21(金) 11:24:21
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。

Java低速GUI Swing 7
http://pc11.2ch.net/test/read.cgi/tech/1204155623/
Java低速GUI Swing 6
http://pc11.2ch.net/test/read.cgi/tech/1190807478/
Java低速GUI Swing 5
http://pc11.2ch.net/test/read.cgi/tech/1161139809/
Java低速GUI Swing 4
http://pc8.2ch.net/test/read.cgi/tech/1140533866/
Java低速GUI Swing 3
http://pc8.2ch.net/test/read.cgi/tech/1121700954/
Java低速GUI Swing 2
http://pc8.2ch.net/test/read.cgi/tech/1095398949/
Java低速GUI Swing
http://pc5.2ch.net/test/read.cgi/tech/1062271447/l50

2 :デフォルトの名無しさん:2008/11/21(金) 11:25:06
VisualStudioのようなポトペタ開発環境がほしい!!
NetBeans
http://www.netbeans.org/index_ja.html
Eclipse+VisualEditorPlugin
http://www.eclipse.org/
http://www.eclipse.org/vep/
Jigloo
http://cloudgarden.com/jigloo/index.html

3 :デフォルトの名無しさん:2008/11/21(金) 11:25:58
AWTもターゲットに入ってていいんだよね?

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

Q. Nimbusって何よ。
A.
 次期Swingの標準となるとされているLAFです。
 元々は、SUNのGnome環境のテーマに使われていた見た目を移植したものになります。
 実装にはXMLベースでLAFを定義できるSynthLookAndFeel を利用しています。
 jdk6の開発版で試す事ができます。

Q. こんなプログラムを作れって言われたんですが・・・
A.
 宿題スレへどうぞ。

Q. なんでスレタイに低速って入ってるの?
A.
 まだまだ速くなるってことさ。

4 :デフォルトの名無しさん:2008/11/21(金) 11:37:19
GUIの質問なので、再度書き込みします。

こんなGUIのフォームを作りたいんですが、
その中でいくつか質問があります。

テーブルA  ボタン  テーブルB
ID Name        ID  Name
[1 ][A ]       [1 ][E ]
[2 ][B ]  (追加)  [2 ][F ]
[3 ][C ]  (削除)  [3 ][G ]
[4 ][D ]       [4 ][H ]

1.テーブルID項目は非表示にさせたいけど方法をおしえていただけませんか?
2.テーブルAセルを選択した状態で追加ボタンをおしてテーブルBに追加したいんですが、
 選択したセルの情報を取得する方法をおしえていただけませんか?

以上です。よろしくお願い致します。

5 :デフォルトの名無しさん:2008/11/21(金) 12:36:18
1.必要なデータを提供するモデルを実装する。
2.JTable#getValueAt(row,col)

6 :デフォルトの名無しさん:2008/11/21(金) 12:38:33
あ、選択した行、列はJTable#getSelected〜で。
API読めよw

7 :デフォルトの名無しさん:2008/11/21(金) 12:55:57
>>6
ありがとう御座います。
兆しがみえたのでちょっとやってきます。
>API読めよw
これってSunのクラス説明のこと?

8 :デフォルトの名無しさん:2008/11/21(金) 21:52:00
>>4のレベルだとリファレンスマニュアルよりもまずswingの参考書を
一冊読んだほうがよさそうな気がするなw

9 :デフォルトの名無しさん:2008/11/21(金) 23:34:02
くだらん嘲笑するぐらいなら
ちょっとのヒントぐらい書いてやればいいものを

10 :デフォルトの名無しさん:2008/11/22(土) 19:41:01
ヒントってか>>5で答がでてるじゃん…
あと参考書読んだ方がいいってのもヒントだと思うけど…

11 :デフォルトの名無しさん:2008/11/22(土) 20:59:12
>>10
>9はもっと丁寧に、そして空気を悪くするなって言いたいんでしょう。たぶん。

>>4
選択したセル番号を直接得ることはできないけど、選択した行と列を得るメソッドとして
それぞれgetSelectedRowとgetSelectedColumnというのがあります。

12 :デフォルトの名無しさん:2008/11/22(土) 21:07:50
答え既にでてるのにお疲れ様です。

13 :デフォルトの名無しさん:2008/11/24(月) 13:10:06
APIリファレンスを読んでから質問しましょう。

Java 6
http://java.sun.com/javase/ja/6/docs/ja/api/
Java 5.0
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/
Java 1.4.2
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/


14 :デフォルトの名無しさん:2008/11/24(月) 13:25:22
>>13
APIリファレンスってSwingの使い方がわかる人にしか意味ないし、
そういう人はたいてい質問してこないんじゃ・・・

15 :デフォルトの名無しさん:2008/11/24(月) 15:16:17
あのー、JFrameを勧める人が多いんですけど(swingなので当然ですが)、JFrameはスレッドがらみでダメダメって話があるんでやっぱりダメなんですか?


16 :デフォルトの名無しさん:2008/11/24(月) 16:13:29
>>15
お前が何をしたいのかが分からない
よって答えも出せなければ相談にも乗れない

17 :デフォルトの名無しさん:2008/11/24(月) 16:16:06
ダメなんですか
やめておきます

っていうレスの後押しが欲しいんだろ

18 :デフォルトの名無しさん:2008/11/24(月) 16:34:38
なんか殺気だってますねこのスレ。結局・・・人生ってのは孤独なものなのでしょうがないんでしょうか・・・

19 :デフォルトの名無しさん:2008/11/24(月) 16:52:40
>>18
同意して欲しいのかい?構ってちゃん

20 :デフォルトの名無しさん:2008/11/24(月) 16:58:56
慣れてくれば、JInternalPaneとかJAppletでやって、それを最後にFrameとかに貼り付けるかな。

21 :デフォルトの名無しさん:2008/11/24(月) 17:02:46
>JInternalPaneとかJAppletでやって
何をやるの?

22 :デフォルトの名無しさん:2008/11/24(月) 20:35:57
流石に>>15は釣りだろ…

23 :デフォルトの名無しさん:2008/11/24(月) 21:01:58
>>15は真性で
>>18が釣と見た


24 :デフォルトの名無しさん:2008/11/25(火) 09:54:16
V2C使ってみてSwingすげーと思った

25 :デフォルトの名無しさん:2008/11/25(火) 11:40:35
おまいら jEdit つかわんのか?

26 :デフォルトの名無しさん:2008/11/25(火) 16:39:48
>>23
いや、20だろ、釣りは。

27 :デフォルトの名無しさん:2008/11/25(火) 22:33:13
あほっても誰も構ってくれないなんか淋しいよな・・・

28 :デフォルトの名無しさん:2008/11/25(火) 22:57:44
JTextAreaの幅のみを固定して使いたいのですが、setPreferredSizeを使うと、
高さも固定されてしまいます。何か良い方法は無いでしょうか。

29 :デフォルトの名無しさん:2008/11/25(火) 23:06:15
ありません。

30 :デフォルトの名無しさん:2008/11/25(火) 23:15:25
おお…、無いですか。ありがとうございました。

31 :デフォルトの名無しさん:2008/11/25(火) 23:42:14
JComboBoxについて質問させてください。

現在、コンボボックスのプルダウン時の表示項目を
個別にDISABLEDにさせられる様にしようとしてます。

表示はCellRendererでどうにかなったものの、マウスで
DISABLEDにした項目をクリックすると選択が出来てしまいます。
この現象を防ぐためにはどのようにすればいいのでしょうか?

よろしくお願いします。

32 :デフォルトの名無しさん:2008/11/26(水) 00:30:08
http://java.sun.com/docs/books/tutorial/uiswing/dnd/droplocation.html
この例のようなやり方で自作コンポーネントへ、TransferHandlerによるDnDでドロップ位置の表示を行おうとしています。
この方法でsetDropLocation(←自作コンポーネントに作成したアクセサ)によりDropLocationを設定すべき場所は、TransferHandler内ではどの場所でしょうか?

入力しようとするときに表示させるものなので、現在は
TransferHandler#canImport(TransferSupport)
内でsetDropLocation(support.getDropLocation())
としています。
一応表示はされますが、この方法ではドロップターゲットが変わった場合にsetDropLocation(null)とできないため、ドロップ位置の表示が消えません。
何かドロップ位置を表示するスマートな方法はありませんでしょうか?

33 :デフォルトの名無しさん:2008/11/26(水) 11:00:19
JListはsetListData()でオブジェをセットできますが、
JTableはなにを使えばオブジェをセットできますか?


34 :デフォルトの名無しさん:2008/11/26(水) 11:51:40
>>28
JTextArea を入れるコンテナのレイアウトを工夫する。
たとえば BorderLayout では
EAST と WEST のコンポーネントは
横幅が preferred size の横幅に固定され、
高さはコンテナのサイズによって変わる。


35 :デフォルトの名無しさん:2008/11/26(水) 12:13:47
JWindow上のコンポーネントのツールチップを表示させるにはどのようにすればよいのでしょうか?

36 :デフォルトの名無しさん:2008/11/26(水) 12:35:26
>>35
普通はどうやってるの?
JWindowでだけ特殊だという意味?
ツールチップの設定の仕方自体を知らないという意味?


37 :デフォルトの名無しさん:2008/11/26(水) 12:38:26
いえ、普段JFrameにコンポーネントのせていて、元々対応していないものであればToolTipManagerで登録して・・のような流れで表示させていたのですが、JWindow(JFrame以外のwindow?)にのせてみると表示されなくなったのです。

38 :デフォルトの名無しさん:2008/11/26(水) 12:58:28
>>37
普通の使い方は、JComponent#setToolTipText()でしょ。
で、うろ覚えだけど、JComponent#setToolTipText()でString引数がnullかどうかで、
ToolTipManagerに登録(registerComponent(JComponent),unregisterComponent(JComponent))されるように実装されてたはず。

なので、
>元々対応していないもの
これの意味が分からない。
ToolTipManagerはそもそも、JComponentしか受け付けないはずだし、
JComponentであれば、ツールチップを表示させられる。
であるのに、元々対応していないものとは?

あとは、JFrameを使用しているほうのバージョンでは、
setInitialDelay()等のhogeDelayプロパティを変更しているとか。
ツールチップを無効にしているとか。
JFrameを使用しているほうのバージョンとJWindowのコードとの差を検査した方が良いと思う。


39 :デフォルトの名無しさん:2008/11/26(水) 13:17:37
>>37
38です。
ちょっとコード書いてみたけど、たしかに動かない。。すまん。
JWindow,ToolTipManagerのソース見たほうが良いかも。
class Hoge{
public static void main(String[] args){
JWindow window = new JWindow();
//JFrame window = new JFrame();
JButton buton = new JButton("Button");
buton.setToolTipText("tip");
window.getContentPane().add(buton);
window.setBounds(0, 0, 450, 450);
window.setVisible(true);
}
}

40 :デフォルトの名無しさん:2008/11/26(水) 13:20:43
>>39のコード
EDTで起動してないとこは大目にみて、修正してね。

41 :デフォルトの名無しさん:2008/11/26(水) 13:53:35
理由はよく分からないけど、
Frame を表示させないで
Window だけを表示すると
ちゃんと動作しないことがある。


42 :デフォルトの名無しさん:2008/11/26(水) 20:29:30
ownerなしのJWindowだと、フォーカスが取れないからじゃね?
JFrameで setUndecorated(true) と setAlwaysOnTop(true)くらいやっとけば、代わりになるんじゃね?

43 :デフォルトの名無しさん:2008/11/26(水) 21:15:51
Jtableって何行まで行があるとかわかるクラスある?
あったら教えて。

44 :デフォルトの名無しさん:2008/11/26(水) 21:27:27
>>43
行数なら、JTable,TableModelだけど、
言ってるのは、多分、有効なデータがある最大行インデックスってことだと推測するなら、
そんなapiありません。

45 :デフォルトの名無しさん:2008/11/26(水) 22:39:15
JTable自体にメソッドついてるよ、getRowCount()が。

46 :デフォルトの名無しさん:2008/11/26(水) 23:47:01
>>45
JTable#getRowCount()やTableModel#getRowCount()じゃなく、
これ系統の話じゃないのか
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47155&forum=7&14


47 :デフォルトの名無しさん:2008/11/27(木) 00:05:16
「Jtableって何行まで行がある」かとしか読み取れない

48 :デフォルトの名無しさん:2008/11/27(木) 00:50:48
そうか。
個人的には「何行ある」と「何行まで行がある」では違うと思うけど。
本人じゃないから分からないけどさ。

49 :デフォルトの名無しさん:2008/11/27(木) 00:59:26
43の教えてクンぶりはあまりといえばあまりなんだけど
「何行ある」と「何行まで行がある」は双方どう違うのか興味が出てきた

50 :デフォルトの名無しさん:2008/11/27(木) 01:02:41
平和だな〜

51 :デフォルトの名無しさん:2008/11/27(木) 10:50:13
JTextFieldに入力した文字をリストに格納したいんだけど、
JTextFieldの入力が終わったって判断するにはどうしたらいいんだ?
イメージではフォーカスがかわった時イベントを起こすようにしたいんだけど

52 :デフォルトの名無しさん:2008/11/27(木) 10:55:27
addFocusListenerでいんじゃね?

53 :デフォルトの名無しさん:2008/11/27(木) 11:01:45
focusLost使ってフォーカス変わったタイミングで格納するわ

54 :デフォルトの名無しさん:2008/11/27(木) 12:55:10
>>51
エンターを押してもらう

55 :デフォルトの名無しさん:2008/11/27(木) 19:58:14
JFormattedTextField を文字列(または空文字列)でコンストラクトし、
value に関するプロパティのイベントを捕捉すれば、いい感じかも。

フォーカスが外れたりリターンキーが押されたりしたときに
(文字列が変わってれば)イベントが発生するっぽい。

56 :デフォルトの名無しさん:2008/11/28(金) 11:02:32
現時点において、世間で一番成功したSwingアプリってなんだろ?
CabosってSwingアプリだっけ?

ム板で聞いてもバイアスがかかると思うので、
IDE各種(Eclipse, NetBeans, etc)と2ch専ブラ(V2C,etc)は却下。

いやさ、実行系絡みのトラブルシュート対策のページを
パクらせてもらおうと思って。

57 :デフォルトの名無しさん:2008/11/28(金) 13:38:15
V2Cだろ

58 :デフォルトの名無しさん:2008/11/28(金) 13:48:43
jEdit だろ

59 :デフォルトの名無しさん:2008/11/29(土) 03:43:20
limewire

60 :デフォルトの名無しさん:2008/11/29(土) 04:37:51
外為どっとコムww。なぜかFirefoxで動かないけど。
やっぱリアルタイム性のあるとこかな

61 :デフォルトの名無しさん:2008/11/29(土) 09:11:32
jude

62 :デフォルトの名無しさん:2008/11/30(日) 19:08:08
JListにはJTreeみたいな編集機能はないんかの?

アイテムの名前変更できるようにしようとして、ぐぐってもなんも引っかからんぜ

63 :デフォルトの名無しさん:2008/11/30(日) 19:31:01
ないなぁ
けど実装はそんなに難しくないよ

JTableを1列で、とかだめ?w

64 :デフォルトの名無しさん:2008/11/30(日) 20:19:02
実装は難しくないのか。

まだ容易されてる入り口と、ぐぐって出てくる手法でしか作ってないから想像もつかないぜ

JListとJTableを組み合わせて使ってるから、JTableのアイテムを編集させてみる。
気が向いたら、その難しくない実装とやらをがんばってみるかな

65 :デフォルトの名無しさん:2008/11/30(日) 20:48:41
JTableのソースを見て、CellEditorを中心に見てみると結構参考になるかも。

66 :デフォルトの名無しさん:2008/12/02(火) 22:47:32
JScrollPaneのViewportViewにJTreeを二つ設置したJPanelを指定したのですが
スクロールペインの中央にJTreeが並んでしまって困ってます
BoxLayoutでJPanelにJTreeを設置するとテキストがまともに表示されない(後半が途切れる)ので
GridBagLayoutで白紙のパネルをJTreeの下に設置し、JTreeを左上になんとか表示してます
こんな無理矢理な方法を使わず、素直にJTreeを二つスクロールペインの左上に設置する方法は無いでしょうか?
何方かご教授下さい…

67 :デフォルトの名無しさん:2008/12/03(水) 16:48:33
今ひとつ分からないけどこれでだめ?
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

JPanel viewportView = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0));

JTree tree1 = new JTree();
JTree tree2 = new JTree();

viewportView.add(tree1);
viewportView.add(tree2);

frame.add(new JScrollPane(viewportView));
frame.pack();
frame.setVisible(true);

68 :デフォルトの名無しさん:2008/12/03(水) 16:50:03
みすってたー
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

FlowLayout fl = new FlowLayout(FlowLayout.LEFT,0,0);
fl.setAlignOnBaseline(true);
JPanel viewportView = new JPanel(fl);

JTree tree1 = new JTree();
JTree tree2 = new JTree();

viewportView.add(tree1);
viewportView.add(tree2);

frame.add(new JScrollPane(viewportView));
frame.pack();
frame.setVisible(true);

69 :デフォルトの名無しさん:2008/12/03(水) 22:15:15
>>68
ありがとうございます!明日試してみます!…ノートPC持って帰ってくるの忘れたorz
口で説明しても伝えられない気がしてきたので簡易ながら図解にしてみました。
ttp://toku.xdisc.net/cgi/up/ttt/nm6024.jpg.html
上の理想像のように配置したいのですが、BoxLayoutだと下図のようにテキストが途切れます…

70 :デフォルトの名無しさん:2008/12/03(水) 22:46:19
JTreeを2つ使う理由がわからん。
JTreeを1つで、setRootVisible(false)にすればええやん。

71 :デフォルトの名無しさん:2008/12/04(木) 06:45:15
こんな感じかな

panel.setLayout(new BorderLayout());
panel.add(tree1, BorderLayout.NORTH);
panel.add(tree2, BorderLayout.CENTER);
scrollPane = new JScrollPane(panel);


72 :デフォルトの名無しさん:2008/12/04(木) 19:34:31
>>70
それやったら何も表示されなくて…
JTree二つあった方がラクかなぁ?と思って組み始めたんです。

>>71
tree2が中央に来ました…orz

73 :デフォルトの名無しさん:2008/12/04(木) 21:30:24
>>72
>>70 でやったときにTreeNodeが表示されないと言っている?TreeModelの使い方は理解してる?

ここ↓をひととおり読んでみた?
http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html

74 :デフォルトの名無しさん:2008/12/04(木) 22:31:32
いつの間にか jdk 6u11 が出てるな…

75 :デフォルトの名無しさん:2008/12/05(金) 00:49:36
今日JavaFXリリースだというのにまったく盛り上がってないなw

76 :デフォルトの名無しさん:2008/12/05(金) 00:53:24
忙しくて試す時間ないんだけど、どんな感じ?

77 :デフォルトの名無しさん:2008/12/05(金) 05:22:12
もういらねーんだよ。うじゃうじゃとアホなスクリプト言語とか。

78 :デフォルトの名無しさん:2008/12/06(土) 12:47:42
JavaFX結構おもしろいじゃん
ただ何やってるか分からんけど起動がえらい遅い

79 :デフォルトの名無しさん:2008/12/06(土) 23:29:05
ブラウザからデスクトップにドロップするやつ試したやついる?
あとアニメとかはどうだ。滑らかに動くのか。
とにかく生情報がほしいな。

自分はOSバージョンの関係で試せないけど、試したやつ報告よろしく

80 :デフォルトの名無しさん:2008/12/07(日) 01:58:37
JavaFXはスレ違い

81 :デフォルトの名無しさん:2008/12/07(日) 02:03:37
Java FXってGUIはSwingそのものなの?

82 :デフォルトの名無しさん:2008/12/07(日) 02:17:15
このスレの解答者はカスしかないけどから一応こたえてやると・・・
siwngはjavacでコンパイルされてバイトコードになるためjvm共通のwidgetになるから
javafxcでJFrame{}とかすれば当然JFrame.classが呼ばれてswingそのものを呼び出しているといえる。

83 :デフォルトの名無しさん:2008/12/07(日) 07:32:52
「WOLF RPGエディター」とは? 
・高度なRPG開発が可能な、完全無料のゲーム作成ツールです。
・雰囲気はRPGツクール2000に近い。RPGツクール2000で自作システムを作りこむ際に
 不満だったところがいろいろ解消されていて、かなり自由度が高いです。ただし
 その分初心者には難しいかも。すでにツクール2000で自作システムを組むのに
 慣れた人やRPGツクールでは物足りないけどプログラミングはちょっという方にお勧め。
・作成したゲームは自由に配布したり、コンテストに投稿することも可能。
 また本ソフトを持たない人でもプレイ可能!ファイル暗号化も完備してるよ!
・要望、不満点、バグ報告などなど書き込みお願いします。今もどんどん進化中です。
・それとマップやキャラなどのドット素材もじゃんじゃん募集中ですので
 一度サイトにお越しくださいませ。
・このツールで作ったゲームをサイトで紹介してるから、ダウンロードしてどういう
 ゲームが作れるのか見てみてね。

2ちゃん本スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1226294070/l100

84 :デフォルトの名無しさん:2008/12/07(日) 14:02:31
このスレの解答者はカスしかないけどから
このスレの解答者はカスしかないけどから
このスレの解答者はカスしかないけどから
このスレの解答者はカスしかないけどから
このスレの解答者はカスしかないけどから
このスレの解答者はカスしかないけどから

85 :デフォルトの名無しさん:2008/12/07(日) 14:36:13
>>84
>>82 の回答を見ると納得してしまうなw

86 :デフォルトの名無しさん:2008/12/07(日) 14:38:40
>>84
×解答
○回答

87 :デフォルトの名無しさん:2008/12/07(日) 15:51:51
そろそハードウェア対応のCompositeを増やしてくれないものか…
加算半透明が欲しいけど、そういう人は少ないのかなあ。

88 :デフォルトの名無しさん:2008/12/07(日) 16:07:38
javafxはどこで話せばいいの?

89 :デフォルトの名無しさん:2008/12/07(日) 17:21:02
ここかJDK7のスレッドだろうね

90 :デフォルトの名無しさん:2008/12/07(日) 19:26:39
jdk1.4からpaintが改善されてきてjdk1.6でほぼnativeと同等になったから、そろそろそういうブレンドとかのクラスも出てくるんじゃないか?
今はCPUに計算させて力でごり押しでもいいだろうけど、本来のやり方は力業計算はjoglとかハードの方を使って(経由して)計算させるものなのかと思う。
そういうの説明してるサイトはあまりないけどね。


91 :デフォルトの名無しさん:2008/12/07(日) 21:36:37
すごく初歩的なことかもしれないんですが、packって必ず呼ばないといけないんでしょうか?

92 :デフォルトの名無しさん:2008/12/07(日) 21:53:12
いいえ
packしたい時に呼べばいいだけです

93 :デフォルトの名無しさん:2008/12/07(日) 22:33:58
packは使うべきかどうかどう判断すればよいのでしょうか?

94 :デフォルトの名無しさん:2008/12/07(日) 22:45:50
packがやることは分かる?

95 :デフォルトの名無しさん:2008/12/07(日) 22:53:31
各コンポーネントの推奨サイズを見て、ウィンドウ全体のサイズを決定、でしょうか?

96 :デフォルトの名無しさん:2008/12/07(日) 23:12:21
ウィンドウを推奨サイズにしたい場合は pack()
自分でサイズを指定したい場合は
setSize() とか setBounds() とか


97 :デフォルトの名無しさん:2008/12/09(火) 19:16:25
JDK1.6u11になってNimbusを今まで作ってきたアプリでためしてみたんだが微妙だなぁ。
こっちの書き方も悪いんだけど、それを差し引いてもあちこちにデザインの破綻が起きる。
画像アイコンを入れたボタンやカスタマイズした部品の修正が大変。
Metalのほうが細かい操作面や様々なケースで、神経が行き届いていたように思われ。

98 :デフォルトの名無しさん:2008/12/09(火) 22:19:01
addElement
public void addElement(Object obj)指定されたコンポーネントをリストの末尾に追加します。
パラメータ:
obj - 追加されるコンポーネント

DefaultListModelのaddElementのリファレンスを読んでコンポーネントも追加できるのか…?と思い
JPanelをaddしてみたんですが、文字列らしきもの(ポインタ的な何か…?)が表示されるだけで上手く行きません。
そもそもコンポーネントの追加という意味を私が取り違えているのでしょうか?お教え下さい

99 :デフォルトの名無しさん:2008/12/09(火) 22:29:41
普通はUIを頻繁に変えたりしない思うけどね。
昔のxのウィンド・マネジャの乱立とかwinデスクトップテーマの流行を思い返す。
system uiのwinでぽっぽアップしたときのメニュー文字のギャップをもう少し広げてくれると
win ui (win classic ui)とほぼ同じでハッピーなんだけど。

100 :デフォルトの名無しさん:2008/12/09(火) 22:49:05
>>98
コンポーネントは広い意味でのコンポーネントって表現だと思う。
英語版のjavadocが"Component"になっているから、そう訳したんだと思う。
Objectが引数だから、JPanelだろうが、通常やらないだろうけど、Timerだろうが何でも格納はできる。

表現が的確か分からないけど、ListModelは単なるデータストアであって、
ListModelから取り出したデータを、どう表現するかはCellRendererの役目。

一度、java tutorialとかで基本的なところを勉強するといいと思う。

101 :デフォルトの名無しさん:2008/12/09(火) 22:52:29
>>98
デフォルトのレンダラでは対応していないのでJPanelを要求通りに表示できるレンダラに変更

102 :デフォルトの名無しさん:2008/12/09(火) 23:14:46
>>99
JMenuItemのsetMargin()とか呼んでみたら?

ポップアップメニューのL&Fの更新ってプログラマーの責任だったっけ。
JComponent#setComponentPopupMenu()だけでは自動更新してくれなかった記憶が。

103 :デフォルトの名無しさん:2008/12/10(水) 21:52:27
>>100-101
本当にありがとうございます。CellRenderer改変して無事に完成しました
JPanel上にBorderLayoutでJLabelを2つ設置してそれを返すようにしたら想像通りのものに…!

JLabelの背景色変更しても色変わらなくて、2時間程経ってからsetOpaqueの存在を知りました。
もっと情報検索を上手いとこ出来るようになりたいですorz

104 :デフォルトの名無しさん:2008/12/11(木) 01:05:13
>>102
>ポップアップメニューのL&Fの更新ってプログラマーの責任だったっけ。
1.7.0で修正されたはず。

105 :デフォルトの名無しさん:2008/12/11(木) 02:07:02
>>104
1.7か。遠い未来・・・でもないがまだまだだろうなぁ

106 :デフォルトの名無しさん:2008/12/11(木) 03:32:06
javax.swing.undoではまったのでメモ。
例えば、文字列の置換のような削除、挿入という複数の処理を1回で元に戻したい場合は
UndoManagerを入れ子にする。

UndoManagerを2つ用意して、基本はサブに追加する。一塊の処理が終わったらend()を呼んでメインに追加する。

void undoableEditHappened(UndoableEditEvent e) {
  sub.addEdit(e.getEdit());
  if (!compound) {
    sub.end();
    main.addEdit(sub);
    sub = new UndoManager();
  }
}

ちなみに普通にUndoをするだけならリスナにUndoManagerを追加するだけで出来ます。

JTextField tf = new JTextField();
tf.getDocument().addUndoableEditListener(new UndoManager());

107 :デフォルトの名無しさん:2008/12/12(金) 11:25:31
HTMLDocument/HTMLEditorKitってなんでこんなに使いづらいんだブツブツ…

108 :デフォルトの名無しさん:2008/12/13(土) 12:36:19
>>107
わー、同士よ。使ってる人、他にもいたんだ。

6u10以降、javax.swing.text.html
でちゃんと日本語HTML表示できている?

WebKitベースの新APIが1.7で登場するという噂はどうなったんだ…

109 :デフォルトの名無しさん:2008/12/13(土) 15:29:45
>WebKitベースの新APIが1.7で登場するという噂はどうなったんだ…
JWebPaneでしょ?
JWebPane は、Java7からってことになってるけど、Java7は1年半後らしいからね、いつになるやら。
たしか、AIRはWebBrowserコンポーネントを提供してるから、
JavaFXがAIRに対抗するために、リリース時期が早まるんじゃないかと少し期待してる。

110 :デフォルトの名無しさん:2008/12/13(土) 16:33:11
JavaやってるとWindowsのexeが作れない。。
また、SwingやAWTの設計でGUI画面作るのもちょっといやだ。
Windows専用のJavaGUIライブラリどこかの会社でうまいことつくってくれないかな?
できれば、Delphi作ってる会社が作ってくれたりするといい。MSでもいいけど絶対作ってくれ無そう。

最悪、Javaで作ったファイルをWindows用exeに変換してくれるだけでもいい。できれば、UIもWindowsっぽくして・・

111 :デフォルトの名無しさん:2008/12/13(土) 16:40:45
そんな思いまでしてjavaで作らなくても
そういう要求って仕事でやってるわけじゃないよね

112 :デフォルトの名無しさん:2008/12/13(土) 16:52:18
ネタ乙

113 :デフォルトの名無しさん:2008/12/13(土) 17:41:15
>>110
Excelsior JET + SWT

どっちにしろ Swing とは関係ないネタだ。

114 :デフォルトの名無しさん:2008/12/13(土) 18:24:26
exewrapで十分だろ
Cocoaで作りたいとかいうならまだしもWindows寄りの設計って嬉しいか?

115 :デフォルトの名無しさん:2008/12/13(土) 21:51:21
WinAPIもMFCも面倒なだけ

116 :デフォルトの名無しさん:2008/12/14(日) 00:27:37
>>113
あるいはgcjという手もあるな。
Swingと関係ないのは確かにその通りだが。

117 :デフォルトの名無しさん:2008/12/14(日) 01:18:32
>>110
>JavaやってるとWindowsのexeが作れない。。
つJSmooth

>また、SwingやAWTの設計でGUI画面作るのもちょっといやだ。
どこら辺が気にいらんの?
俺、SwingやAWTからGUIに入ったんでよくわからないんだ。
.netもやってるけど、上っ面撫でてるだけならそんなに違わないと
思ったが。


118 :デフォルトの名無しさん:2008/12/14(日) 01:43:49
だからネタだっていってんだろw

119 :デフォルトの名無しさん:2008/12/16(火) 15:03:36
うまい方法が見つからないのでちょっと相談。コンポーネントの配置の仕方なんだけど。

JLabel [JTextField]
JLabel [JTextField]

というように、4の部品がならんでいる。
JTextFieldは、JFrameサイズに応じて幅一杯まで伸び縮みできるようになってほしい。
JLabelは文字列のサイズで固定されてほしい。
ただし、上段と下段でJTextFieldの位置をきっちり揃えたい。

GridBagLayoutだと、位置はきちんとそろうけど、JTextFieldが伸び縮みできない。
GridLayoutだとJLabelとJTextFieldの幅が等間隔に割り付けされてしまうのでだめ。
1段分をBorderLayoutのWESTにJLabel,CENTERにJTextFieldを入れ、GridLayoutで縦にならべると、
だいぶ希望に近づくが、JLabelに入る文字列の長さが異なると、JTextFieldの頭の位置が上下でそろわない。
なんかいい方法ないかなぁ・・・

120 :119:2008/12/16(火) 15:10:57
それから
PreferredSizeでJLabelのサイズを固定する方法も考えられるけど、
LaFが変更されたとき崩れない保証がなくなるので、できるだけレイアウトマネージャだけで解決したい。

121 :デフォルトの名無しさん:2008/12/16(火) 15:44:19
>>119
GridBagConstraintsを適切に設定してないんじゃないか

public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
frame.add(new JLabel("Label 1:"), new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
frame.add(new JTextField(), new GridBagConstraints(1, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
frame.add(new JLabel("Label 2:"), new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
frame.add(new JTextField(), new GridBagConstraints(1, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
frame.pack();
frame.setVisible(true);
}
}

122 :119:2008/12/16(火) 19:16:21
>>121
ありがとう。
IDEのGUIエディタが生成したコードとにらめっこしたのですが、
weightx,weightyの値が1に設定されていなかったのが原因でした。
私はこまかいところに神経が行き届いていなかったようです。
勉強になりますた!

123 :デフォルトの名無しさん:2008/12/16(火) 21:37:57
GroupLayoutが適切すぎる

124 :せっかく作ってみたので貼ってみるテスト:2008/12/16(火) 22:01:12
JFrame frame = new JFrame();
JLabel label1 = new JLabel("Label 1:");
JLabel label2 = new JLabel("Label 2:");
JTextField field1 = new JTextField(10);
JTextField field2 = new JTextField(10);

GroupLayout layout = new GroupLayout(frame.getContentPane());
frame.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);

layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(label1)
.addComponent(label2))
.addGroup(layout.createParallelGroup()
.addComponent(field1)
.addComponent(field2)));

layout.setVerticalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(Alignment.BASELINE)
.addComponent(label1)
.addComponent(field1))
.addGroup(layout.createParallelGroup(Alignment.BASELINE)
.addComponent(label2)
.addComponent(field2)));

frame.pack();
frame.setVisible(true);


125 :デフォルトの名無しさん:2008/12/16(火) 22:03:27
>>121
GridBagConstraints に引数付きのコンストラクタがあることを
初めて知ったよ。
IDEの吐くコードでのみ使えって、ドキュメントにはあったけど。

>>123
いつのまにか java.awt でないレイアウトマネージャが増えてくね。

126 :デフォルトの名無しさん:2008/12/17(水) 21:58:56
JTabbedPaneでタブを表示させてるんだけど
特定の設定になった時はタブが5枚あったら、その3番目と5番目だけを非表示にしたいんだ
setEnabledAtで選択不可には出来たけど、出来ることなら非表示にしたい…
機能的には選択不可で問題無いが、見栄え的に半端な位置のタブが選択不可になってるのはみっともなくて。
何か良い解決策は無いだろうか?orz

127 :デフォルトの名無しさん:2008/12/17(水) 22:09:41
タブのペインをグレイアウトさせる。

128 :デフォルトの名無しさん:2008/12/18(木) 11:38:28
タブを削除する

129 :デフォルトの名無しさん:2008/12/18(木) 21:48:35
実際に試してないから成功するか分からないけど、
非表示にしたいタブを getTabComponentAt() で取得して
setPreferredSize() で推奨サイズをゼロにする。
あるいはサイズがゼロのコンポーネントを用意して
setTabComponentAt() を呼ぶ。


130 :デフォルトの名無しさん:2008/12/18(木) 21:54:38
>>127
リファレンス読んだけどやりかた分からなかったorz
>>128
非表示にしても、タブ内のデータを見ることがあるから出きれば削除は避けたいんだ…
>>129
おお、ちょっと試してみる!サンクス!

131 :デフォルトの名無しさん:2008/12/18(木) 23:43:17
>>130
>>128がベストアンサーだと思う。
TabbedPaneの外でコンポーネントを自前で管理する。ってことだと思う。
管理といってもHashMapとかのコレクションで持っておくだけだけど。

132 :デフォルトの名無しさん:2008/12/19(金) 00:01:02
>>131
なるほど…
HashMap、名前は良く見るが使い方を知ろうとしてなかったorz
ちょっと調べて色々試してみる。>>130,>>131ありがとう

133 :デフォルトの名無しさん:2008/12/19(金) 08:23:39
HashMapを知らないというのはJava屋として絶望的だな。

134 :デフォルトの名無しさん:2008/12/19(金) 09:00:24
HashMapを知らなくても営業できるほどフレームークにおんぶに抱っこだったのか?



135 :デフォルトの名無しさん:2008/12/19(金) 09:09:50
フレームーク

136 :デフォルトの名無しさん:2008/12/19(金) 09:19:36
ガッチャピン?

137 :デフォルトの名無しさん:2008/12/19(金) 10:33:39
>>132
人に聞いてばかりで自分で調べたりしてないからだろう
おまえの無能さが文章によく出てる

138 :デフォルトの名無しさん:2008/12/19(金) 11:43:56
たった5個(実質2個固定)のタブ耳の管理にHashMapかよ。おめでたい話だ。
連想配列の実装したことあるのかい?
これだからPerl厨は…

139 :デフォルトの名無しさん:2008/12/19(金) 12:10:43
HashMapも知らない奴が何かほざいてるよww

140 :デフォルトの名無しさん:2008/12/19(金) 12:59:41
オレ、JSplitPaneのコンポーネント管理をTreeMapで実装してるぜ!
キーはもちろん"LEFT"と"RIGHT"さ!

141 :デフォルトの名無しさん:2008/12/19(金) 13:11:15
アルゴリズムとデータ構造も知らない奴がプログラミングしても通用する時代になったんだな。

142 :デフォルトの名無しさん:2008/12/19(金) 15:27:10
力業でもどうにかなるくらいに環境が豪勢になったからのう。



143 :デフォルトの名無しさん:2008/12/19(金) 18:46:16
アルゴリズムとデータ構造も知らない奴がゲーム作りたいって巣くってるのがゲ製板だしな。

144 :デフォルトの名無しさん:2008/12/19(金) 19:00:25
昔と違ってハード性能がよくなったからソースが見やすくて何よりです
対応表片手にビット管理とかもう嫌だお!

145 :デフォルトの名無しさん:2008/12/24(水) 01:24:16
ハッシュマップと連想配列って似たようなもんじゃねえの?

146 :デフォルトの名無しさん:2008/12/24(水) 01:36:15
呼び名が違うだけ辞書配列ともいう

147 :デフォルトの名無しさん:2008/12/24(水) 02:49:51
ソースは頑張れば見やすく作れるようになっている。
チューニングする場所ってのは限られている。

148 :デフォルトの名無しさん:2008/12/27(土) 14:38:42
スレッドを使ってGUIを更新(?)することについて質問です。

あるボタン(ボタンA)を押したら、新しいボタン(btn)が表示されるようにしたいと思っているのですが、
ボタンAを押しても表示されません。
ボタンを張りつけたJPanelのgetComponentCount()を使ってみると、
add()は正しくできてるようなのですが、それでも表示されません。

btn.repaint()をやっても表示されないのですが、
btn.setVisible(false) → btn.setVisible(true)とすると表示されます。

上のsetVisible()を使うのはスマートじゃないような気がして、
invokeLater()を使ってみたりもしたのですが、結局setVisible()を使わなければ表示できません。

新しくボタンを表示させるにはsetVisible()を使うしかないのでしょうか?
他に良いやりかたがあれば、教えてもらいたいです。

文章へたくそなので、一応ソースのURLも貼っておきますね。
クラスは3つで、それぞれ45行以下のテキストです。
http://www.geocities.jp/mshinke01/Test.java
http://www.geocities.jp/mshinke01/ThreadTest.java
http://www.geocities.jp/mshinke01/LaterThread.java

149 :デフォルトの名無しさん:2008/12/27(土) 16:28:08
つ revalidate

150 :デフォルトの名無しさん:2008/12/27(土) 16:56:28
最初に>>149と同じようにrevalidateを試しましたが、他には
初めからsetVisible(false)でpanelにaddしておいて
スレッドでsetVisible(true)にするのもうまくいきました。

151 :148:2008/12/27(土) 18:44:27
>>149
>>150
返事ありがとうございます。

revalidateについて調べてみますね。
もし自分が理解できなかったら、>>150 さんの言う方向でやってみたいと思います。

ありがとうございましたorz

152 :デフォルトの名無しさん:2008/12/27(土) 18:48:32
JComponent#setVisible()を呼ぶともれなくrevalidateが呼ばれる件について

153 :デフォルトの名無しさん:2009/01/07(水) 15:45:53
Swingでインクリメンタルサーチを実現したいのですが、
便利なクラス(インクリメンタル用)みたいのものはあるでしょうか?
自力で実装しなければならないとき、ヒントになる手法があれば教えていただけないでしょうか?

154 :デフォルトの名無しさん:2009/01/07(水) 16:15:20
Swing Hacks

155 :デフォルトの名無しさん:2009/01/07(水) 22:57:10
どのコンポーネントでインクリメンタルサーチするの?

156 :デフォルトの名無しさん:2009/01/08(木) 00:23:41
JFrame#setLocation()が効かないんだけど、同じ現象遭遇してる人いる?
JFrame#setVisibe(true)の前でも後でも全然きかない。

JFrame#setLocationByPlatform()もだめ。。

157 :デフォルトの名無しさん:2009/01/08(木) 05:15:38
使用環境も書かず、どう効かないか、最初からなのか何かのきっかけでそうなったのかも書かず。
ウインドウマネージャ次第では強制的に再配置している可能性も。

158 :デフォルトの名無しさん:2009/01/08(木) 12:51:45
>>153
>Swingでインクリメンタルサーチ

Googleのクエリ候補表示みたいな事を
コンボボックスでやりたいのかな?

それともいわゆるEmacsみたいなインクリメンタルサーチ
をJTextComponentで実現したいのかしら?

159 :156:2009/01/08(木) 19:25:06
>>157
すまん、
実行環境はWinXP、
開発環境はEclipse3.4
ビルドはJDK1.6.0_03、
実行JREは1.6.0_07に設定
現象は、どこにsetLocation()してsetVisible(true)しても画面左上にJFrameが表示されてしまう。
最初からです。

いかがなもんでしょう!?

160 :デフォルトの名無しさん:2009/01/08(木) 19:39:57
>>159

ComponentListenerを使って、
いつ誰が左上に動かしてるのか見張ってみるのはどうでしょう。

161 :デフォルトの名無しさん:2009/01/08(木) 21:26:46
レイアウトマネージャがよしなに配置してるだけじゃないの?
ソース晒せ。


ふるいやつだと、わざわざgetContentPane().setLayout()するのが面倒だなあ。
ヲレクラスで更にラップするのがめんどくさがりにはよさそうだ。

162 :デフォルトの名無しさん:2009/01/09(金) 08:09:06
update 7ってバグ多くなかったっけ?

163 :デフォルトの名無しさん:2009/01/09(金) 08:39:20
>>159
import javax.swing.*;
public class Foo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
//f.setLocation(300, 300);//どちらか
f.setLocationByPlatform(true);//どちらか
f.setVisible(true);
}
});
}
}
みたいに単純化したものでも同じ現象になる?
うちはWinXP+1.6.0_11だけど、setLocationでもsetLocationByPlatformでもきちんと機能する。
Windowsの標準シェルならウインドウマネージャが強制再配置するようなことはなさそうだし…

164 :デフォルトの名無しさん:2009/01/09(金) 09:02:45
そこでHashMapを使うんだ!

165 :デフォルトの名無しさん:2009/01/10(土) 06:09:58
>>163
JFrameのコンテンツペインには何も追加しないの?
コンテンツペインに追加したコンポーネントのpreferredSizeに
スクリーンをはみ出さない程度のDimensionを設定したら、
setLocationがちゃんと効いた記憶があるんだけど。
違ってたらごめん。

166 :デフォルトの名無しさん:2009/01/10(土) 16:08:05
コンポーネントなしのタイトルバーだけのJFrameでもsetLocationは効くのが普通だけど
>>159のソースが分からないことには何とも言えんから問題の切り分けってことなら
>>163のようなものでも動作がおかしいのならJava環境かWin環境自体が変な可能性大だし
削ぎ落としたものは大丈夫なんだったら
JFrame自身の位置情報に影響を与えるようなコンテンツが入れられているか
自分でも知らないうちに別の場所で位置を書き換えているようなコードを入れているかなので
差し支えない範囲でソースを出してもらわないと他の人間には判断のしようがないと思う

167 :デフォルトの名無しさん:2009/01/10(土) 19:00:09
とりあえずソースを晒せ。それからだ。

168 :デフォルトの名無しさん:2009/01/11(日) 18:31:55
JFrame でアプリを作り、Mac で起動し、
Mac の上部から 「〜〜を終了」 を選んで終了した際に
ドキュメントが保存されていない場合には保存確認をとり、
キャンセルされたらアプリケーションの終了をキャンセルしたいのですが、
こういうことはどのようにすればいいのでしょうか?

169 :デフォルトの名無しさん:2009/01/11(日) 18:44:18
JFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)
とかじゃなかったっけ?
で、WindowListenerで閉じるときの処理を書く。

170 :デフォルトの名無しさん:2009/01/11(日) 20:09:41
それが、ウィンドウを閉じた時はそこにくるんですが、
「〜〜を終了」 の時はそこに来ないようなんです。

addShutdownHook なら一応保存確認することはできますが、
アプリケーションの終了をキャンセルすることまではできなくて、
どうしたものかと思っています。

171 :デフォルトの名無しさん:2009/01/11(日) 21:00:30
>>168
http://developer.apple.com/jp/qa/qa2001/qa1187.html

172 :デフォルトの名無しさん:2009/01/11(日) 21:13:21
>>171
ありがとうございます。できました!

173 :デフォルトの名無しさん:2009/01/12(月) 20:20:49
高橋麻奈の優しいJAVAで一通り覚えた。けどこれから何をすればいいのか分からん。
あれ。なんでJAVAを勉強しようと思ったんだっけwwwwwwww

174 :デフォルトの名無しさん:2009/01/12(月) 22:07:56
やさしいJavaとか書いたらまあ湧いてくるじゃないか…

175 :デフォルトの名無しさん:2009/01/12(月) 22:33:09
やさしいJavaと聞いてとんできました

176 :デフォルトの名無しさん:2009/01/12(月) 22:35:42
やらしいJavaですか?(*ノノ*)キャー

177 :デフォルトの名無しさん:2009/01/13(火) 08:44:10
エロく無いと学習意欲がわかない訳ですね。

マナタソに飽きたのなら他の娘に乗り換えてみるのも一つの選択肢。浮気性は嫌われるかもだが。
はじめてのJavaとか童貞が飛びつきそうなマヌアル本も必要な時期だなwww

178 :デフォルトの名無しさん:2009/01/13(火) 21:43:44
もうすこしスレッドの扱いを楽に出来ないかね?

179 :デフォルトの名無しさん:2009/01/13(火) 21:47:46
楽になったじゃないか

180 :デフォルトの名無しさん:2009/01/14(水) 04:50:22
スレッドのどの部分が楽じゃないか書かないと分からないよ。
単に一般的でない変な使い方しようとしてるだけとか?

181 :デフォルトの名無しさん:2009/01/14(水) 12:26:18
個人的には ThreadLocal と ThreadPool あたりが導入された時点で割りと満足だなー

182 :デフォルトの名無しさん:2009/01/14(水) 13:01:59
ThreadPool ??

183 :デフォルトの名無しさん:2009/01/14(水) 15:46:13
>>182
java.util.concurret.ThreadPoolExecutor とその関連

184 :デフォルトの名無しさん:2009/01/14(水) 16:22:01
スレッドの仕組み的な話じゃないのか
描画スレッドとかさ

185 :デフォルトの名無しさん:2009/01/14(水) 22:19:39
ここでSwingWorkerが出てこないのがこのスレのレベルの低さ

186 :デフォルトの名無しさん:2009/01/15(木) 02:39:01
土方生活が長いとそんなものでも楽だと思うものなんでしょうか?

187 :デフォルトの名無しさん:2009/01/15(木) 03:34:36
SwingWorker最低限絞ったAPIだからな。
使うっちゃ使うが小規模なアプリだな。

188 :デフォルトの名無しさん:2009/01/16(金) 01:08:24
JavaFXのスレが立たないのは、なぜなんでしょ?

189 :デフォルトの名無しさん:2009/01/16(金) 03:34:42
誰も使ってないからに決まってるじゃないか。


描画スレッドで特殊な用途?
サブミリナルでも埋め込みたいとか? ちらつき程度ならダブルバッファ使って描画してれば充分だろうし。

190 :デフォルトの名無しさん:2009/01/16(金) 23:59:30
>>189
誰も使いたがらない理由は、たとえば何なんでしょ?

191 :デフォルトの名無しさん:2009/01/17(土) 00:33:53
・重い
・配布サイズでかい
・ツールが弱い

192 :デフォルトの名無しさん:2009/01/17(土) 00:57:37
>>191
なるほど。
逆に軽くて、配布サイズ小さくて、ツールがよければ使うってことですかなぁ。

193 :デフォルトの名無しさん:2009/01/17(土) 09:15:20
名前が今一ってのもあるな。
FXよりはFAとかDXとかのほうがよかった感じ。

194 :デフォルトの名無しさん:2009/01/17(土) 10:16:23
FXとかFAとかDXとか言われると、PC98を思い出してしまうぜー。
PC98だと終わってしまうから、JavaNXでどーよ。

195 :デフォルトの名無しさん:2009/01/17(土) 10:17:53
FXって投機臭がする名前だ

196 :デフォルトの名無しさん:2009/01/17(土) 10:25:10
>>193
ぶっちゃけJavaがついてる時点で

197 :デフォルトの名無しさん:2009/01/17(土) 11:56:13
>>193
頓挫した「winFX」への当てつけじゃないの?

198 :デフォルトの名無しさん:2009/01/17(土) 16:27:39
>>191
ttp://www.google.co.jp/trends?q=JavaFX%2CAdobe+Flex%2CMicrosoft+Silverlight&ctab=0&geo=all&date=all&sort=0

重くて、配布サイズでかくて、ツールがいまいち分かりにくいSilverlightが人気なのは、なんなんですかねえ。

199 :デフォルトの名無しさん:2009/01/17(土) 16:30:15
人気・・・・・あるのか・・・・?

200 :デフォルトの名無しさん:2009/01/17(土) 16:42:49
JavaFXと比べれば

201 :デフォルトの名無しさん:2009/01/17(土) 16:47:23
選択肢がなければ使わざるを得ない

202 :デフォルトの名無しさん:2009/01/17(土) 17:12:54
>>199
あ、失礼、人気じゃないすね。Googleトレンドとかで、比較してみてということ

>>200
そいうことす

203 :デフォルトの名無しさん:2009/01/17(土) 17:30:37
Flexでいいじゃん。

204 :デフォルトの名無しさん:2009/01/17(土) 19:28:05
>>203
%%
%%


205 :デフォルトの名無しさん:2009/01/17(土) 22:51:56
配布サイズって関係あるのか?毎日ダウンロードを繰り返すわけでもあるまいに。

206 :デフォルトの名無しさん:2009/01/18(日) 19:03:45
【初心者】Java質問・相談スレッド122【歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1229255937/

次スレが無い

207 :デフォルトの名無しさん:2009/01/18(日) 19:18:03
>>206
気にするな

208 :デフォルトの名無しさん:2009/01/19(月) 22:19:16
本屋にjRubyの本有ったので眺めてみたら、rubyからswing呼べるのな。楽しそうだわwww

209 :デフォルトの名無しさん:2009/01/19(月) 22:32:49
JavaScriptからでも何でも呼べるじゃん・・・

210 :デフォルトの名無しさん:2009/01/20(火) 02:05:44
groovyからry

211 :デフォルトの名無しさん:2009/01/20(火) 02:45:10
PHPか(ry

212 :デフォルトの名無しさん:2009/01/20(火) 02:46:24
マジレスすると、言語を生かしたSwing呼び出しという点では、Groovyだな。
SwingBuilderはなかなかいい。

213 :デフォルトの名無しさん:2009/01/20(火) 04:39:31
Cからswing使ってる漏れはどうやら勝ち組(ry

214 :デフォルトの名無しさん:2009/01/25(日) 06:39:50
JTreeでソートしたくて

((DefaultTreeModel)getModel()).removeNodeFromParent(node);

これでノードを外して

parent.add(node);

これでノードを追加してソートしてたんよ

でも、これだと開いてるツリーが閉じてしまうんだ。
開いてるツリーそのままでソートする方法しらない?

215 :214:2009/01/25(日) 23:43:39
とりあえず、自己解決。

用意されてるメソッドでそれっぽいの見つけられなかったから、
現在展開してるパスを全部しらべて、ソートが終わってから開きなおすようにしたぜ。

216 :デフォルトの名無しさん:2009/01/26(月) 01:38:21
久々にSwing使ってみたけど、相変わらず酷いなぁと思う

ここのスレの人はなぜSwingを使うのだろう
C#やVB.NETじゃダメなの?
LinuxやMacで動かしたいわけじゃあるまいし。

217 :デフォルトの名無しさん:2009/01/26(月) 02:09:41
>>216
いや、Linuxでも動かしたい。

218 :デフォルトの名無しさん:2009/01/26(月) 02:49:22
>>216
いや、Solarisでも動かしたい。

219 :デフォルトの名無しさん:2009/01/26(月) 05:32:01
マクで動かそうと思うと大変だから止めとけ。あれは異世界。存在しない物として扱ったほうが平和。


swing程度で十分というのが大きい。awtでもむしろ十分だが。
まあvs使えないだけとも言うが。コントロールをちまちまマウスで配置するくらいならコードで記述したい訳だ。

220 :デフォルトの名無しさん:2009/01/26(月) 19:21:07
ポトペタなしのswingいじるのって、html手打ちするようなもんですよね

ポトペタありでswingいじったことないんですけど

221 :デフォルトの名無しさん:2009/01/27(火) 03:35:16
HTMLもアドビのソフトでちまちま設定するより、メモ帳で書いたほうが速いしなあ。

222 :デフォルトの名無しさん:2009/01/27(火) 11:30:33
HTMLは手打ち以外の選択肢はないな
大昔は必要がなかったし、今はカススタイラーゆえ意味がない

223 :デフォルトの名無しさん:2009/01/27(火) 13:32:51
ポトペタありのSwingってのもキモそうだな。
なんか、モデルやコントローラまわりで歪なコード吐きそうだ。

224 :名無しさんに接続中…:2009/01/27(火) 16:31:56
SwingはなぜVBのようなデザイナーがないのだ?


225 :デフォルトの名無しさん:2009/01/27(火) 16:54:49
おまえらNetBeansを無視するなよ。
Swing+JSR295+JSR296と組み合わせてポトペタできるくらいにまでなってるんだぞ。
ttp://builder.japan.zdnet.com/sp/07ide/story/0,3800082821,20350058,00.htm

226 :デフォルトの名無しさん:2009/01/28(水) 14:06:14
HTMLも、業務アプリならポトペタがいいよなあ。

227 :デフォルトの名無しさん:2009/01/28(水) 16:28:16
まあそういうときはAdobe Dreamweaverが最低ラインだな。

228 :デフォルトの名無しさん:2009/01/29(木) 06:43:53
swingはなぜ流行らないんだ?

229 :デフォルトの名無しさん:2009/01/29(木) 08:25:30
デカくて重いからでないかい

230 :デフォルトの名無しさん:2009/01/29(木) 08:54:08
>>228
GUIフレームワークで流行ってるのってなに?

231 :デフォルトの名無しさん:2009/01/29(木) 08:59:55
MFC、VB


232 :デフォルトの名無しさん:2009/01/29(木) 09:01:37
そこらへんは他に選択肢ないから使われてるだけじゃ

233 :デフォルトの名無しさん:2009/01/29(木) 09:18:38
そのとおりだと思うけど、
Swingはなぜそれらの代替になりえないのか・・・

速度か?やはり速度なのか?

234 :デフォルトの名無しさん:2009/01/29(木) 09:20:45
Mac版のリリースが遅すぎる!

235 :デフォルトの名無しさん:2009/01/29(木) 09:21:56
先に普及したものが圧倒的に強いし。
単にSwingに既存のものを置き換えるほどの魅力がなかったってだけでしょ。

236 :デフォルトの名無しさん:2009/01/29(木) 09:31:29
>>233
自分は長いことWindowsアプリケーションを作ってきたんでつが、V2Cという2chビューワを使い始めてSwingアプリの軽快さにびっくりしたです。
V2Cが純Swingじゃなかったらスミマセン

237 :デフォルトの名無しさん:2009/01/29(木) 09:37:22
いや、純だよ。
やっぱJavaはもうちょいデスクトップアプリケーション強化して、それと速度に関してもどうにかアピールしないとなぁ

238 :デフォルトの名無しさん:2009/01/29(木) 13:26:10
javaはもっさりってのが一般的な常識だからかもしれんね
あと、表示が微妙にださかったり

俺はjavaしかまともに使えないから、swingをやってみた。
swingでダメだったらMS製品買えばいいかなーって感じで。

java以外も使えるようになりたいから、MS製品で遊んでもいいと思うんだけどね

239 :デフォルトの名無しさん:2009/01/29(木) 14:11:25
>>238
> java以外も使えるようになりたいから、MS製品で遊んでもいいと思うんだけどね
じゃあ Express Editions でも入れて C# とかやればいいと思うよまじめな話


240 :デフォルトの名無しさん:2009/01/29(木) 15:46:58
Linux系のGUIをJavaでSwingでってわけにはいかんのか?
用途としてはもうそっちしかなかろう

241 :デフォルトの名無しさん:2009/01/29(木) 16:03:25
Hashtableが保持している値をJTableに表示させていて、
Hashtableの内容が変更されたら、それと連動してJTableの表示も変更されるようにしたいのですが
何か常套手段みたいなのが有るんでしょうか?


242 :デフォルトの名無しさん:2009/01/29(木) 16:55:15
>>241
レンダラーやエディターで意図したものにあってるかな?

243 :デフォルトの名無しさん:2009/01/29(木) 19:24:19
>>241
10msおきにHashtableを監視してJTableにイベントディスパッチジョブ投げるスレッドを常駐させる。

Hashtable派生させたりMapやTableModelでラップしてもいいなら、他にも手はある。

244 :デフォルトの名無しさん:2009/01/29(木) 19:25:19
BeansBindingとかでなんとかならんの?
使ったことないけど

245 :デフォルトの名無しさん:2009/01/29(木) 20:25:16
>>243
あ、言われちゃった。
手抜き実装だけどこんな感じ。2秒ごとにMap操作して、JTableが更新される。
http://bucyou.mydns.jp/up_source2/codeview.php?u=ok&fn=2
>>244
ならんはず。

246 :デフォルトの名無しさん:2009/01/29(木) 21:17:11
Hashtable使うのをやめる

247 :デフォルトの名無しさん:2009/01/30(金) 04:09:12
10msおきに監視ってコスト高そうだ。負荷凄いだろwww
変更する処理にトリガ噛ませてイベント受け取るようにしたほうがよく無いか?


ウェブ系とかjava前提の製品とかだとインストーラからjava GUIだったりはするね。
インストーラ作成用との便利なフレームワークとかあるんだっけか?


表示が微妙にださいってのは人それぞれだからなあ。窓すらださいって言い出すマカみたいな変人も居るし。マルチモニタとかにすら対応できてないマクのほうがださいだろって感じだが。


GCがアレなのか、使ってるともっさり感が増すし、メモリも喰いまくってるのが駄目だな。
それ故、MFC, VBにすら負けてしまう。java使いが作る側には不満無いけどね。純粋にアプリユーザの側にはjavaじゃないほうが快適。


248 :デフォルトの名無しさん:2009/01/30(金) 07:39:08
>>247
>変更する処理にトリガ噛ませて
それが243の言ってる”Hashtable派生させたりMapやTableModelでラップ”で、
その実装が、244のソースだろ。

MFC、VBには負けるかもしれないけど.NetのWinFormsとはいい勝負だと思う。
場合によってはSwingのほうが速いし。軽い。

249 :デフォルトの名無しさん:2009/01/30(金) 10:30:43
>>247
スレチだがマルチモニタ環境ってのはMacのほうが歴史がずっと長いんだけどな…
Windows XPじゃマルチモニタでカラープロファイルを別のをあてる、とかはできないしね。Vistaは知らん。
まー最近はWinのドライバのほうがマルチモニタでできること多いけれどもw

250 :デフォルトの名無しさん:2009/01/30(金) 10:38:42
winのマルチモニタはMEからだっけ?98からだっけ?

個人的に、Macが先でMSがそれを追いかけたってのは、MSが先行するより信憑性がたかいw

251 :デフォルトの名無しさん:2009/01/30(金) 10:52:35
ちょっと調べてみたが、
win98からマルチモニタ対応、しかしMacの対応時期がわからんかったw

252 :デフォルトの名無しさん:2009/01/30(金) 13:35:57
助けて下さい。

画像を拡大表示しているのですが、アニメーションGIFの拡大表示で困っています。

JLabelのアイコンにアニメーションGIFを設定すると、
フレーム切り替えのたびに以下のメソッドが実行されます。

public void paint(Graphics g)
public boolean imageUpdate(....

この時、毎回アニメーションGIFの画像を拡大してると表示がもっさりしてしまいます。
だから、一度拡大表示したフレームは拡大したイメージを保存しておいて、再利用したいのです。

そこで問題になるのは「表示しようとしてるのは何フレーム目なのか?」
これが分からないことなんです。

何か分かる方法しってる人いませんかorz

253 :デフォルトの名無しさん:2009/01/30(金) 16:59:16
カラープロファイルなんて印刷屋でもない限りどうでもいいだろ。

問題なのはメニューとか操作GUIの設計。
マクの実装だと、メニューはメインモニターにしか表示されないはず。
窓や犬は、メインウィンドウ自体にメニュー付いてるから、メインモニターとかサブモニターとか関係無く自由に使える。

254 :デフォルトの名無しさん:2009/01/30(金) 17:45:12
winも結構トンチンカンな動きするソフトいたよな

サブモニタで右クリックしたら、メインモニタにメニューが出たり、
サブモニタで最大化したら、メインモニタで最大化したりw

サブモニタで最大化したら、メインモニタの解像度に広がった時は非常に困ったw

255 :デフォルトの名無しさん:2009/01/30(金) 20:29:06
サブモニタから起動したJARアプリのスプラッシュは、
やっぱりサブモニタに出て欲しいなあ。アプリはちゃんとサブ側に出る。
あ、当方WinXP+Sunの1.6系Java。

そのへん、Macはどうなんでしょ。

256 :デフォルトの名無しさん:2009/01/30(金) 20:39:50
サブモニタから起動したかってどうやって判断するんだろ?

257 :デフォルトの名無しさん:2009/01/30(金) 20:48:28
> アプリはちゃんとサブ側に出る。
前回終了時の表示位置覚えてるだけじゃなくて?

258 :デフォルトの名無しさん:2009/01/30(金) 22:00:26
サブモニタから。。。起動?

俺のwinはタスクバーがサブモニタにあるんだが、これだと全部サブモニタに出ないとおかしくなるぜ

>>257でいいと思う

259 :デフォルトの名無しさん:2009/01/30(金) 22:37:13
Windowsの流儀は知らないけどタスクバーがある方を
プライマリモニターと呼ぶわけじゃないんだ?

260 :デフォルトの名無しさん:2009/01/30(金) 22:52:01
winのタスクバーはメインもサブも移動可能
てなわけで、俺のタスクバーはサブモニタに配置してあります

メインかサブかは、画面の解像度とか設定する画面で設定できるっす

261 :255:2009/01/30(金) 22:56:24
・サブモニタのデスクトップ上のJARファイルをダブルクリック
・サブモニタに移動したエクスプローラからJARファイルをダブルクリック

いずれもサブモニタにアプリが出る。
ジオメトリ関連でやってることはsetLocationByPlatform(true)のみ。
これを外してもやはりサブモニタに出る。

サブモニタのコマンドプロンプトからjava.exe経由で起動すると
さすがにメインモニタにアプリが出た。
サブモニタのNetBeansから起動してもやっぱりメインモニタ。

262 :デフォルトの名無しさん:2009/01/30(金) 23:03:33
>>261
おもすれー

ちょっと試しになんか作ってみよう

263 :デフォルトの名無しさん:2009/01/30(金) 23:09:57
皆さんに聞きたいのですが、javaでどんなデスクトップアプリつくってますか?

今自分はタスク管理系アプリを作成しています。
メモ帳でいいじゃんはいいこなしでw

264 :デフォルトの名無しさん:2009/01/30(金) 23:22:40
>>263
社内用にファイル処理系のアプリ。

265 :デフォルトの名無しさん:2009/01/30(金) 23:33:15
>>263
エロ画像を楽しく閲覧するためのツール

266 :デフォルトの名無しさん:2009/01/31(土) 00:11:06
>>263
2chのスレッド監視してエロ画像勝手に収集するツール

267 :デフォルトの名無しさん:2009/01/31(土) 00:30:01
>>263
携帯電話とmacとwinでスケジュールを一元管理するソフト

268 :デフォルトの名無しさん:2009/01/31(土) 00:50:08
ADVエンジン

269 :デフォルトの名無しさん:2009/01/31(土) 01:01:11
>>263
無駄にリッチなUIをもつ画像ビューワー

をJavaFXでつくりたい。

270 :デフォルトの名無しさん:2009/01/31(土) 21:00:02
Swing学習中なんだけど、ドローツールみたいなのを作るとき、以下のどれがいい?
1) Canvasみたいなコンポーネントを作って、図形を全部自前で管理する。
2) 図形の種類毎にコンポーネントを作って、Panelとかに貼り付ける。
3) それ以外。思い付かないけど。


271 :デフォルトの名無しさん:2009/01/31(土) 22:29:30
1かな。
ありがちなパターンだとShapeクラスを作ってそのクラスを継承したクラスを作る。
でJPanelを継承したShape描画用のコンポーネントを作って、paintComponentですべてのShpaeを描画する。

272 :デフォルトの名無しさん:2009/01/31(土) 23:16:09
>>270
ネットワーク・グラフ描画用のライブラリをいくつか使ったことがあるんだけど、
そのどちらでもない設計が多かった。>>271が近い。

図形の管理はドロー用コンポーネントが行い、
実際の描画は図形オブジェクトに委譲している、と言えばいいかな。

図形の種類ごとにクラスを作るのは2と一緒だけど、
これらのクラスは独自のクラス階層を構成していて、
つまりJComponentのサブクラスではないので、そのままではSwingに乗っからない。
代わりに、図形を載せて描画する専用のSwingコンポーネントがある。
このドロー用コンポーネントは、paintComponentをオーバライドしていて、
addされた図形オブジェクトすべてに対して、paint系メソッドを呼ぶようになっている。
これらの図形クラスのpaint系メソッドは、各図形のための適切な描画を行うことになっている。

図形の追加の度にドロー用コンポーネントを変更しなくていいので、すっきりする。
Open-Closed Principleに合致しているね。

ライブラリによっては、図形クラスのpaint系メソッドがさらに別のオブジェクトに委譲可能で
ここがAdaptableだったり(JListのレンダラみたいなの)、
図形クラスを、Swing非依存のモデルクラスと、Swing依存のビュークラスに分けて設計していたり、
さまざまだった。
この手のライブラリはいろいろあるので、見てみるといい刺激になると思う。
挙げるなら、OpenJGraphとかJGraphとかJungとかかな。

273 :デフォルトの名無しさん:2009/01/31(土) 23:59:22
「もしやJComponentを再発明しているのでは?」と思ったら、
思い切って資産捨てて透過JComponentベースで作り直す勇気も必要かも。

ドローツールとのことなので、まずは
・位置サイズのgetset、
・可視性のgetset、
・クリップしたGraphicsを渡すpaint
ぐらいの軽い独自インタフェースで十分だと思うけど。

274 :デフォルトの名無しさん:2009/02/01(日) 00:07:19
>>271-272
thx! 「グラフィックJava2」とか「Filthy Rich Clients」とか
引っくり返しながらいじってるんですが、既存コンポーネント以外
の話になると極めてプリミティブな部分しか載ってなくて、
どういう風に設計すればよいか、という部分については頭を
かかえてたので参考になります。

275 :デフォルトの名無しさん:2009/02/01(日) 00:16:38
>>273
や、今のところ、「JComponentのサブクラス作って、その上にマウスで
Rectangleが描けるようにナッター\(゚∀゚)/」というレベルなので……。

その先に進もうとして、「これをつかんで移動させたり変形させたりしよう
と思ったら、図形もJComponentのサブクラスにした方がええんちゃうか?」
というのが質問の発端です。

276 :デフォルトの名無しさん:2009/02/01(日) 00:37:47
JDrafterを参考にするといいかも

277 :デフォルトの名無しさん:2009/02/01(日) 01:09:59
>>276
宣伝乙。

278 :デフォルトの名無しさん:2009/02/01(日) 01:36:34
いや、宣伝じゃないよ
あれは素直にすごいだろ
jadで十分読めるから読んでごらん

279 :デフォルトの名無しさん:2009/02/01(日) 02:05:58
スプラッシュなんてちゃんと見ないからどうでも良いな。
むしろ消せるオプションを標準実装にして欲しいくらいだ。気持ち程度、余計な事をしない分、起動が速く成るだろうし。


窓は融通が利くけど、マクはマクらしいとアポーが決めてるアプリの使い方しか出来ないように強制されてるのが嫌。
俺が買ったものくらい自由に使わせろって。

280 :デフォルトの名無しさん:2009/02/02(月) 00:12:19
>>240
既存のフロントエンドをSwingに移行させるんなら
そこそこ市民権を得そう。

281 :デフォルトの名無しさん:2009/02/02(月) 05:31:37
>>279
JavaSE6の機能でスプラッシュ出してるなら、起動速度は変わらない

282 :デフォルトの名無しさん:2009/02/02(月) 12:00:55
つかスプラッシュ消えるの速すぎてタイトル嫁ねえw
一定以上の時間指定したい

283 :デフォルトの名無しさん:2009/02/02(月) 12:12:28
起動をもっさり遅くすればいいんじゃね?

起動すればソフトのタイトル見えるんだし、わざわざ邪魔なスプラッシュ表示しとく意味ねえよ

284 :デフォルトの名無しさん:2009/02/02(月) 13:38:01
java6のスプラッシュはVM起動時に表示されるんであってアプリ起動時に表示される訳じゃないからアプリをもっさりさせても意味ないよ。

285 :デフォルトの名無しさん:2009/02/02(月) 13:40:56
まじかよw

スプラッシュって起動中だからちょっとまっててな。ってニュアンスが一番よさげなのにw

286 :デフォルトの名無しさん:2009/02/02(月) 13:44:23
きっとスレ違いでは無いはず・・・。

#include<gcj/cni.h>
#include<javax/swing/JFrame.h>
#include<javax/swing/JButton.h>
#define JS(str) ::JvNewStringUTF(str)
int main(void)
{
 ::JvCreateJavaVM(NULL);
 ::JvAttachCurrentThread(NULL,NULL);
 {
  JFrame *frame=new JFrame(msg);

  frame->add(new JButton(JS("Okey")));
  frame->setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE);
  frame->pack();
  frame->setVisible(true);
 }
 ::JvDetachCurrentThread();
 return 0;
}

JFrameが表示された後、即main関数を脱出してしまう。
当然といえば当然だが、これを上手いこと防ぐ方法は無いか?

287 :デフォルトの名無しさん:2009/02/02(月) 15:02:38
frame->setVisible(true);の後ろに↓を足したらいいんじゃね?

try {
while (frame->isVisible()) {
Thread->sleep(1000);
}
} catch (InterruptedException e) {
// 華麗にスルー
}


288 :デフォルトの名無しさん:2009/02/02(月) 20:39:52
>>282
Frameの表示を遅らせれば?

289 :デフォルトの名無しさん:2009/02/02(月) 22:08:46
>>287
スレッドで分離する方法とかもあるんだけど、
定石的な方法は無いだろうか?

>>288
どういう事?いまいち想像が付かないが。

290 :デフォルトの名無しさん:2009/02/02(月) 22:24:38
>>289
普通にjavaだけでやる分には、main抜けても問題ないからわかんないっす。

そして、俺も助けて欲しいことが。

ttp://sandalman-no-blog2.blogspot.com/2008/01/java6-jtree_03.html
ここのソースなんだけど。

JTree内でDnDすると、ツリーが閉じてしまうんだ。
JTreeの以外からドラッグしたのをJTreeにドロップする分には閉じない。

JTreeからJTreeにDnDするとドロップされた側が閉じてしまう。
わけわかんねーっす、誰か助けて。

291 :290:2009/02/02(月) 22:39:56
自己解決したっす。

// node.removeFromParent();
((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node);
// ((DefaultTreeModel) tree.getModel()).reload();

292 :290:2009/02/02(月) 22:41:26
途中送信orz

node.removeFromParent();
((DefaultTreeModel) tree.getModel()).reload();



// node.removeFromParent();
((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node);
// ((DefaultTreeModel) tree.getModel()).reload();

こうしたら閉じなくなったっす。

node.removeFromParent();ってなんか使いにくいんですかね?

293 :デフォルトの名無しさん:2009/02/03(火) 04:35:28
ほんとに助けてほしいなら、わかんねーすっとかムカつく言葉遣いやめておいたほうがいいな。

294 :デフォルトの名無しさん:2009/02/03(火) 09:55:01
別スレの空気嫁とかいいながら煽る人よりは

295 :288:2009/02/03(火) 14:44:18
>>289
スプラッシュが消えるのはFrame等が表示されるまでだから。
下のを-splash:temp.pngとかで適当にスプラッシュ表示させてみ。

import javax.swing.*;
public class SplashTest {
public static void main(String[] args) throws Exception {
Thread.sleep(5000);

SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.add(new JLabel("てすと"));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}

296 :デフォルトの名無しさん:2009/02/05(木) 19:47:24
というか、スプラッシュの表示時に表示したい時間分、sleepすれば
いいだけなんだけどな。

297 :デフォルトの名無しさん:2009/02/05(木) 21:28:43
そのスプラッシュ超いlらないなw

298 :デフォルトの名無しさん:2009/02/05(木) 21:36:09
5分ぐらいスリープしとくとちょうどいいんじゃないかな

299 :デフォルトの名無しさん:2009/02/05(木) 23:08:46
どん兵食うのにか?

300 :デフォルトの名無しさん:2009/02/05(木) 23:20:25
それだ!
スプラッシュにラーメンタイマー機能をつければいい!!

で、何の話だっけ?

301 :デフォルトの名無しさん:2009/02/06(金) 02:12:04
どんべえも最近は3分じゃねぇの?ってとこまでは読んだ。

302 :デフォルトの名無しさん:2009/02/06(金) 02:15:24
5分か3分か選べるオプションをつければ完璧という事は魂で理解できた

303 :デフォルトの名無しさん:2009/02/06(金) 02:18:00
ていうか、スプラッシュに「閉じる」ボタンがあれば誰も困らないのに…

304 :デフォルトの名無しさん:2009/02/06(金) 04:22:44
スプラッシュが閉じるときに、音を鳴らす必要があるな。

305 :デフォルトの名無しさん:2009/02/06(金) 20:05:07
蓋を閉めてジャヴァアプリを起動する必要があるけどな。

306 :デフォルトの名無しさん:2009/02/06(金) 23:02:17
4分を舐めると火傷するぜ・・・

307 :デフォルトの名無しさん:2009/02/06(金) 23:04:42
>>306
頭使えよ

5分設定で起動してから1分後にお湯を入れればいいんだ

308 :デフォルトの名無しさん:2009/02/06(金) 23:19:52
じゃあ1分くらい用意してくれよ

309 :デフォルトの名無しさん:2009/02/07(土) 18:06:37
http://www.cupnoodle.jp/mvm/index.html
もうお前らこれ使えよ…

310 :デフォルトの名無しさん:2009/02/07(土) 18:27:57
これじゃスプラッシュでないじゃん

311 :デフォルトの名無しさん:2009/02/07(土) 19:01:30
すみませんが、質問させてください。
Swing Application Frameworkをバリバリ使ってます、方ってこのスレでいますでしょうか?

創るJavaでJavaを再学習しているのですが、実際のアプリSwingだといろいろ管理が面倒だな、と思っていたときに
上記のフレームワーク見つけたのですが、1.03になってもあまり流行っている感じがなかったので
問題があったのかぁ、と思ったので・・・・

使っている方で、「この辺が便利だよ」、とか「これが使えない」とかありましたら教えていただけないでしょうか?

312 :デフォルトの名無しさん:2009/02/07(土) 19:57:39
>>311
使ってないけど、J2SE7に含まれるらしいよ
けど誰か忘れてたけどアプリケーションクラスがシングルトンになってる時点でだめだとか書いてたような・・・

313 :デフォルトの名無しさん:2009/02/07(土) 23:27:34
ポップアップメニューのsetLightWeightPopupEnabledに相当するメソッドは
JMenuにはないでしょうか?

ポップアップメニューにJMenu追加して分岐させたら、
分岐させたメニューが表示できませんでしたw

setLightWeightPopupEnabled使わないとポップアップメニューを出せないような作りが悪いのかもしれませんが。
もしあったら教えてください。

314 :デフォルトの名無しさん:2009/02/07(土) 23:41:38
>>313
JMenu#getPopupMenu() で取ってきたポップアップメニューに setLightWeightPopupEnabled

315 :デフォルトの名無しさん:2009/02/07(土) 23:47:57
>>313
どう考えてもSwingの描画ぶっ壊してるから他の部分でも見えてないだけで問題があるかと。

316 :デフォルトの名無しさん:2009/02/08(日) 00:01:10
>>315
はい、継承してコネコネしてるJLabelの上だとポップアップメニューがでないんです。
いつか直さないと。

>>314
ありがとうございます。
JMenuの中にpopupMenuがあって気になってましたが、それでいけそうな気がします。

317 :デフォルトの名無しさん:2009/02/08(日) 00:35:27
>>314
めでたく上手くいきました。
ありがとうございました。

318 :デフォルトの名無しさん:2009/02/09(月) 17:16:44
アプリケーション終了時に、ウィンドウの位置とサイズを記憶したいです。(次の起動時に復元するため)

この時、最大化した状態で終了すると、元に戻すボタンを押した時のサイズを取得できません。
この元の位置(できればサイズも)を最大化してる状態で取得する方法はないでしょうか?

※自分でやった事
ComponentAdapter#componentMovedを使って、
getExtendedState() == NORMALの時に位置を記憶させてみたものの、
最大化した時にgetExtendedStateがNORMALの状態で動いてしまい、
位置を-4,-4で記憶してしまいます。

マルチモニタでも動かしたいため、0以下の値を弾くわけに行かなくて困っています。

componentResizedが動く時はgetExtendedState() == MAXIMIZED_BOTHになっているため、
サイズはなんとか記憶させることができました。

319 :デフォルトの名無しさん:2009/02/09(月) 18:12:18
EDTの簡単な取得方法はありませんでしょうか?

320 :デフォルトの名無しさん:2009/02/09(月) 20:23:34
6u12でAWTとSwingの限定的な混在がサポートされたな。

321 :デフォルトの名無しさん:2009/02/09(月) 21:02:12
>>319
EDTを取得して何すんの?
↓でできるけど

import javax.swing.SwingUtilities;

public class GetEDT {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//↓こいつがEDT
Thread edt = Thread.currentThread();
System.out.println(edt);
}
});
}
}


322 :デフォルトの名無しさん:2009/02/09(月) 21:27:51
>>321
それは分かりますが、単純にEDTが走ってればそれを返して、動いてなければnullみたいなのがありそうだなーと思っただけです。
確かに用途は少ないですね。
Thread#setUncaughtExceptionHandler()をEDTに設定したかったのですが、すでに取得する方法があればそれを使用しようと質問しました。
わざわざくだらない質問に答えていただきありがとうございました。

323 :デフォルトの名無しさん:2009/02/09(月) 23:04:02
>>322
ttp://java.sun.com/javase/ja/6/docs/ja/api/java/awt/EventQueue.html#isDispatchThread()
ttp://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Thread.html#currentThread()


324 :デフォルトの名無しさん:2009/02/10(火) 00:58:11
>>312
OpenSwingはどうなん?


325 :デフォルトの名無しさん:2009/02/10(火) 14:02:26
>>323
それAWTのシステムキューだろ。

326 :デフォルトの名無しさん:2009/02/10(火) 18:23:34
JTextComponent でスペースバーが押されたらアクションを実行し、
その際空白文字は入力されないようにしたいのですが、
以下のようなやり方(いちおう動く)でよいのでしょうか?
もっと一般的な方法はあるでしょうか?

Keymap keymap = textComponent.getKeymap();

// スペースバーにアクションをマッピング
KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0);
keymap.addActionForKeyStroke(stroke, action);

// スペースバーが押されても空白文字が入力されないようにする
keymap.setDefaultAction(new DefaultEditorKit.DefaultKeyTypedAction() {
    @Override public void actionPerformed(ActionEvent ae) {
      String cmd = ae.getActionCommand();
      if (!cmd.equals(" ")) {
        super.actionPerformed(ae);
      }
    }
  } );


327 :デフォルトの名無しさん:2009/02/10(火) 20:08:46
>>326

コピペでスペースが入ってきてもやっぱり弾くのかな。
ならばjavax.swing.text.DocumentFilterで弾くのが楽じゃない?

328 :sage:2009/02/10(火) 21:13:11
>>326
Documentに、特定の文字列が挿入されるのを防ぐ場合には、通常DocumentFilterを使う。

Documentにスペースが挿入されても構わなくて、キーボードからの入力のみフィルタするなら、
KeyListenerを使ったり、processKeyEvent(),processKeyBinding()等をオーバーライドして
実装することもできるけど、いずれもコードが汚くなるから、326の処理でいいと思う。

あとは、瑣末な問題だけど、個人的には、ActionEvent#getActionCommand()の戻り値が
nullでないとは規定されてないから、if (!cmd.equals(" ")) を!" ".equals(cmd)にするか、
if (cmd != null && !cmd.equals(" "))に変更するぐらいかな。

329 :デフォルトの名無しさん:2009/02/10(火) 23:12:34
>>326
おれが作るならばDefaultKeyTypedActionの継承はしないで
keymap.getDefaultAction()して保存おいてスペース以外ときは
そっちに移譲するようなActionにするかもしれない。なんとなく。

330 :デフォルトの名無しさん:2009/02/10(火) 23:25:06
>>325
ttp://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/SwingUtilities.html#isEventDispatchThread()
> 現在のスレッドが AWT イベントディスパッチスレッドの場合に true を
> 返します。JDK Version 1.3 以降、このメソッドは
> java.awt.EventQueue.isDispatchThread() を呼び出すだけです。

なので、EDTの判定に用いるのは間違いじゃない。

331 :326:2009/02/11(水) 00:24:39
>> 327
今回はキーが押された場合のみを処理したいので
DocumentFilter は使えないのですが、
回答ありがとうございます。

>>328 >>329 を参考にして
こんな感じにしてみました。

final Action defaultAction = keymap.getDefaultAction();
keymap.setDefaultAction(new AbstractAction() {
    @Override public void actionPerformed(ActionEvent ae) {
      String cmd = ae.getActionCommand();
      if (!" ".equals(cmd)) {
        defaultAction.actionPerformed(ae);
      }
    }
  } );

UIによって独自のデフォルトアクションが
セットされるかもしれない(?)ので、
>>329 の案のほうがよいかと。


332 :デフォルトの名無しさん:2009/02/11(水) 00:30:05
まずEDTといってもシステムキューの方かSwingEDTの方なのかはっきりしてもらわんとなぁ。
単にEDTと言ったらjavaの場合SwingEDTの方を指す場合が多いからややこしい。

333 :デフォルトの名無しさん:2009/02/11(水) 01:47:13
>>332
システムキューって何ぞ?
用語が一般的過ぎて、ぐぐってもそれらしきものが引っかからん。
説明資料へのリンク希望。
AWTイベントキューとは違うもんなんだよね?

334 :sage:2009/02/11(水) 10:31:21
>>331
Actionに委譲するのは良いんだけど、
>UIによって独自のデフォルトアクションがセットされるかもしれない
ということを考慮するなら、委譲するActionの参照を保存してたらダメでしょ。
UI変更時に、上記のコード自体が再実行されるなら、アリだけど。

335 :デフォルトの名無しさん:2009/02/11(水) 17:23:09
>>333
同じ、AWTのEDTの事をAWT event queues systemと表記する場合とSystem Queueと表記する場合がある。
今はどうなってるが知らんが。


336 :デフォルトの名無しさん:2009/02/11(水) 19:36:49
>>335
んー、そうすると、昔は知らんが、今はシステムキュー==AWTのEDT==SwingのEDTなんじゃ?
>>330に書いたように、Java1.3 以降は
javax.swing.SwingUtilities.isEventDispatchThread() == java.awt.EventQueue.isDispatchThread()
なんだし。

337 :326:2009/02/11(水) 23:57:03
>>334
説明不足でしたが
updateUI() をオーバーライドして
super.updateUI() の後に処理を書いているので
たぶん大丈夫だと思います。


338 :デフォルトの名無しさん:2009/02/19(木) 21:59:44
こういうタイポとかでdeprecatedなメソッドはさすがに廃止してもいんじゃなかろうか。
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/FontMetrics.html#getMaxDecent()

339 :デフォルトの名無しさん:2009/02/19(木) 22:48:12
廃止したら、古いアプリケーションが動かなくなるからな。
ところで Cloneable はスペルミスなのに
Closeable は間違いじゃないんだな。
ややこしい。


340 :デフォルトの名無しさん:2009/02/20(金) 13:56:33
互換用のjarを用意して、コンパイル時にはエラーにしてしまえばいいのに。

341 :デフォルトの名無しさん:2009/02/20(金) 18:53:19
コンパイルエラーにする代わりに警告を出してるんでしょ。
問題ないと思うけど。


342 :デフォルトの名無しさん:2009/02/21(土) 15:16:20
>>340
互換用のjar吐くフリーソフトとか作ったら需要あるかな。
メソッドシグネチャだけコピーして、どれを呼んでもErrorなげる実装とかいうやつ。

343 :デフォルトの名無しさん:2009/02/23(月) 09:18:34
JDKのライセンス違反になるからダメ。

java.*、javax.*、sun.*以下のクラスは変えちゃいかんのよ。
勝手にクラス追加するのも禁止されてる。

344 :デフォルトの名無しさん:2009/02/24(火) 17:34:57
JEditorPaneで単純にHTMLを表示する場合なんだけど、
<a href="#hoge">Hoge</a>
. . . . . .
<a name="hoge">ここにくる</a>

とやって、ページ内でジャンプさせることってできないんだっけか?

345 :デフォルトの名無しさん:2009/02/24(火) 18:54:43
>>344
クリック監視はHyperlinkListenerで。
そこからJEditorPane#scrollToReference("#hoge")でなんとかなんないかな。

346 :デフォルトの名無しさん:2009/02/24(火) 19:42:27
>>345
ありがとう!
これから試してみる。

347 :デフォルトの名無しさん:2009/02/24(火) 22:07:18
>>345
ありがーと!
うまくいった。
JEditorPane#scrollToReference("hoge")
で、#はいらないようです。

348 :デフォルトの名無しさん:2009/02/24(火) 22:28:04
うふっ

349 : :2009/02/26(木) 20:25:14
JLabelがクリックされたとき、JLabelではなく親のコンポーネントがクリックされたことにしたいのですが
どういしたらいいでしょうか。

350 :デフォルトの名無しさん:2009/02/26(木) 20:39:23
>>349
あほらしい方法だけど
public void mouseClicked(MouseEvent e) {
JComponent c = (JComponent)e.getSource();
for(MouseListener l :c.getParent().getMouseListeners()){
l.mouseClicked(e);
}
}

351 :デフォルトの名無しさん:2009/02/26(木) 22:34:16
俺なら親のaddMouseListenerをオーバーライドしたいな

352 :デフォルトの名無しさん:2009/02/26(木) 22:48:15
俺俺なら親にディスパッチする

353 :sage:2009/02/26(木) 22:54:12
俺俺俺も親にディスパッチするな。
350 みたいに実装するなら、MouseEventを変換してやらないと。



354 :デフォルトの名無しさん:2009/02/26(木) 22:57:08
まぁ俺の方がディスパッチするけどね。

355 :デフォルトの名無しさん:2009/02/26(木) 23:07:01
ディスパッチってどうやってするねん?

俺も>>350みたいにリスナーぶち込みで対処したことがある

356 :sage:2009/02/26(木) 23:17:41
>>355
java.awt.Component#dispatchEvent(AWTEvent)嫁。

357 :349:2009/02/27(金) 00:35:17
getParent().dispatchEvent(event);が一番短くかけるみたいですね。

>>350から355のみなさん、どうもありがとうございました。

358 :デフォルトの名無しさん:2009/02/27(金) 01:09:26
普通に JLabel の親に対して
addMouseListener(MouseEvent) を呼べば
>>349 に書かれてるような挙動になるけど。


359 :デフォルトの名無しさん:2009/02/27(金) 01:40:53
c.addKeyListener(new KeyAdapter() {
  public void keyPressed(KeyEvent e) {
    c.removeKeyListener(this);
  }
});

どさくさにまぎれて、一度だけ実行されるリスナーの小技。(流れ上、マウスリスナでないのは手抜き)
めったに使う機会がないと思うけど。。

360 :デフォルトの名無しさん:2009/02/27(金) 01:54:28
それいけるんだ
Iteratorのループで出来ないかと思ってた〜

361 :デフォルトの名無しさん:2009/02/28(土) 12:05:56
JComponent.setFont(new Font("メイリオ", Font.BOLD, 42))
とすると一回目だけすごく遅いんですが、フォントの読み込みは
何かテクニックがあるんでしょうか?

362 :デフォルトの名無しさん:2009/02/28(土) 17:07:54
アプリケーション起動時にあらかじめ読み込んでおくくらいしかないよ
いずれにせよロード時間はかかる

363 :デフォルトの名無しさん:2009/03/01(日) 17:17:19
Java SE Development Kit (JDK) 6 Update 11
Eclipse3.4.1
WindowsXP SP3

上記の環境があり、そこでGUIアプリをJavaで作成しようと思っています。
Swing(?)ってのをElipseのメニューから探したのですが、見当たりません。

JavaSEをアンインストールして、JavaEEをインストールするのが妥当な選択なのでしょうか?
それともplug-inがまた別にあるのでしょうか?

364 :デフォルトの名無しさん:2009/03/01(日) 17:39:46
>>363
LANケーブルを抜いてクビをククルのが最速

365 :デフォルトの名無しさん:2009/03/01(日) 17:49:20
>>364
最速か否かは聞かれてないだろww

366 :デフォルトの名無しさん:2009/03/01(日) 17:54:37
exlipseの標準環境だと、swingアプリはメモ帳でhtml手打ちするようなのりで、
自分でソースコード書いて全部作ることになるっす。

net beansとかいうの使うと、VBみたいなポトペタを標準でできるらしい
eclipseもプラグイン導入するとポトペタできるらしい
が、swingでポトペタやったことないんでわかりません。

367 :デフォルトの名無しさん:2009/03/01(日) 18:23:02
>>366
Swingやるなら現状ではNetBeans一択らしい。
EclipseプラグインのVE(VisualEditor)は使いもんにならんそうな。
俺はEclipseで手打ちしてるけどナー。
# EcilpseからSwingアプリを起動すると、フォント構成ファイルが無視されて、
# 日本語じゃないフォントで日本語がレンダリングされるという問題も……。
# おかしいなー、フォント構成ファイルの読み込み自体は正常に行われてるんだが。

368 :デフォルトの名無しさん:2009/03/01(日) 20:00:47
つ jigloo

369 :デフォルトの名無しさん:2009/03/01(日) 21:02:05
じぐるーも重いしすごくグループレイアウトが使いにくいしだめだよなぁ

370 :デフォルトの名無しさん:2009/03/01(日) 22:51:25
NetBeansでGUI作って、Eclipseに持ち込んでる俺。
他にもいるでしょ、こんな人。

371 :デフォルトの名無しさん:2009/03/01(日) 23:11:34
>>367
VEは使ってみて、脱力した。
正直、自分の脳内でレイアウト組んだほうがマシ。
最近は更新もされてないんじゃなかったっけ?

372 :デフォルトの名無しさん:2009/03/03(火) 01:20:54
swingの印刷機能って、コンポーネント上の文字がカクカクになって印刷されるんだけど、
これって普通なの?

373 :デフォルトの名無しさん:2009/03/03(火) 08:18:06
>>372
アンチエイリアスかければ?

374 :デフォルトの名無しさん:2009/03/03(火) 23:11:33
>>370
余裕で俺、とウチの社内全員。

375 :デフォルトの名無しさん:2009/03/04(水) 00:14:31
>>370
NetBeansでそのままつくらずに、Eclipseに持ち込む理由はなんですか

376 :デフォルトの名無しさん:2009/03/04(水) 00:27:24
大技見つけたぜぃ。

Javaで比較的簡単にホットデプロイする方法。

まず、デプロイしたいクラスのベースとなるHogeを作っておきます。
そして、それを継承したHoge00というクラスを作ります。
ただし、このクラスのファイル名はHogeXX.javaという風にします。
コンパイルできなければ対策を考えますが、クラスをpublicにしなければ通るようです。
そして、修正してデプロイするときには、Hoge00をHoge01という風にクラスの名前も変えます。
ファイル名はそのままです。

クラス名を変えるとコンストラクタ名まで変えないといけません。この時の小技として
コンストラクタの処理を全て関数にしてHoge00クラスにはコンストラクタを記述しないようにします。
その為、Hogeクラスには空のデフォルトコンストラクタを用意しておきます。

あとは、コンパイルしてシステムのクラスローダを使ってHoge01クラスを読み込んで
Hogeにキャストして使用できます。Hogeにはインターフェースとなる関数を用意しておきます。

従来の方法だと別のクラスローダを使ったりするので、同じクラスを違うクラスであるとしてしまう為
キャストしたり出来ません。なので、リフレクションなどを使ってアクセスする事になります。
これがどうもうまくないと思ったので、別の方法を考えたら思いつきました。

今からサンプルを作ります。

377 :デフォルトの名無しさん:2009/03/04(水) 01:39:21
http://space.geocities.jp/solver9999/

ホームページに置きました。
なぜか、antから起動しないとToolProvider.getSystemJavaCompiler()がnullになってしまうので
antを使ってください。この辺を調べてみます。でゎ、おやすみ。

378 :デフォルトの名無しさん:2009/03/04(水) 01:53:06
なんだか麻布の臭いがする。。。

379 :デフォルトの名無しさん:2009/03/04(水) 10:33:20
GUIはまったく初心者だったけど「Javaアプリケーション作成講座」という本を読んで
だんだんわかるようになってきた
とりあえず簡単なテキストエディタやブラウザは作れるようになった

380 :デフォルトの名無しさん:2009/03/04(水) 11:28:11
javax.tools.ToolProvider.getSystemJavaCompiler()がnullを返すのは
JAVA_HOME\lib\tools.jarにクラスパスが通ってない事が原因でした。

381 :デフォルトの名無しさん:2009/03/04(水) 20:24:28
ネタ・・・じゃ・・・ないの・・・・か?

382 :デフォルトの名無しさん:2009/03/05(木) 02:06:57
Swingに印刷プレビューダイアログってありますか?

383 :デフォルトの名無しさん:2009/03/05(木) 09:36:17
作れば良いんじゃないの

384 :sage:2009/03/06(金) 00:33:36
以下のバグが1.4でも6.0でも再現するんだけど、JTextField#setTextはスレッドセーフじゃないの?
それとも検証方法自体が間違ってるの?
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4765353

385 :デフォルトの名無しさん:2009/03/06(金) 00:42:39
swing自体スレッドセーフじゃなかったと思う

386 :デフォルトの名無しさん:2009/03/06(金) 00:44:55
1.4.2で直ってないって書いてあるし、放置されてるんじゃね?

387 :デフォルトの名無しさん:2009/03/06(金) 00:46:00
この再現コードみたいなことをすること自体基本的にないからなぁ

388 :デフォルトの名無しさん:2009/03/06(金) 00:50:16
>>385
↓スレッドセーフだと書いてあるんだが・・・
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/text/JTextComponent.html#setText(java.lang.String)

389 :デフォルトの名無しさん:2009/03/06(金) 01:13:56
ざっとソースをみたところ、スレッドセーフじゃないね。

テキストのモデルであるDocumentへの書き込みがアトミックであったとしても、
UIスレッドを用いてコンポーネントから何らかの値をとってくるメソッドで
Documentのインスタンスを2回以上使うような操作をする全てのメソッドは
その間はDocumentへの書き込みを排他していないといけないはずなのだが、
少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。

390 :389:2009/03/06(金) 01:15:33
ソースは Java 6 しかみてない。すまん

391 :デフォルトの名無しさん:2009/03/06(金) 01:18:31
setTextする処理をEDTに投げればいいんじゃないの?的外れだったらごめん。

392 :デフォルトの名無しさん:2009/03/06(金) 01:43:30
>>389
>.少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。

setTextの話だったんだけど、typo?

393 :デフォルトの名無しさん:2009/03/06(金) 01:53:44
>>392
getTextが変な値を返す原因がsetTextをUIスレッド以外でアクセスしたことにあるなら、
setTextはスレッドセーフだといえる?

394 :デフォルトの名無しさん:2009/03/06(金) 07:33:43
>>393
setTextの時点で変な値にならないのであれば、setTextはスレッドセーフじゃないの?
(よくわかってないかもしれん・・・)

そもそも>>384の再現コードは、getTextした値が""や"12"や"21"になることがあり、
以下のように思ってるんだが、違うかな?

""は、setTextが値を一度クリアしたタイミングで、getTextしているから。(getTextがスレッドセーフではないから)
"12"や"21"はsetTextがロックする前にAbstractDocument#getLengthを呼び出していることが原因。
(setTextもスレッドセーフではない?)

395 :デフォルトの名無しさん:2009/03/06(金) 13:04:40
JavaDoc を見る限り getText() はスレッドセーフじゃないんだな…知らなかった…
別スレッドからsetText()して結果的に画面に"12"や"21"や""が描画される
ことがないのであれば setText() はスレッドセーフといえる…のかな?

でも現状は >>394 のいうようにsetText()もスレッドセーフじゃないように見えるなぁ

396 :デフォルトの名無しさん:2009/03/06(金) 17:43:09
setText()のスレッドセーフを確認するのに、スレッドセーフではないgetText()が絡んでくるとややこしくなるので
setText()するたびに文字列を溜めておいて、最後に検証するというのはどうだろう。

397 :デフォルトの名無しさん:2009/03/06(金) 19:28:23
AbstractDocument.readLockを使えば、少しはましになるけど、ダメだった。
たまに、"12"と"21"が出てくる。

398 :デフォルトの名無しさん:2009/03/06(金) 22:27:20
swingコンポーネントをディープコピーしようとしたら、
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.io.NotSerializableException: com.sun.java.swing.plaf.windows.XPStyle$Skin
っていわれるんだけど、どうすりゃいいの?

399 :デフォルトの名無しさん:2009/03/08(日) 00:12:39
Beans Bindingはもう見捨てられたのかと思ってたけど、先月スペックリードが変わってるね。
これは期待してもいいんだろうか。

400 :デフォルトの名無しさん:2009/03/08(日) 01:08:00
スペックリードとは仕様定めるリーダーみたいなものでしょうか?

401 :デフォルトの名無しさん:2009/03/10(火) 10:41:55
複数のクラスで共用するダイアログなどで、わざわざそれぞれのフィールドとして持たせたくない場合は、UIUtilitiesなどを作ってそこでshow***といった感じで定義しても問題ないでしょうか

402 :デフォルトの名無しさん:2009/03/10(火) 20:24:14
逆に何を懸念しているのかがわからない

403 :デフォルトの名無しさん:2009/03/14(土) 13:39:14
Swingを勉強するのにお勧めの書籍とかある?

404 :デフォルトの名無しさん:2009/03/15(日) 01:06:20
どのレベルか、どんな記述が読み易いか示さないと何とも。

405 :デフォルトの名無しさん:2009/03/15(日) 01:15:03
>>404

Javaの勉強を始めたばかりで、プログラミング言語Java第四版を読み終わったところ。
まあまあ読みやすかった。訳も気にならなかった。

Head Firest Java 第二版を読んでる最中で、
面白いと思うけど、実用性には欠けると思っている。

ざっと機能を概観する入門書と、詳しい内容の2冊進めてもらえるとうれしい。

こんなところでどうでしょう。

406 :デフォルトの名無しさん:2009/03/15(日) 02:16:03
swinglabs.orgがもう一週間近く死んでる。

407 :デフォルトの名無しさん:2009/03/15(日) 06:07:53
頭いい人は本から入るのかね?

わしは本読んでると眠くなるんで、いきなりソースコードと戦う派なんだが

408 :デフォルトの名無しさん:2009/03/15(日) 15:29:02
武闘派か。端から見てるとPCに向かって何か遣ってる引きこもりにしか見えないが。

409 :デフォルトの名無しさん:2009/03/15(日) 15:39:15
>>405
詳しい内容ではないが実践的な内容ならEffective Java。
Swing関係ないけど。一通りJavaで組めるようになって開発規模が
大きくなってきた頃に手に取ると大変有用な本だと思う。

410 :デフォルトの名無しさん:2009/03/15(日) 19:03:06
>>409
Swing本当に関係ないなww
Swingの本を薦めてくれ。

411 :デフォルトの名無しさん:2009/03/15(日) 19:23:35
>>410
申し訳ない。ただJava勉強中のようだったのでつい。
確かにSwing関係ないけど間違いなく勉強になる良い本だよ。
「良いクセ」を学べる本なので、中級へのステップアップ時には
是非読んだ方が良いですよ。

Swing本については、他の人よろしく〜

412 :デフォルトの名無しさん:2009/03/15(日) 19:27:20
>>411
気持ちはありがたいが、既に本棚にあるのだww

413 :デフォルトの名無しさん:2009/03/15(日) 19:29:06
JavaはJava教室で買わされた本しかもってない、
Swingはグーグル先生に聞いてなんとかした、
読んでないからいい本なんて分からないんだぜ

Effective Javaは良さそうだな、読んでみようか

414 :デフォルトの名無しさん:2009/03/16(月) 00:31:16
本ではないが、http://java.sun.com/docs/books/tutorial/uiswing/

415 :デフォルトの名無しさん:2009/03/16(月) 00:57:22
>>413
ちゃんと本を読まなかったので、
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
の必要性を知らなかった。
人が書いたコードを見ても、余計なことをしてると思っていた。

416 :デフォルトの名無しさん:2009/03/16(月) 02:46:43
そんなの見た事無いや。orz
解説頼む。

417 :デフォルトの名無しさん:2009/03/16(月) 03:12:48
>>416
Swingは、スレッドセーフじゃないから、初期化もイベントディスパッチスレッドで実行しないといけない。
invokeLaterを使うと後でイベントディスパッチスレッドで実行される。

418 :デフォルトの名無しさん:2009/03/16(月) 03:23:09
>>416
スレッドセーフじゃないんだってさ。

419 :デフォルトの名無しさん:2009/03/16(月) 10:10:35
本ならSwing Hackが実用的かも。
Swingの入門書の次くらいに読むといい本。

420 :デフォルトの名無しさん:2009/03/16(月) 23:55:45
>>419
本屋でSwing Hackをみてきました。見た感じTIPS集みたいですね。
よさそうな入門書だと「Java GUIプログラミング」のVol.1, Vol2なのですが、
ちょっと本気すぎる感じです。以外にSwingの本って売ってないですね。

421 :デフォルトの名無しさん:2009/03/18(水) 02:54:08
>>420
本を買う前に最初はsunのjavaサイトにあるswing関連のチュートリアルで十分じゃないか?
APIリファレンスのswingコンポーネントクラスの説明文の多くにリンクがあったりする。

422 :デフォルトの名無しさん:2009/03/18(水) 02:58:11
あ、すま
>>414で紹介されてるね。

423 :デフォルトの名無しさん:2009/03/18(水) 03:06:57
英語を読むのは面倒くさい
いや読むけどさ(ブツブツ

424 :デフォルトの名無しさん:2009/03/18(水) 04:21:31
>>420
入門書ってどれもほとんど大差ないから。
「Java GUIプログラミング」が本気すぎるとなると習う前に慣れたほうが良いかも。
となるとSwingチュートリアルのソースがベストかな。
英文を隅々まで読まなくても、ソース読んで、実行してみればだいたいわかってくる。

425 :デフォルトの名無しさん:2009/03/18(水) 20:45:24
>>424
ありがとう!やってみる。

426 :デフォルトの名無しさん:2009/03/18(水) 22:52:15
JOptionPane#showXXXDialog()で適当なコンポーネントをつめたJPanelを
表示した際にダイアログのボタンじゃなくてJPanel内の特定のコンポーネントの
方にフォーカスがあたるようにすることってできる?

427 :デフォルトの名無しさん:2009/03/19(木) 01:06:24
>>426
???

428 :デフォルトの名無しさん:2009/03/19(木) 01:47:02
>>427
JOptionPaneをカスタマイズしてJPanelを埋め込んだ場合に、ダイアログのOK/Cancelボタンではなくて追加したJPanel内のコンポーネントに入力フォーカスを当てたい、ということだと思われる。

429 :デフォルトの名無しさん:2009/03/19(木) 08:22:29
できると思う

swing フォーカスでぐぐりゃ解決しそう

430 :デフォルトの名無しさん:2009/03/19(木) 11:23:07
>>428
そういうことです.わかりにくい文ですみません.
>>492
ぐぐってみました.ttp://terai.xrea.jp/Swing/DefaultFocus.html

JOptionPane#showXXXDialog()系だとJDialogやJFrameがとれないから
FocusTraversalPolicyをセットしたりWindowLister#windowOpend()や
ComponentListner#componentShown()でrequestFocus()呼べないよなー
とか思ってました.
んで上のページの EventQueue#invokeLater() 方式を試してみましたが
手元の環境ではJOptionPaneの場合フォーカスはOKボタンの方になってしまいました…

431 :430:2009/03/19(木) 11:39:29
試したコードはこんな感じです
public static void createAndShow(){
 final JTextField textField = new JTextField("Hello");
 EventQueue.invokeLater(new Runnable(){
  public void run() {
   textField.requestFocusInWindow();
  }
 });
 int result = JOptionPane.showConfirmDialog(
  null, textField, "Input Text",
  JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
}

432 :デフォルトの名無しさん:2009/03/19(木) 12:09:21
>>431
実際にフォーカスを取得するまで、
requestFocusInWindow() を何度も呼んでみるとか。

ちょっと力技かもしれないけど HierarchyListener を使えば
JOptionPane.showXxxDialog() で作られるダイアログを取得できる。
そのダイアログに対して
WindowListener か ComponentListener を使えばよい。

「コンポーネントが画面に表示されたときに特定の処理を行う」
って、意外と難しいよね?
JSplitPane が表示されたときディバイダを中央に移動させる方法を
見つけるのに、すごく苦労したことがある。

433 :430:2009/03/20(金) 00:09:49
>>432
なるほど HierarchyListener は思いつきませんでした。これなら動きそうですね。

>>431 のコードはEventQueue#invokeLater()じゃなくて javax.swing.Timer で
1秒後とかやったら期待通り動いたんでタイミングの問題なんでしょうねぇ…
PC性能によって必要な delay 時間が変わるからTimerでやるのは微妙だなー
と思ったけど何度でも呼んでみる的アプローチで繰り返しありの Timer を
設定してフォーカスがとれたら Timer を止める、とかでもできそうですね…

434 :デフォルトの名無しさん:2009/03/20(金) 01:56:28
final JTextField textField = new JTextField("Hello");
JOptionPane pane = new JOptionPane(textField, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = pane.createDialog("Input Text");

dialog.addWindowListener(new WindowAdapter() {
@Override public void windowOpened(WindowEvent e) { textField.requestFocusInWindow(); }
});
dialog.setVisible(true);
dialog.dispose();
Object o = pane.getValue();
int result = (o instanceof Integer) ? (Integer)o : JOptionPane.CLOSED_OPTION;

うそくさいし、ひどく面倒

435 :430:2009/03/20(金) 13:14:55
>>434
確かに JOptionPane を直接使えばJDialogがとれますね。参考になります。
戻り値の扱い周りとかが大変面倒くさそうですけど…

436 :デフォルトの名無しさん:2009/03/20(金) 13:26:02
>>432
>「コンポーネントが画面に表示されたときに特定の処理を行う」
Component#addNotify() / removeNotify()をオーバーライドでできると思う。

437 :デフォルトの名無しさん:2009/03/20(金) 17:46:14
>>436
addNotify() が呼ばれたとき、
そのコンポーネントが表示されてるとは限らない。
たとえば Window.pack() を呼んだとき、
(たとえウィンドウが不可視であっても)
ウィンドウ内のすべてのコンポーネントの
addNotify() が呼ばれる。

あと、親コンテナの doLayout() が呼ばれるまでは
コンポーネントのサイズが確定しないので、
オーバーライドした addNotify() から
JSplitPane.setDividerLocation() を呼んでも機能しない。

438 :デフォルトの名無しさん:2009/03/21(土) 15:59:56
JTableのセルをアニメーションして移動したり表示したりしたいのですが
どういう方法が一番いいでしょうねぇ・・・

439 :デフォルトの名無しさん:2009/03/21(土) 19:12:38
単純にセルを描画する命令をタイマーで呼ぶしか方法はないのでは?
その具体的な方法でしょうか?

440 :デフォルトの名無しさん:2009/03/21(土) 19:57:58
えーと、よくSFとかでありますね
上から1行ずつアニメーションしてさらさらと出てくるような表や
項目を追加したらふわっと最終行が浮かんでくる
といったような描画をどうやってやるかということに悩んでいます
Timer自体はいくらでも使えるのですが

441 :デフォルトの名無しさん:2009/03/21(土) 20:18:33
JTableはセルそれぞれがコンポーネントというわけではないので、あまりスマートにはできません。
上げられた二つの例に限ってですが、代替策として、glasspaneでだますというのはどうでしょう?
それがいやなのであれば、Timerかなにかでアニメーションさせてください。

442 :デフォルトの名無しさん:2009/03/21(土) 22:18:49
>>440
JXLayer使えばいいと思うよ。

443 :デフォルトの名無しさん:2009/03/21(土) 23:44:17
JTreeでツールチップ表示中にホイールスクロールするとやたら重いんだが

どうにか、普通にスクロールさせる方法はないかね

444 :デフォルトの名無しさん:2009/03/22(日) 04:22:23
ツールチップが重い処理だからそんなもの。
無効にするしか。

445 :デフォルトの名無しさん:2009/03/22(日) 13:51:40
>>443
ツールチップを常に重量コンポーネントとして表示すればよいと思う。

普通 JScrollPane でコンポーネントがスクロールされるときは、
現在表示されているビューポートの外観を少しずつずらしてコピーすることで、
高速なスクロールを実現している。
しかし、軽量コンポーネント(たとえばツールチップ)が
上のレイヤーに重なっているときは、
スクロールされるたびにビューポート全体を再描画しなくてはならないので遅くなる。

446 :デフォルトの名無しさん:2009/03/22(日) 20:35:26
>>441
ありがとうございます
GlassPaneを調べてみますね。それ以外の場合、Timerでアニメーションするとよいとのことですが
アニメーションの内容はどのようなものを?
TableSellRendererやJTableなどをいくら拡張しても中々難しそうですね・・・

>>442
なかなかすごそうなコンポーネントです。これはどういうものでしょうか?

447 :デフォルトの名無しさん:2009/03/26(木) 02:49:32
最近beansBindingを触って疑問に思ったのですが、
ColumnBindingに対してvalidatorを設定した場合、
バリデーションエラーが発生した行の取得はどのようにすればよいのでしょうか?

448 :デフォルトの名無しさん:2009/03/28(土) 01:00:27
横方向に中央であればFlowLayoutでシンプルに実現できますが、縦方向に中央に配置したい場合の簡単な実現方法はありませんでしょうか?

449 :デフォルトの名無しさん:2009/03/28(土) 07:03:52
>>448
Y_AXISなBoxLayoutで子コンポーネントそれぞれにsetAlignmentX()でCENTER_ALIGNMENTを設定するのは?
FlowLayoutと違って子コンポーネントの幅は推奨サイズでなく最大サイズに影響されるので、
推奨サイズにしたいなら子コンポーネントの種類次第では最大サイズを設定してやらないといけないけれど。

450 :デフォルトの名無しさん:2009/03/28(土) 10:24:26
private static JLabel createLabel(String text){
 JLabel lb = new JLabel(text);
 lb.setAlignmentX(Component.CENTER_ALIGNMENT);
 lb.setMaximumSize(new Dimension(300,30));
 return lb;
}

public static void main(String[] args) {
 JPanel pn = new JPanel();
 pn.setLayout(new BoxLayout(pn,BoxLayout.Y_AXIS));
 pn.add(createLabel("hoge"));
 pn.add(createLabel("fuga"));
 //...
}

このようなコードで試してみましたが、やはりY方向には上に詰められてしまいます。
中央寄せしたいコンポーネントの上下をBox.createVerticalGlue()で詰めるというのはありでしょうか?

451 :デフォルトの名無しさん:2009/03/28(土) 12:54:35
>>450
縦方向に中央揃えでコンポーネントを並べることと勘違いしてた。
Box b = Box.createVerticalBox();
b.add(Box.createVerticalGlue());
b.add(コンポーネント);
b.add(Box.createVerticalGlue());
みたいな感じでいけるんじゃないかな。
でももしかすると上下のグルーが同じ比率で伸びずに完全なセンタリングにならないかも。
その場合、どれくらいで簡単な実現方法とならないかが分からないけれど、
GridBagLayoutやGroupLayoutみたいな少し複雑なレイアウトマネージャを使うとか、
縦方向について中央配置するマネージャを自作するとか。

452 :デフォルトの名無しさん:2009/03/28(土) 12:57:58
>>450 縦に中央ってこんな感じ?
JLabel label1 = new JLabel("Hello, World!!");
label1.setBorder(BorderFactory.createTitledBorder("label1"));
label1.setAlignmentX(JComponent.CENTER_ALIGNMENT);
JLabel label2 = new JLabel("Goodbye, world!!");
label2.setBorder(BorderFactory.createTitledBorder("label2"));
label2.setAlignmentX(JComponent.CENTER_ALIGNMENT);

JPanel inPanel = new JPanel();
inPanel.setLayout(new BoxLayout(inPanel,BoxLayout.Y_AXIS));
inPanel.add(label1);
inPanel.add(label2);
inPanel.setAlignmentY(JComponent.CENTER_ALIGNMENT);
inPanel.setBorder(BorderFactory.createTitledBorder("in"));

JPanel outPanel = new JPanel();
outPanel.setLayout(new BoxLayout(outPanel,BoxLayout.X_AXIS));
outPanel.add(inPanel);
outPanel.setBorder(BorderFactory.createTitledBorder("out"));

JFrame frame = new JFrame("VerticalCenterLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.add(BorderLayout.WEST, outPanel);
frame.add(BorderLayout.CENTER, outPanel);
frame.pack();
frame.setVisible(true);

453 :デフォルトの名無しさん:2009/03/29(日) 13:32:37
初心者です。
javaでゲーム製作の本を買って、
コードがすべてAWTで書かれてるんですが、
swing用の本を買いなおしたほうがいいですか?

454 :デフォルトの名無しさん:2009/03/29(日) 15:23:18
>>453
別にそんなことないだろ。
Swingの本なら、awtの知識は前提としているだろうし。

455 :デフォルトの名無しさん:2009/03/29(日) 17:13:35
>>454
ありがとうございます。
今の本で勉強してみます。

456 :デフォルトの名無しさん:2009/03/29(日) 23:39:38
>>453
時間の無駄をいとわないならその本でOK。
時間の無駄がいやなら買いなおすべし。

457 :デフォルトの名無しさん:2009/03/30(月) 00:44:33
ゲームを作るつもりでその本を買ったなら Swing の本を
買い直す必要は全くないと思うが…
Swing の勉強をするつもりで買ったの?

458 :デフォルトの名無しさん:2009/03/30(月) 04:25:34
あとでswingの本読んで、swing化してみるのは実力が付いていいと思うけどね。
基本は大事。

459 :デフォルトの名無しさん:2009/03/30(月) 06:53:59
>>440
>>453
ゲームで、グラフィック表示ばっかりなら、Swingはあまり関係ないと思われる。
java.awt.Graphics2Dを使ってるから「コードがすべてAWT」というオチではないよな?

460 :デフォルトの名無しさん:2009/03/30(月) 09:44:16
440関係なかった・・・

461 :デフォルトの名無しさん:2009/03/30(月) 09:49:53
javaでゲームだと結局java2dだとか3d使うんだべ

462 :デフォルトの名無しさん:2009/03/30(月) 11:50:26
そんなことないべ。
コマンドアドベンチャーとかなら、普通に既存コンポーネントだけで作れるべ。

463 :デフォルトの名無しさん:2009/03/30(月) 17:57:11
>>461
シミュレーションだとJava2DとSwingでがっちり組むみたいよ。
最近ので、ちょっと期待してしまうDarkSideとか
http://www.darkside-game.net/index.jsp

自分ではJava3Dを使いたいんだけど再配布がな・・・

464 :デフォルトの名無しさん:2009/03/30(月) 22:06:37
>>463
Java Web Startにすると、そのあたりも自動でインストールしてくれるらしい

465 :デフォルトの名無しさん:2009/04/02(木) 23:33:46
>>464
そんなうまい話があるわけない。
開発者の手間は変わらない。(JNLPの分面倒か)


466 :デフォルトの名無しさん:2009/04/03(金) 04:05:32
>>465は技術者として終わっとるな。

467 :デフォルトの名無しさん:2009/04/03(金) 04:11:55
Java Web StartでのJava3D配布は、このあたりで話題になってた
http://pc11.2ch.net/test/read.cgi/tech/1033703640/909-915

詳しくはここを
https://j3d-webstart.dev.java.net/test/

これが参考になるかもしれない。
http://ziddy.japan.zdnet.com/qa4257080.html

468 :465:2009/04/03(金) 07:15:22
>>466
"自動で"とか勘違いさせるような発言について書いたんだが

469 :デフォルトの名無しさん:2009/04/03(金) 08:21:42
Java3Dサイトのデモでは自動でJava3Dがインストールされるように見えるが。

470 :デフォルトの名無しさん:2009/04/03(金) 08:59:32
スタンドアロンでも普通に実行できるようにならんかね
ネットワークアクセスしてもいいから

471 :デフォルトの名無しさん:2009/04/03(金) 09:41:54
jarファイルにすれば実行できるぞ

472 :デフォルトの名無しさん:2009/04/03(金) 11:24:57
JFileChooser で、ファイルチューザーのダイアログを開いた時に表示されるディレクトリを
マイコンピュータにしたいんですが、どうしたらいいでしょうか?


473 :デフォルトの名無しさん:2009/04/04(土) 16:14:59
任意のファイルを自動でインスコできたら、セキュリティ上問題が有るな。

474 :デフォルトの名無しさん:2009/04/04(土) 18:51:59
だから認証が出るわけだな。いまさら何を。

475 :デフォルトの名無しさん:2009/04/05(日) 04:49:56
マニフェストに記述した JAR 内の画像をアイコンにするくらいしてほしいね。
まぁ JWS でデスクトップに好きな画像のショートカットアイコン作れるけどさ。

476 :デフォルトの名無しさん:2009/04/05(日) 12:17:50
テキストを編集できるフレームで特定の文字がある行だけ
編集不可能にするにはどうしたら良いでしょうか。
netBeansのエディタみたいにするには?

477 :デフォルトの名無しさん:2009/04/05(日) 14:27:24
カーソル移動のイベントを受け取って、その位置の含まれる行を見て
setEditable() で切り替えるとか。

478 :デフォルトの名無しさん:2009/04/05(日) 15:35:57
実際にやったことないから分からないけど
DocumentListener とか使うのでは


479 :デフォルトの名無しさん:2009/04/05(日) 15:38:42
あるいは CaretListener を使って
キャレットが移動するたびに必要に応じて
setEditable(boolean) を呼ぶとか。
こっちのほうがいいかも。


480 :デフォルトの名無しさん:2009/04/07(火) 14:41:24
>>477,478,479 さんありがとうございます。
試してみます。

481 :デフォルトの名無しさん:2009/04/14(火) 19:46:23
スレが過疎ってるスキに、くだらないこと書かしてもらうが
FileSystemView fileSystemView = FileSystemView.getFileSystemView();
この冗長さは、どうにかならんのか?


482 :デフォルトの名無しさん:2009/04/14(火) 19:49:55
IME にでも登録しとけよ。俺は Eclipse のオナペット使うけど。

483 :デフォルトの名無しさん:2009/04/14(火) 20:03:54
>>481
嫌ならもう少し短い変数名使えば?

484 :デフォルトの名無しさん:2009/04/14(火) 23:28:39
ラッパ書いてヲレフレームワークに突っ込めよ。

import ore;
ore = new ore.gFSV();
で出来るようになるぜ。

485 :デフォルトの名無しさん:2009/04/15(水) 01:13:41
Nimbusのとかに比べると、まだまだだな。
InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState.java

486 :デフォルトの名無しさん:2009/04/15(水) 17:57:46
単にクラス名が長いというだけじゃなくて、
おなじ行に3回も FileSystemView と書かなくてはならないのが問題というか。
せめて、こうするべきだったのでは。
FileSystemView fsv = FileSystemView.instance();

Toolkit.getDefaultToolkit() も同罪。


487 :デフォルトの名無しさん:2009/04/15(水) 18:00:07
get付けてgetInstance()にしようぜ

488 :デフォルトの名無しさん:2009/04/16(木) 00:47:23
その程度の工夫ではJavaの冗長さはびくともしないぜ
おとなしくIDEに補完させましょう

# 型推論があればもうちょっとなんとか…

489 :デフォルトの名無しさん:2009/04/16(木) 09:07:28
しかしHashMapを格納するときにMapで宣言するJavaの文化が型推論の導入を阻むのだった

490 :デフォルトの名無しさん:2009/04/16(木) 23:43:57
型推論って型の宣言必要ないんだが。


491 :デフォルトの名無しさん:2009/04/17(金) 00:01:30
>>490
Javaっぽい書き方
Map<String, String> map = new HashMap<String, String>();

いわゆる型推論
final map = new HashMap<String, String>();
↑HashMap<String, String>と補完される。

結局上みたいなやつじゃなくてコンストラクタの型引数が省略可能になるだけになったらしいが。

492 :デフォルトの名無しさん:2009/04/17(金) 00:08:21
ゲネリックス を始めて触った時に typedef が欲しくなったのは俺だけではあるまい。

493 :デフォルトの名無しさん:2009/04/17(金) 00:15:51
型推論っていえるのか・・・。

494 :デフォルトの名無しさん:2009/04/17(金) 06:35:02
言語仕様談義はGUIと関係ないずら

495 :デフォルトの名無しさん:2009/04/18(土) 00:34:16
JEditorPaneにsetTextで500KBくらいのHTMLを読ませると、表示にもの凄く時間がかかるんだが何かいい方法は無いですかい

496 :デフォルトの名無しさん:2009/04/18(土) 01:09:10
Swing を捨て SWT の Browser クラスを使う。

497 :デフォルトの名無しさん:2009/04/18(土) 01:45:50
>>496
SWTって本を見かけないから全く触れたことないなあ。
軽いのならちょっと調べてみる、d

498 :デフォルトの名無しさん:2009/04/18(土) 01:57:11
500kだとブラウザでも遅いと思うんだがSwingはさらにシングルスレッドだからね。

499 :デフォルトの名無しさん:2009/04/18(土) 05:55:19
>>498
シングルスレッドってw

500 :デフォルトの名無しさん:2009/04/18(土) 11:28:27
イベントディスパッチスレッドがひとつしかないことを言ってるのでは

501 :デフォルトの名無しさん:2009/04/18(土) 11:31:55
>>498
現存するGUIツールキットでスレッドセーフなものは無いぞ。

502 :デフォルトの名無しさん:2009/04/18(土) 17:33:32
というか、JWebPaneは今どうなってんの?

503 :デフォルトの名無しさん:2009/04/18(土) 18:49:46
誰か、というかの前を補完してくれ〜

504 :デフォルトの名無しさん:2009/04/18(土) 20:50:07
>> 497
軽いけれど役立たずだよ。


505 :デフォルトの名無しさん:2009/04/19(日) 07:12:42
Java でカスタムブラウザみたいなものを作ろうと思ったら SWT 一択だろ。
それ以外は特にいらないけど。

506 :デフォルトの名無しさん:2009/04/19(日) 11:10:11
カスタムブラウザ自体がアレ。
自前でパースして適当に配置したほうが(ry

507 :デフォルトの名無しさん:2009/04/19(日) 11:23:39
Google Map とか自前でパースして動かすんかい。エラい再発明家だな。

508 :495:2009/04/19(日) 15:11:00
SWT調べてみたけどSwingと連携させるのはなかなか厄介そうだね。
Swingでやるとして、500KBのHTMLを一気にでは無く少しずつ表示させることは出来ないだろうか。
スレッドを使ってやってみたら、HTMLの先頭部分は表示できたんだけどスクロールができない、助けて

509 :デフォルトの名無しさん:2009/04/19(日) 15:39:35
operaはHTML自体はメモリに読んどいて表示はウィンドウに見えてる部分だけ描画する。
メモリ減らしたいならそんな感じだがスクロール早くしたいなら
スクロール時の描画アルゴリズムを考えるとかじゃなかろうか。

510 :デフォルトの名無しさん:2009/04/20(月) 05:26:43
Swing の全コンポーネントをヘビーウェイトにするとか、そういうオプションないんだっけ?
EDT 処理やコンポーネントは相互変換できるから、あとそれができれば SWT との混在も
不可能じゃなさそうな気がするけど。

511 :デフォルトの名無しさん:2009/04/20(月) 06:58:54
ポップアップメニューくらいなら重量にできるけど

512 :デフォルトの名無しさん:2009/04/20(月) 08:59:15
ヘビーとライトが混ざると変に重くなるとか

さっさと俺アプリを修正しよう

513 :デフォルトの名無しさん:2009/04/20(月) 15:07:48
長いので、何回かに分けて質問します。
次のプログラムを実行して、サブフレーム表示ボタンを押すと描画領域を含むサブフレームが表示されるのですが、
サブフレームのクローズボタンを押して閉じてから再度サブフレーム表示ボタンを押すと、サブフレーム表示の瞬間に
ちらつきが起こります。一瞬白い部分が見えてから黒く塗りつぶされるのが目につくのです。JFrameのコンテントペインは
isDoubleBuffered() がtrueになるので、自動的にダブルバッファリングしてくれるはずと私は理解しているのですが、
なぜかちらつきが起こります。ちなみにactionPerformedメソッドをコメントアウトしてある方に置き換えるとちらつきが
起きないようです。しかし、この回避策はスマートとは言えませんし、なぜこれでうまくいくのかも不明です。
適切な解決策をご存知の方、ご教授ください。私の環境はMac OS X 10.4.11 J2SE 5.0です。

514 :デフォルトの名無しさん:2009/04/20(月) 15:11:27
513続き

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JFrameTest extends JFrame{
JFrame subFrame;
DrawArea drawArea;//subFrameに貼り付ける描画領域
JButton button;//subFrame表示ボタン
public static void main(String[] args){
JFrameTest f=new JFrameTest();
f.setVisible(true);
}
public JFrameTest(){
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
button=new JButton("サブフレーム表示");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(subFrame==null){
subFrame=new JFrame();
DrawArea drawArea=new DrawArea();
subFrame.add(drawArea,BorderLayout.CENTER);
}
subFrame.setBounds(210,0,500,400);
subFrame.setVisible(true);
}

515 :デフォルトの名無しさん:2009/04/20(月) 15:13:16
513続き

/*
public void actionPerformed(ActionEvent e){
if(drawArea==null){
drawArea=new DrawArea();
}
if(subFrame!=null){
subFrame.dispose();
}
subFrame=new JFrame();
subFrame.add(drawArea,BorderLayout.CENTER);
subFrame.setBounds(210,0,500,400);
subFrame.setVisible(true);
}
*/
});
getContentPane().add(button, BorderLayout.CENTER);
setSize(200,100);
}
class DrawArea extends JComponent{
public void paintComponent(Graphics g) {
g.fillRect(0,0,getWidth(),getHeight());
}
}
}

516 :デフォルトの名無しさん:2009/04/20(月) 15:14:33
513
以上です。

517 :デフォルトの名無しさん:2009/04/20(月) 18:30:14
>>513
手元の環境(OS X 10.5.6 Java 1.6.0_07) だとどちらの
コードでも初回表示の時からちらつく.

>DrawArea drawArea=new DrawArea();
>System.out.println("drawArea.doubleBuffered : " + drawArea.isDoubleBuffered());
としたときどうなるか?

518 :513:2009/04/20(月) 23:49:50
>>517

もちろんfalseと表示されますね。JComponentのdoubleBufferedはデフォルトでfalseですから。

ttp://wisdom.sakura.ne.jp/system/java/swing/swing8.html

を参考に

public void actionPerformed(ActionEvent e){
if(subFrame==null){
subFrame=new JFrame();
subFrame.getRootPane().setDoubleBuffered(true);
((JComponent)subFrame.getContentPane()).setDoubleBuffered(true);
DrawArea drawArea=new DrawArea();
subFrame.add(drawArea,BorderLayout.CENTER);
}
subFrame.setBounds(210,0,500,400);
subFrame.setVisible(true);
}

と変えてみましたが、結果は同じでした。
これってどうしようも無いんですかねえ。実はJFrameだけでなく、JDialogでも同様のことが起こるわけですが、
みなさんこの辺のことは不満を感じないのでしょうか。まあ実用上問題はないのだけれど、見た目も大事だと思うんですよ。

519 :デフォルトの名無しさん:2009/04/21(火) 00:55:01
JListはsetVisibleRowCountで縦の長さを指定できますが、
横幅を指定するのはどうやるのでしょうか?
DefaultListModelで3文字ぐらいをaddしても横幅は8文字分とかにしたいです。

520 :デフォルトの名無しさん:2009/04/21(火) 01:59:41
519ですが調べてみたら何とか解決しそうです。

521 :デフォルトの名無しさん:2009/04/21(火) 02:30:23
マカウザイ。マクのはサン純正じゃないからアポーに問い合わせろ。

522 :デフォルトの名無しさん:2009/04/21(火) 05:20:38
N+あたりの一部のキチガイのせいで Mac と聞いただけで過剰反応する奴が増えたなぁ。
コンピュータ関係だと使いやすい Unix 端末として使ってる人も多そうなのに。

523 :デフォルトの名無しさん:2009/04/21(火) 08:13:22
先入観だけど、多く…ないと思う、多いの?

Macは昔から嫌いだが、MacのJavaは動作が違うのか妙に嫌われてるな

524 :デフォルトの名無しさん:2009/04/21(火) 08:43:10
今日JJUGのイベントにいくんだけど、「複数のGUIウィンドウプログラムが動くシングルウィンドウシステムとその応用」
を発表する会社のページ見るとかなりトンデモな発表になりそうで今から楽しみだぜ、
ttp://www.sys-audit.com/indexjp.html

525 :デフォルトの名無しさん:2009/04/21(火) 08:53:44
>>524
そこ読んだ限りでは単なる C/S システムライクなアプレット実装だな。
つうかページ一番下

> 探偵を使って当研究所関係者を執拗に尾行する企業があります。社員として採用してただ
> 同然で技術を入手しようとお考の上でのことでしょうが、暴力行為であり甚だしい
> 人権侵害ですのでお止めください。不正競争防止法に触れる可能性もあります。

妄想ワロタw

526 :デフォルトの名無しさん:2009/04/21(火) 10:48:11
>>524
つっこみどころ多すぎてワロタw

>ウィンドウの大きさを少し変化させてウィンドウの重なり具合を変化させることにより、
>ウィンドウマネージャに描画指示を出させます
コンポーネント入れ変えたら JComponent#revalidate() 呼べば?とか
そもそも CardLayout 使えばいいんじゃね?とか…

527 :デフォルトの名無しさん:2009/04/21(火) 18:27:38
>ウィンドウの大きさを少し変化させてこれダーティーとみなされずにリペイントマネージャに無視られるんじゃなかろうか?
revalidate呼べよ。

528 :デフォルトの名無しさん:2009/04/22(水) 01:24:03
>>524
言ったなら感想書いてくれよ
http://www.sys-audit.com/index1.html
とか見るとこの会社(というかこのおっさん)すごすぎるぞww

529 :デフォルトの名無しさん:2009/04/22(水) 04:28:42
ユニックス端末ならリナックスでいいだろ。
xterm始めまともなターミナルいくらでもあるし。
わざわざマク使う様な香具師は皆無。マクって、あんまりオープンな環境じゃないしな。ソース見たい時に詰まる事は多い。

530 :デフォルトの名無しさん:2009/04/22(水) 07:47:58
XP は飽きた。Vista もなんだかなぁ。
Unix 系のターミナルやコマンド、gcc が付いてて Photoshop, Illustrator も動く。
名前を聞いて一般人が引かない。家族も使うしそこらの PC 屋で吊るしで買ってこれる。

そんな理由で MacBook 使っている。カーネルのソース必須な人は Linux 使えば
良いと思うけど、Unix のシェル積んでて主要なプロプライエタリソフトも使えるんで
便利だよ。仕事場で 5 人ほど自宅 PC を Mac に乗り換えてる。
スレチなんでこれ以上はやめとくが。

531 :デフォルトの名無しさん:2009/04/22(水) 08:41:24
windowsじゃないと出来ないことってあるよね。
飽きたとか言う以前にwindows(PC)使ってる人は、わざわざ高いMACなんか使わずそれぞれ目的があるんからPCにしてるんだと思うよ。
macだとquicktimeとobjcが標準なのが魅力だけどそれだけかもね。

windows media はどうしてるの?
ほかにwinだとゲーム(GPUプログラム)とか。

532 :デフォルトの名無しさん:2009/04/22(水) 10:48:48
>>531
QuickTimeよりは、DirectShowの方がスジが良いんじゃないかと思う。
といってもQuickTimeのAPIとかぜんぜん知らないんで、想像だけど。
DirectShowを使ったアプリ、コーデックはたくさんあるのに、
QuickTimeを使ったアプリってあまり見ない
のを考慮すると、使いづらいんじゃないかと思う。
個人的にはQuickTimeアプリってiTunesしか知らない。
コーデックはDivXとFlip4macとPerianぐらい?Flip4macはでかいwmv動画再生しようとすると、
「インポートしています」というダイアログで長々と待たされるのでイライラする。

533 :デフォルトの名無しさん:2009/04/23(木) 00:07:25
マカは盲目だしなあ。もうそんな時代じゃないのに。

534 :デフォルトの名無しさん:2009/04/23(木) 00:18:27
俺たちのサンが消滅しちゃったって言うのに、どんな時代だって?

535 :デフォルトの名無しさん:2009/04/23(木) 01:26:24
個人的にはNetBeansとOpenOfficeの行く末が心配です。

536 :デフォルトの名無しさん:2009/04/23(木) 10:37:08
自分の好きなの使えばよろし、
俺は市販のゲームだとかネトゲだとか、
自分の好きなフリーソフトがあるから、
それだけの理由でずっとメインストリーム使ってる。

537 :デフォルトの名無しさん:2009/04/25(土) 03:37:23
ooは金にならないから厳しいだろうなあ。

538 :デフォルトの名無しさん:2009/04/25(土) 05:03:45
Solaris売るには必要だけどね。
あとMSの売り上げ減らすことで、相対的な売り上げがあがる。

539 :デフォルトの名無しさん:2009/04/25(土) 16:22:35
oo有るからってsolaris売れる訳でもないし。
msの客とは重なってないと思うよ。あっちは出来る本とかの充実やみんな使ってる安心感が大事。

540 :443:2009/04/26(日) 11:24:07
>>445で教えて貰った方法を試したところ、
ツールチップを出したままホイール回してもスクロールしなくなりました。
さらに、ツールチップをクリックしてもツールチップ消えません。

なんいこったいでした。


そんなわけで、ホイール回したら問答無用でツールチップを消したいのでちょっと試してきます。

541 :443:2009/04/26(日) 12:23:22
JScrollPane spdf = new JScrollPane(hogeFrame);
spdf.addMouseWheelListener(new MouseWheelListener() {
 @Override
 public void mouseWheelMoved(MouseWheelEvent e) {
  // ホイールを回したらツールチップを消す
  ToolTipManager.sharedInstance().mousePressed(null);
 }
});

こんな酷いコードになりましたが、
どうにかマウスホイール回したらツールチップが消えるようになり
スクロールもスムーズに感じます。

542 :デフォルトの名無しさん:2009/05/13(水) 10:53:54
javaで インターネットのホームページを表示して
そのページの一部分をマウスで選択します。
選択した部分だけのhtmlコードを取りたいのですが。
どうすればいいでしょう? お願いします。

543 :デフォルトの名無しさん:2009/05/13(水) 10:58:31
全部自分で答え言ってるやん
その通りのコードをくめば良いだけ

544 :デフォルトの名無しさん:2009/05/13(水) 10:59:02
多分それは JavaScript の話ではないのかな。

545 :デフォルトの名無しさん:2009/05/13(水) 12:43:26
>>543
その通りのコードをくめば良いだけのレベルとは思えないのだが。

>>542
まず、Javaで最近のホームページをまともに表示できるコンポーネントがありません。
Firefoxなどを埋め込む必要があります。SwingXにそういうコンポーネントがあったはずだけど、いま落ちてて確認できません。
https://swingx.dev.java.net/
そのコンポーネントで、選択位置のHTMLを取得するようなことができれば、それを使えばいいと思います。

Firefox + Firebugつかえばそのまま同じことができるので、そっちを使うほうが楽だと思う。

546 :542:2009/05/13(水) 14:30:43
>>543さん >>544さん >>545さんありがとうございます。
目的とするページはなんとか表示できます。
JEditorPaneにurlを指定して表示させて見ました。
(表示で特定の文字が異様に大きく表示されてしまいます。なんとか制限したいです)
そして、マウスで特定の部分を選択しそのコードを抜き出そうとしたのですが。
文字しか取れませんでした。
期待しているのは、<a href="○○○〜">○○〜</a>とか、○○○○<br />
などですがなんとかなりませんでしょうか。

547 :デフォルトの名無しさん:2009/05/13(水) 14:49:47
ブラウザにWebページを表示させるのとは別に、そのページの生のhtmlコードを
別途読んでおいて、マウス選択した部分と生コードの合致部分のマッチングを
掛けるような処理が必要になるのではないですか?
生コードをDOMとして保持しておいて選択部分を条件にXQueryで切り出してくるとか。
或いはそれと類似の処理が可能なコンポーネントを使うとか。

548 :デフォルトの名無しさん:2009/05/13(水) 17:28:06
そんな面倒な事遣るならOLEのほうがよくないか?

http://pc12.2ch.net/test/read.cgi/tech/1137771139/
【OLE】オートメーション総合スレ【ActiveX】

549 :デフォルトの名無しさん:2009/05/14(木) 00:55:13
>>548
プラットホーム依存の機能を呼ぶのは最後の手段だろ...

550 :デフォルトの名無しさん:2009/05/14(木) 02:34:10
>>546
選択してコードを抜き出すときに、どんな処理したんだ?

551 :デフォルトの名無しさん:2009/05/14(木) 02:44:12
MozSwingハァハァ

552 :デフォルトの名無しさん:2009/05/14(木) 06:45:31
ブラウザ依存の時点で変わらないだろ。
IEならウィンドウズ依存でおk。

553 :542:2009/05/14(木) 07:50:09
>>550 さん JEditorPane#getSelectedText()を使いました^ ^;
>>547 さんのXQueryみたいなのはとても理解不能でむりです。

554 :デフォルトの名無しさん:2009/05/14(木) 08:14:54
>>553
選択してコピーしてクリップボードを見てみたら、なんかオブジェクト形式で入ってないかな?
XQueryは思ったより難しくないから、ちょっと気合いれて勉強してみると便利。

555 :542:2009/05/14(木) 08:54:46
>>554 はいわかりました。

もうひとつ質問お願いします、
他のブラウザではちゃんと表示されるのに、
JEditorPaneにhtmlページを表示させると、文字が異常に大きく
表示してしまうのですが、小さく設定する方法はないでしょうか?

556 :デフォルトの名無しさん:2009/05/19(火) 00:42:28
jtableに、insertキーを押すと行が追加され、deleteキーを押すと行が削除されるロジックを組んだのですが、
キーを押しっぱなしだと、スムーズに描画が行われず、数秒おきに数十行追加、削除される感じになってしまいます。
PCのスペックにも問題はなく、処理中に負荷もかかってないようなのですが、何が悪いのでしょうか?

557 :デフォルトの名無しさん:2009/05/19(火) 23:25:42
ロジックが悪い

558 :デフォルトの名無しさん:2009/05/20(水) 10:31:36
今こそweirdxの再開発を!

559 :デフォルトの名無しさん:2009/05/20(水) 18:08:58
weirdxってなんだろう

560 :デフォルトの名無しさん:2009/05/20(水) 18:19:50
WiredX is an X Window System server, written in pure JavaTM.
http://www.jcraft.com/
http://www.jcraft.com/wiredx/index.html

561 :デフォルトの名無しさん:2009/05/21(木) 01:38:42
Java Web Startアプリを公開できる場所しらんかえ?
Vectorでは拒否されるらしいな

562 :デフォルトの名無しさん:2009/05/21(木) 01:49:06
どこのプロバイダでも大抵できんじゃん。

563 :デフォルトの名無しさん:2009/05/21(木) 02:50:53
鯖立てるかレンタル鯖借りる

564 :デフォルトの名無しさん:2009/05/21(木) 11:53:24
関係ないけど Java Web Start アプリのカタログ的サイトってどこかにないかね?

565 :デフォルトの名無しさん:2009/05/23(土) 10:55:24
>>564
これじゃだめですか
ttp://javafx.com/samples/

566 :デフォルトの名無しさん:2009/05/23(土) 11:43:32
サンプルとかそういうレベルじゃだめなら、構想が練られているみたいね

567 :566:2009/05/23(土) 11:44:18
スイマセン、URL貼り忘れ
ttp://www.itmedia.co.jp/news/articles/0905/21/news022.html

568 :デフォルトの名無しさん:2009/05/23(土) 16:11:42
値段と宣伝効果次第では使ってみたいな。
国内ではそこそこユーザーがついたんだが、
海外で使ってもらうのにどこで宣伝すればいいのか
わからなくて困ってたんで。
でもサンはコンシューマー相手の商売がヘタだし、
あっという間に閑古鳥が鳴きそうな気もする。

569 :561:2009/05/23(土) 16:45:39
>>562,563
そういう事ではなくて、
フリーソフトの検索サイトで投稿できる所知らないかって事ね。

せっかく作っても検索サイトに載せられなきゃ探してもらえんでしょう


570 :デフォルトの名無しさん:2009/05/23(土) 19:01:03
ググレカスって書き込むやつの気持ちがわかった。

571 :デフォルトの名無しさん:2009/05/23(土) 19:21:38
ggrksじゃなくて頭悪いな

572 :561:2009/05/23(土) 19:52:24
ぐぐった結果「そんな事出来るサイトはない」って結果に達してるから
一応2chに聞いてるんだけどね

まぁそんなサイトないっていうか、Swingスレに
この質問自体がタブーって事ですか(笑)

573 :デフォルトの名無しさん:2009/05/24(日) 00:40:54
>>572
そういった背景込みで質問しないと聞かれたほうも分からないんじゃないかい

574 :デフォルトの名無しさん:2009/05/24(日) 00:44:42
馬鹿の相手をすると荒れるからほどほどにな

575 :デフォルトの名無しさん:2009/05/24(日) 09:09:41
ググって分からない事が、にちゃんで答え教えてもらえると(ry

576 :561:2009/05/24(日) 11:53:48
Swingスレの人だったら何か知ってるかなぁと。。

せっかくJWSがあるのにVectorとかに登録できないのはつらいですね〜



577 :デフォルトの名無しさん:2009/05/24(日) 16:55:06
SwingとJWSのどこに関係があるんだ

578 :564:2009/05/25(月) 16:38:31
>>567 Thx.
こんな構想があるんだね.JWS リリースしたころにこういうの
やってれば今頃もっとアプリケーション用途に Swing アプリケーションが
普及してたかもしれないのに…まぁ JavaOne の発表に期待.

579 :デフォルトの名無しさん:2009/06/23(火) 10:37:53
     
      ∧,,∧ ∧,,∧
   ∧,,(´-ω-)(-ω-`)∧,,∧
  ( ´-ω)旦o) (o旦o(ω-` )
  (_  o[(  ´-) (-`  )]o _)
  └'ー-(_   )][(   _)ー'┘
      'ー'^ー'   'ー'^ー'


580 :デフォルトの名無しさん:2009/06/25(木) 20:42:43
JTextPaneとかで使う
DefaultStyledDocument
のUNDO処理にバグみつけた
IMEがらみでデータが壊れるパターンがあるみたい

日本語入力はやっぱあんましSUNでもテストできてないんかねえ

581 :デフォルトの名無しさん:2009/06/25(木) 21:01:35
具体例を

582 :デフォルトの名無しさん:2009/06/26(金) 02:05:47
>>580
再現コードを作って、BugParadeに投稿しておくれ。

583 :デフォルトの名無しさん:2009/06/26(金) 07:33:01
まえにも一回投稿したことあるけど
投稿直後に自動メールが着たきり
なしのつぶてで
いつのまにかエントリーごと消えてた
英語が意味不明なので嵐あつかいされたのかもしれんけど
サンプルソースためしもしない

英語めんどくさいのでもう投稿したくない

584 :デフォルトの名無しさん:2009/06/26(金) 07:39:32
オレも過去に 3, 4 回出して全部スルーだったなー。
最小の再現ソースに JDK ソースの該当箇所まで出して指摘したのに。
英語云々じゃなくて、最新βのフィクス最優先で安定リリース版の些細なバグなんて後回しって雰囲気。

585 :デフォルトの名無しさん:2009/06/26(金) 15:42:48
バグは、とりあえず共有するのが大事。
ここに書いてSunのチームがみることもある。

586 :580:2009/06/26(金) 21:28:19
JDK付属のサンプルのNotepadでも再現するんだけどな

まあサンプルの方のバグでないことの証明の意味でも一応再現コード張る

ぶっちゃけJFrameにJTextPane貼り付けて
UNDO対応に最低限のコードを追加してるだけ。
一応実行環境はWindows(他の環境でどうなるかも興味ある)

再現手順

1、起動したら複数行適当に入力する
2、2行目以降の先頭文字から適当に選択状態にする
3、IMEをONにして選択状態の文字列を日本語の適当な文字列で置き換える
4、UNDO(ctrl+Z)を繰り返して日本語入れ替え前まで戻る。

 ⇒最初に選択した文字列が元の場所と前の行の末尾に2箇所出現する。
 (この状態でもう内部のデータが壊れているのでこのままいじりつづけると例外とかおきる事もある)


587 :580:2009/06/26(金) 21:35:27
import java.awt.event.*;
import javax.swing.*;
import javax.swing.undo.*;

public class UndoBug extends JFrame {
    public UndoBug() {
        this.setSize(200, 200);
        JTextPane jTextPane = new JTextPane();
        this.getContentPane().add(jTextPane);
        final UndoManager undoManager = new UndoManager();
        jTextPane.getDocument().addUndoableEditListener(undoManager);
        ActionMap actionMap = SwingUtilities.getUIActionMap(jTextPane);
        InputMap inputMap = SwingUtilities.getUIInputMap(jTextPane,
                JTextPane.WHEN_FOCUSED);


588 :580:2009/06/26(金) 21:37:06
        actionMap.put("UNDO", new AbstractAction() {
            public void actionPerformed(ActionEvent arg0) {
                if (undoManager.canUndo())
                    undoManager.undo();
            }
        });
        actionMap.put("REDO", new AbstractAction() {
            public void actionPerformed(ActionEvent arg0) {
                if (undoManager.canRedo())
                    undoManager.redo();
            }
        });
        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, ActionEvent.CTRL_MASK),
                "UNDO");
        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, ActionEvent.CTRL_MASK),
                "REDO");
    }

    public static void main(String[] args) {
        (new UndoBug()).setVisible(true);
    }

}

589 :デフォルトの名無しさん:2009/06/26(金) 23:51:31
Mac OS X 10.5.7 J2SE 5.0, Java SE 6.0でも同様です

590 :デフォルトの名無しさん:2009/06/27(土) 09:11:32
1byte前提で2byteで弄ったらそりゃ壊れて(ry
英語環境で再現出来なきゃ、あちらは確認できず消すしか無いと思う。

youtubeにでも動画うpして説明したら?

あとマクのはアポー謹製だから、アポーにバグ報告するべき。

591 :デフォルトの名無しさん:2009/06/27(土) 12:25:30
おまいの国の Java は SJIS で動いてんの?

592 :デフォルトの名無しさん:2009/06/27(土) 12:37:35
Java って全部 unicode だと思ってた人が通りますよ

593 :デフォルトの名無しさん:2009/06/27(土) 12:45:48
バカの All or Nothing 的発想

594 :デフォルトの名無しさん:2009/06/27(土) 13:37:32
>あとマクのはアポー謹製だから、アポーにバグ報告するべき。

マクは移植部分以外はSUNのソースを取り入れてるだけ(Swingも)
LinuxカーネルのバグをLinusのMLじゃなくてUbuntuとかLedHatにするようなもん

無駄とはいわないが迂遠すぐる

595 :デフォルトの名無しさん:2009/06/27(土) 13:40:40
>>590
お前のJavaのchar型は何ビットか言ってみろ

596 :デフォルトの名無しさん:2009/06/28(日) 03:02:01
javaのストリームはバイト処理なんだよ。馬鹿だなあ。
文字列使うときはマルチバイトで処理しないと。

597 :デフォルトの名無しさん:2009/06/28(日) 04:50:18
気になるな。ドキュメント周りが壊れてるのかな?

確かにUndo出来る回数を勘違いしてる????

598 :デフォルトの名無しさん:2009/06/28(日) 04:56:44
>>596
>587 のどこにストリームが使われているか言ってみろ


599 :デフォルトの名無しさん:2009/06/28(日) 05:11:11
>>597

UNDO回数を間違えているというより
DefaultStyledDocumentのデータ構造が壊れて
同じ部分文字列が二箇所にレンダリングされてしまっている

Default(以下略)の中の
GapContentの文字列そのものは重複していない

600 :580:2009/06/28(日) 05:13:11
名前欄入れ忘れた
もうすっかり朝だよ寝る

601 :デフォルトの名無しさん:2009/07/03(金) 23:49:02
JiglooやNetBeansのGUIエディタに、
JCalendarのコンポーネントをカスタムで追加する方法
および追加できるコンポーネントをご存知の方いませんか?

Kai Toedter氏が作成した jcalendar-1.3.3.jar
http://www.toedter.com/en/jcalendar/index.html
などよさげだったのですが、こういうのをポトペタで使えるようにしたいんです。



602 :デフォルトの名無しさん:2009/07/04(土) 13:18:46
>>601
ツール > パレット > Swing/AWTコンポーネント > JARから追加

603 :デフォルトの名無しさん:2009/07/04(土) 15:34:13
ボタンとかチェックとかの複合コンポーネントつくって、JListを使って配置しているのですが、レンダラーを実装してそのコンポーネントを描画することは出来ました。
しかし、そのコンポーネントが機能しない(ボタンのフォームだけで押せないとか)んですが、次はどうやればいいんでしょうか。
グリッドレイアウトを使うとリストっぽくレイアウト出来るのですが、JListとかの要素にしてしますとコンポネントじゃなくてレンダラーとなってしまい機能しないんでしょうか。

604 :デフォルトの名無しさん:2009/07/04(土) 15:55:20
ボタンにアクションリスナー配置しました?

605 :デフォルトの名無しさん:2009/07/04(土) 16:09:11
>>603
それは仕方ないなぁ
JListやJTableなんかだとあくまでレンダラで、実際にそこにコンポーネントは存在しないからね

606 :デフォルトの名無しさん:2009/07/04(土) 16:09:46
そういう意味じゃなくて、ボタンらしきフォームが描画されているだけで、「押す」「離す」などの描画にすらならないんですよ。
つまりそれはリストのレンダラーであって、それはボタンじゃないようなんですけど、リストの要素にするともうそれはコンポーネントとして扱うことは出来ないんでしょうか。
いま、コンポーネント開発してるところなんですけど無理ならあきらめます。

607 :デフォルトの名無しさん:2009/07/04(土) 16:15:20
まだAPIをよく読んでないんですけど、JTable,JTreeで名前を直接編集するときテキストフィールド・コンポネントになりますが、
インタフェイスの適当なモデルを実装して、それと同じようにすることは出来ないんでしょうか。
スイングはポトペタなら楽ですがコンポネントを新しく開発するのは複雑で骨が折れます。

608 :デフォルトの名無しさん:2009/07/04(土) 16:23:10
擬似的にはできるんじゃないかな?
JListならJList自身のマウスイベントとかを受け取って、それがJList中のどこのアイテムのどの辺の位置なのか、という変換を行って、レンダラにその変換したイベントを送ればできそうだけど。
もちろんその際レンダラからJList側に適切なリペイントの要求を出さないといけないだろうけどね。

609 :デフォルトの名無しさん:2009/07/04(土) 16:40:24
そういう複雑な処理を実装しないようにしたいんですけど、分かりませんでしたか?
そんなことして開発してるようじゃそのうち保守できなくなりますよ。

610 :デフォルトの名無しさん:2009/07/04(土) 16:45:52
>>609
じゃあ自分でコンポーネント作りなさいw

611 :デフォルトの名無しさん:2009/07/04(土) 17:38:02
保守考えたら、独自拡張はなるべく最小限に。
そうすると差別化出来ないけどなwww

612 :デフォルトの名無しさん:2009/07/04(土) 23:53:41
>>608
その方法でできるけどそれは設計間違えてるからなぁ。
レンダラの実装にComponent使ったSwingチームのミスだと思う。

613 :デフォルトの名無しさん:2009/07/06(月) 00:33:59
まぁサイズ取得とか必要な API 考えたら Component 流用が楽だったんだろうけど。
むしろセル内にコンポーネントを配置できるようにしてほしかった (が数千行とか行くと
リソース面で死ぬかな)。

614 :デフォルトの名無しさん:2009/07/06(月) 01:16:22
セルにコンポーネント貼るデモがJDKにあったような

615 :デフォルトの名無しさん:2009/07/06(月) 01:57:42
みんなJavaFXやろうぜ

616 :デフォルトの名無しさん:2009/07/06(月) 02:58:40
javafxは開発環境の要求が異様に高いけど、javafxcコンパイル自体はそんなに高い性能は必要ないと思うけど。
別にIDEとか使わなくてもjavafxはエディタのみで開発しやすいから、sdkとかコンパイラは、低PC(1G,500MB程度)でも動くようにしてほしい。
この辺りがどうにかならないなら、javaseの方でいいかなって思う。

617 :デフォルトの名無しさん:2009/07/06(月) 04:18:54
JavaFX とか、もう枯れた木から一生懸命実を落とそうと必死で揺さぶってるような感じ。

618 :デフォルトの名無しさん:2009/07/06(月) 05:15:58
>>614
セルにコンポーネントを貼り付けるんじゃなくて、セルにあるコンポーネントを普通に使いたいってことだろ。
日本語に不自由してるようだね。

619 :デフォルトの名無しさん:2009/07/06(月) 06:55:37
煽る事しかできん無能がよく言う

620 :デフォルトの名無しさん:2009/07/06(月) 08:54:12
>>619
なんか君、もう終わってるよね。

621 :デフォルトの名無しさん:2009/07/06(月) 09:00:24
結局、マルチプラットフォームでGUIは夢なのか・・・。

622 :デフォルトの名無しさん:2009/07/06(月) 09:13:44
tkの機構はどれも同じだけど、skinにこだわらなければいいと思うよ。
おじさんは多分skinにこだわりすぎてんだろうけど、cui, guiにはまったく関係ない。
そのうちjavafxとかリッチ何とかのskinが多くなるけど、硬いおじさんの石頭でもguiとはどういうものなのか分かってくるんじゃないの?w

623 :デフォルトの名無しさん:2009/07/06(月) 10:21:39
マクを切り捨てればなんとか。
ユニックス系とウィンドウズ系は融通効くよ。同じサンからの直接配布だし。

624 :デフォルトの名無しさん:2009/07/06(月) 14:10:34
なんかムダに煽る人が帰ってきたのか。

625 :デフォルトの名無しさん:2009/07/09(木) 20:25:37
デスクトップアプリでも、MVC みたいな構成にするもんなの?

626 :580:2009/07/09(木) 21:30:21
>>625
むしろMVCはSmalltalkのウィンドウデスクトップアプリ開発環境が発祥


627 :デフォルトの名無しさん:2009/07/09(木) 23:27:16
GUIフレームワークの名前だよ。


628 :デフォルトの名無しさん:2009/07/10(金) 01:41:10
誰かJavaにWindows.Forms移植しろ

629 :デフォルトの名無しさん:2009/07/10(金) 03:57:27
Formsってそんなにいいの?

630 :デフォルトの名無しさん:2009/07/10(金) 07:11:00
Swingでいいじゃん

631 :デフォルトの名無しさん:2009/07/10(金) 14:56:21
Swingって、ウィジェットの描画はもちろん、フォントレンダリングも自前だから、
一部のOpenTypeフォントが使えないよね。
Windows OSがレンダリングできるフォントであっても。


632 :デフォルトの名無しさん:2009/07/10(金) 21:12:04
winが描画できようがjavaが乗るほかのOSで出来るとは限らない。
それとOpenTypeの描画が実装されてないだけでモノは揃ってる。

633 :デフォルトの名無しさん:2009/07/11(土) 04:53:40
「OpenTypeの描画が実装されてないだけでモノは揃ってる。」について、もうちょっと解説をお願いしたい

634 :デフォルトの名無しさん:2009/07/11(土) 10:05:46
そもそもOTのフォント使いたいような理由とか有るのか?
そこまで使いたければ、自前でTT組み込んでビットマップ展開して表示すれば?
普通にwin32アプリ組んで、JNIで機能だけ頂いたほうが幸せになれそうだが。それなんてjava3d状態だが。

635 :デフォルトの名無しさん:2009/07/11(土) 10:28:19
日本語でおっけー

636 :デフォルトの名無しさん:2009/07/11(土) 14:44:05
>>634
>そもそもOTのフォント使いたいような理由とか有るのか?
それを決めるのは、アプリ開発者じやなくて、アプリ利用者。

>そこまで使いたければ、自前でTT組み込んでビットマップ展開して表示すれば?
>普通にwin32アプリ組んで、JNIで機能だけ頂いたほうが幸せになれそうだが。それなんてjava3d状態だが。
そんなことせずに、C#/WinForms使う。黙ってSwingを捨てる。
こういう不自由さや、不自由がいやなら自分でやれよ的な空気が、Java/Swingは(業務用アプリのような)
ユーザーに選択権の無いアプリにしか使えないって評価につながるんだよ。
使いたいアプリじゃなくて、使わされるアプリ。



637 :デフォルトの名無しさん:2009/07/11(土) 22:00:43
>>636
キチガイの言い分にまんまと乗って、それがswingの全てだと思ってるだろ?
お前にはjava自体向いてないかもな。

638 :デフォルトの名無しさん:2009/07/12(日) 16:53:27
Swingのアプリケーションを作る際のアーキテクチャについて教えてください。

画面が100とかあるようなものだと、
J2EE見たいな構成になってしまいます。

●アプリケーション全体の画面遷移を司るオブジェクト
●画面+メディエーター+その画面で利用するオブジェクトを入れたロケータ これを大体画面数分

皆さんどんな形になりますか?

それと、swing用にJSFみたいなフレームワークってあるのでしょうか?
画面の初期化処理と終了処理を共通化するようなフレームワークでもいいです。



639 :デフォルトの名無しさん:2009/07/12(日) 19:11:10
Swing Frameworkぐらいしかしらないな

640 :デフォルトの名無しさん:2009/07/12(日) 19:14:26
>>639
それってnetbeansについてるあれか?

641 :デフォルトの名無しさん:2009/07/13(月) 01:36:14
偉そうな質問者だな。
今の風潮から言えば、こういう奴は即効嫌われる。

642 :デフォルトの名無しさん:2009/07/13(月) 01:58:16
という偉そうな発言は即効嫌われるので気をつけましょう

643 :デフォルトの名無しさん:2009/07/13(月) 20:14:21
別人な件

644 :デフォルトの名無しさん:2009/07/14(火) 20:17:38
次からは質問は謙虚にだってさwww

645 :デフォルトの名無しさん:2009/07/15(水) 13:24:23
ttp://www.javadrive.jp/tutorial/springlayout/index4.html
このサンプルプログラムを実行したのですが、
実行例のようにはならずにボタンが引き延ばされずに全て左寄せで小さいままのボタンになってしまうのですが何が原因でしょうか?

646 :デフォルトの名無しさん:2009/07/15(水) 13:58:43
javadrive.jpの中の人に直接聞けばよくね?
多分、中の人も知らないだろうから、もっと内容を良く出来るかもよ。

647 :デフォルトの名無しさん:2009/07/16(木) 05:11:23
SpringLayoutTest3.javaをコンパイルして動かしてみたけど問題ないようだ。
javaのバージョンはなに使ってるの?
こっちは、1.6.0_13-b03 WindowsXP


648 :デフォルトの名無しさん:2009/07/16(木) 10:06:19
マカとか、sunの直接配布じゃない環境ってだけだったりして。
配布元のアポーに文句言えば?

649 :645:2009/07/16(木) 12:08:14
どうやらJavaのバージョンの問題だったようです。
1.5.0_18から1.6.0_14に変えたら動作例の通りになりました。

650 :デフォルトの名無しさん:2009/07/22(水) 07:42:17
誰かJAppletでルックアンドフィールを変える方法しらない?
substance使いたいんだけど、JAppletのinit(),start()周辺の初期化が
よくわからない

651 :デフォルトの名無しさん:2009/07/22(水) 12:37:43
JApplet でも standalone でも
やりかたは一緒だと思うけど


652 :デフォルトの名無しさん:2009/07/25(土) 12:46:15
Java版SPSSって遅すぎない?
長時間ウインドウ最小化して、いざ再開すると10秒くらい操作受け付けないし、画面真っ白なんだけど。
MS製品もそういうのあるけど、Javaだと長時間でなくとも普段から切り替えは遅い。
これってSwingの仕様なのかな。それともJavaの仕様なの?


653 :デフォルトの名無しさん:2009/07/25(土) 19:36:27
spssの推奨動作環境よく見ろ。

654 :デフォルトの名無しさん:2009/07/25(土) 19:57:09
>>652
OSの仕様。


655 :デフォルトの名無しさん:2009/07/26(日) 02:30:20
ビューアは確かに切り替えが鈍いね。
0.5秒くらい真っ青になるのが気になる。
SPSSのグラフなんかは全て画像ファイルに変換して出力してるのでグラフィック関係の問題ではなさそうだな。
SWINGやOSあたりを疑ってもいいかもね。

656 :デフォルトの名無しさん:2009/07/26(日) 15:54:33
AWTのほうがいいの?

657 :デフォルトの名無しさん:2009/07/26(日) 15:54:55
何と比べて?

658 :デフォルトの名無しさん:2009/07/27(月) 01:10:38
swingってページによってはawtより高速って書いてあるよね。
どっちが本当なの?

659 :デフォルトの名無しさん:2009/07/27(月) 01:25:35
殆どの場合で、awtより高速なんじゃないか?
まぁ、なによりawtだと出来ることが限定されて窮屈だよね。

660 :デフォルトの名無しさん:2009/07/27(月) 18:12:35
swingもawtで実装されてるのだが。

661 :デフォルトの名無しさん:2009/07/27(月) 23:35:34
ドラッグアンドドロップなんかはSwingだと簡単に実装できて
awtで同じようなことやろうとすると面倒で人によっては遅いプログラムになってしまう。
結果としてSwingのほうが速いと言える。

こんな認識でいいの?

662 :デフォルトの名無しさん:2009/07/28(火) 04:36:11
>>660
ここでは、AWTはAWT重量コンポーネントのことだろ。

663 :デフォルトの名無しさん:2009/07/28(火) 06:28:23
むしろswingのほうが出来る事が限定されて、awtで好きに組めば自由に出来るけどな。swingを越える様なのも作れる余地があるし。
包丁とサバイバルナイフぐらい似て非なるもの。

664 :デフォルトの名無しさん:2009/07/28(火) 16:30:33
やったことも無いのによく言うよコイツw

665 :デフォルトの名無しさん:2009/07/29(水) 02:05:19
確かにAwt上で、Swingのような別の軽量コンポーネント実装も作ることは可能だろう。
ただ・・・・・詭弁だな。
普通は、>>662 の認識でいいはず。

666 :デフォルトの名無しさん:2009/07/29(水) 09:16:48
くだらん
年よりは早く死ねよ

667 :デフォルトの名無しさん:2009/07/31(金) 08:07:30
おまいもな

668 :デフォルトの名無しさん:2009/07/31(金) 09:39:12
夏休みがよくわかるレス数推移だな

669 :デフォルトの名無しさん:2009/07/31(金) 14:40:56
ああもうそんな季節なのか…

670 :デフォルトの名無しさん:2009/08/11(火) 08:54:30
Javaの初心者向け参考書をほぼ読み終えましたが、GUIプログラムの方法として
AWTとSwingが出てきました。
どちらを覚えればいいのでしょうか?
(スレタイに「低速」とあるので、Swingは遅いんでしょうか…)

また、この2つ以外にも方法はあるんでしょうか?
もっといいのがあれば教えてください。

よろしくお願いします。

671 :デフォルトの名無しさん:2009/08/11(火) 10:22:33
基本的にはSwingだけど、SwingはAWTの上に載ってるのでAWTもある程度必要ではある
もっといいかどうかは知らないが、SWTというのもある

672 :デフォルトの名無しさん:2009/08/11(火) 10:33:15
V2C重いな
やっぱりJaneに戻すか

673 :デフォルトの名無しさん:2009/08/11(火) 12:27:57
>>671
SWTというのは知らなかったので、調べてみました。
それぞれ一長一短があるんですね。

http://oshiete1.goo.ne.jp/qa2962803.html

AWTとSwingはどの環境でも使えるということなので、
やっぱりこの2つを使いこなせるようにしたいと思います。

ありがとうございました!

674 :デフォルトの名無しさん:2009/08/11(火) 19:21:27
てかAWTもここだからスレタイに入れようって話になってせっかく入れたのに
このスレになって勝手にスレタイから消されてAWTと入ってるSwingスレもテンプレに入れてないのはなんで?
>>1の独断?

675 :デフォルトの名無しさん:2009/08/11(火) 20:25:52
そんなに>>1を責めないで!

676 :デフォルトの名無しさん:2009/08/12(水) 00:21:56
>>670
SWTを今使う必要はほとんどないと思う。
SwingとAWTを比較する場合は、コンポーネントのことだと思うが、AWTコンポーネントを今使う必要はまったくない。
SwingにしろAWTにしろ、NetBeansでいろいろコンポーネント配置していじくればいい。

677 :デフォルトの名無しさん:2009/08/12(水) 06:42:41
>>670
Swingが遅いというのはほぼ「神話」レベルの話。
Swing+java2Dでもこれくらいはできる
ttp://jdrafter.com/
オープンソースでNetBeans製だから参考にするといい。

678 :デフォルトの名無しさん:2009/08/12(水) 15:07:51
NetBeansは2日ほど前に入れたばかりですが、
古いパソコンだと激重で使い物にならないので
参考書の説明に従ってテキストエディタ+コマンドプロンプトでやってます。
NetBeansは必須でしょうか?

昔Borland C++ Builderというのを使ったことがあって、GUIをエディタで
配置してイベントを手入力するだけでソフトを作れたので便利でしたが、
NetBeansを使うメリットもそれと同じでしょうか?

679 :デフォルトの名無しさん:2009/08/12(水) 17:57:26
>>678
必須ではないが..
GUIの画面デザインでコンポーネントをダブルクリックすれば
イベントハンドラを自動で作成してくれるから、処理を記述する
だけで簡単なモノは作れる。
そのほか、"."でクラスのメゾッドやフィールドの候補の表示や
自動的にインポートを記述してくれたり、クラス内のメゾッドの
名称変更すれば、参照している全てのソースの名称を変えてくれ
たり、コンパイル前にエラーを指摘してくれたりするし、デバッガ
も付いてるし...あげればきりがない。
ま、エディタ+コマンドプロンプトの環境から比べれば、開発効率は
移植ゴテとショベルカー位の差はあるな。
てか、激重ってどんなパソコン使ってんだ



680 :デフォルトの名無しさん:2009/08/12(水) 18:18:23
じゃ噂のエクリプスとどこが大きく違うんですか?

681 :デフォルトの名無しさん:2009/08/12(水) 18:30:19
>>679
ありがとうございます。
そんなに便利ならぜひ使いたいですね…。

パソコンはメインのマシンが壊れたので、古いのを使ってます。
Pentium3 866GHz、メモリ256MBで、HDDがカリカリ鳴ってアクセスに時間がかかるミニノートです ><

682 :デフォルトの名無しさん:2009/08/12(水) 18:36:37
IBMから来たかSunから来たか
使えば分かる

どっちもCPU/メモリ食いだし、どんなに便利でも使いたくないって人が少なくないのも事実
便利さが分かる前に操作がややこしくて諦める人もいる

683 :デフォルトの名無しさん:2009/08/12(水) 18:59:28
>>681
イタいな。平成ひとケタのテクノロジーつーか886GHzてスパコンか?

684 :614デフォルトの名無しさん:2009/08/12(水) 19:51:53
>>680
環境が整えばどっちもどっちかな。
でも、エクリプスでNetBeans並の環境を整えたければ、いくつかプラグインを入れる必要があるし、
プラグインも玉石混交でカオス状態。NetBeansには、最初から必要な環境が整ってるから、これ
から始める初心者にはおススメかな。
GUIはNetBeansで、その他はエクリプスという人もいるけど。

685 :デフォルトの名無しさん:2009/08/12(水) 21:50:31
>>681
残念だが、Javaで開発するにゃメモリが絶望的に足り無さ過ぎる。
最低でも1GBは欲しい。

686 :デフォルトの名無しさん:2009/08/13(木) 00:01:37
JavaのIDEは起動時のCPU消費が半端ない

687 :デフォルトの名無しさん:2009/08/16(日) 00:37:33
えくりぷすの手打ちで作った自前アプリを、ネットビーンズで書き直してみたい気もするが面倒だぜ

688 :デフォルトの名無しさん:2009/08/16(日) 09:39:20
JComponentやJPanelを動的生成して配置しまくるようなアプリを作ってるので
NetBeansの利点を見出せず結局キーバインドやリファクタリングが使いやすいeclipseで書いてる。

689 :デフォルトの名無しさん:2009/08/16(日) 21:03:31
うp

690 :デフォルトの名無しさん:2009/08/17(月) 12:09:23
動的生成はメモリ喰いそうだ。
ウィンドウ数の制限とか管理してるの?

691 :デフォルトの名無しさん:2009/08/17(月) 12:47:26
増えすぎたらOutOfMemoryで落ちるだけだから気にしなくてOK

692 :デフォルトの名無しさん:2009/08/17(月) 15:05:02
コンストラクタに実処理を書かないようにして、インスタンスを使いまわす。

693 :デフォルトの名無しさん:2009/08/17(月) 23:28:05
大富豪的プログラミングか。これだからPGっていつもバグばっかで屑だなって地位が向上しない。

694 :デフォルトの名無しさん:2009/08/18(火) 05:11:55
NetBeansとEclipseで1つのプロジェクトを両方からいじってる。
これが便利だなー。NetBeansっていつからかEclipseのプロジェクトを読み込むことができるようになったしね。
両方開いたままで編集しても、特に問題は起きないよ。

695 :デフォルトの名無しさん:2009/08/21(金) 19:52:45
>>690
それは小細工。
ローカルチューニングは、よほど上手くないと害の方が大きい。

富豪的プログラミングは、リソース気にしないでまず書いてみて
そこから直していくというスタイル。
はじめから細かいこときにすんなって、教えだよ。

どんだけ気を使ってバブルソート書いたって、
メモリ使いまくるマージソートの方が、まだ何とかできる余地があるってこと。

696 :デフォルトの名無しさん:2009/08/22(土) 00:21:17
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   細けぇ事はいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /

697 :デフォルトの名無しさん:2009/08/22(土) 23:35:18
糞PGが居る限りメモリがどれだけ有っても足りないな。

698 :デフォルトの名無しさん:2009/08/22(土) 23:37:06
糞じゃないPGを雇えばいいのさ

699 :デフォルトの名無しさん:2009/08/22(土) 23:52:08
バブルソート書くくらいならコムソート書いてやる!

700 :デフォルトの名無しさん:2009/08/22(土) 23:58:02
漢ならボゴソート

701 :デフォルトの名無しさん:2009/08/23(日) 00:30:10
ソートといえばJDK7で配列とコレクションのソート実装が入れ替わった。
まぁSwingには関係ないんだけど。

702 :デフォルトの名無しさん:2009/08/23(日) 18:24:31
日本人ならクレオソート

703 :デフォルトの名無しさん:2009/08/23(日) 20:07:22
欧米人はどうやって防虫してんのかね

704 :デフォルトの名無しさん:2009/08/23(日) 23:29:15
結構な大きさの画像を画面にガンガン出すビューアみたいなの書いてるんだが、

メモリに画像を全部置いておくとOutOfMemoryになるし、
SoftReferenceとかで画像を持っておいて参照切れたときに退避させてた
一時ファイルから読み込むってロジックにすると重くて軽快さゼロ。

こういうのってみんなどうやって対処してるの?
俺Webアプリ畑でやってきたからこういうときの
クライアント側の処理がさっぱり分からん。

705 :デフォルトの名無しさん:2009/08/24(月) 01:31:44
想定する必須スペックと扱う画像の形式と大きさをw*hで
あとどのAPI使ってんのかも

706 :デフォルトの名無しさん:2009/08/24(月) 01:35:05
>>704
アクセスパターン依存だから何とも言えんが、LRUなキャッシュを(どっかから探してくる|自分で実装する)とか、アクセスパターンの局所性を利用して、次にアクセスされる可能性のあるあたりをバックグラウンドでプリフェッチしておくとか。

707 :デフォルトの名無しさん:2009/08/24(月) 04:13:48
>>705
想定する必須スペック:PenM1.6 メモリ1G程度
イメージをロードするAPI:ImageIO
画像形式:PNG
画像サイズ:640x480〜1920x1200ぐらい
画像数:100枚程度

こんな感じかな。

>>706
画像は順序があって、現在見ている画像の周辺は
サムネイルとして表示さるのでアクセスされる可能性が高いと思う。
先頭と最後もなんとなくアクセスされる可能性が高そう。
けど、アクセスパターンを分析してそれに最適化した実装をするのはまだ段階として早い気がする。

けど、LRUキャッシュは有効な気がしてきたんでとりあえずそれでパフォーマンス見てみます。ありがとう。

708 :デフォルトの名無しさん:2009/08/24(月) 04:47:11
速度追求するとメモリありったけ喰うのが普通。
32ビット階調なら特にメモリ喰う。

709 :デフォルトの名無しさん:2009/08/24(月) 09:45:13
俺も画像読み込むの作ってたなと思ってAPIを調べてみた

jpg JPEGImageDecoder
bmp ImageIO
GIF ImageIcon
上記以外 ImageIcon → ImageIconで読み込めなかったらImageIO

最後のはなんでこんな処理にしたんだ

710 :デフォルトの名無しさん:2009/08/24(月) 13:49:06
最大で1920*1200の画像100枚てどんだけメモリ食うか分かってる?
IIOは自分で制御しなかったらメモリに全部置いたような。

>結構な大きさの画像を画面にガンガン出す
PenMのmem 1Gにこれは無理。遅くなって当然。
>>706のやり方がいいんだろうねぇ

あと1920*1200はスケーリングせずに表示するの?

>>706
LRUじゃなくてLFUじゃね?

711 :デフォルトの名無しさん:2009/08/24(月) 13:55:09
画像の読み込みはToolkitの方がかなり速いよ。
正直言ってAPIはダサいけどね。
俺はJPEG,GIF,PNGはToolkitで読み込んで、
それ以外はImage IO使ってる。


712 :デフォルトの名無しさん:2009/08/24(月) 15:15:35
ImageIconは内部でToolkit使ってるから、
>>709だとGIF,PNGはToolkit
jpgが将来消えても不思議じゃないとかwebに書かれてるJPEGImageDecoder
他はToolkitを試して無理ならImageIO

JPEGImageDecoderじゃないと色が化けるファイルがあってな…

713 :デフォルトの名無しさん:2009/08/29(土) 16:32:04
swingって遅いって言うけどさ、元になったawtは速いわけ?

714 :デフォルトの名無しさん:2009/08/31(月) 06:27:48
awtコンポーネントは、ネイティブのコンポーネントをそのまま使うから動作は速かった。
当時は最適化の技術も低く、DirectDrawの利用も積極的ではなく、マシンのメモリも少なかったので、Swingは重かった。
ただしAWTコンポーネントはメモリやリソースを喰うので、最初の表示は重いかもしれない。
今は、Swingでも実用に十分耐えるレベル。

715 :デフォルトの名無しさん:2009/08/31(月) 08:33:50
>>713-714
逆に、描画サブシステムの高速化で、Windowsにしろ、Linuxにしろ、Macにしろ、プラットフォームネイティブの
ウィンドウシステムのコンポーネント使う方が、ウィンドウシステムとのやりとりが重くなって
きてる。Windowsでいうと、SendMessage/PostMessage。
その証拠に、OS(Windows/Mac/Linux)、Webブラウザ(IE/Safari/Firefox)問わず、ウィジェットを
大量かつ頻繁に生成し、レイアウトも変わるものは、軽量ウィジェットをつかってる。

つまり、現時点では、ネイティブのコンポーネント使うよりも、軽量ウィジェットの方が、動作を高速化する余地がある。

716 :デフォルトの名無しさん:2009/08/31(月) 14:47:58
windowsL&FでJTableのフォーカスセルが点線で表示されていますが、
実線等に変更するにはどうすればよいでしょうか?

717 :デフォルトの名無しさん:2009/08/31(月) 18:42:52
>>715
軽量かどうかに関係なくコンポーネントをたくさんポトペタすりゃ遅くなるから、コンポネントの自作が進むのはあたりまえじゃないの?
どうせコンポネント開発すらしたこと無いのに知識を披露したいだけなんでしょ?w

718 :デフォルトの名無しさん:2009/08/31(月) 22:14:35
>>717
>>715
>軽量かどうかに関係なくコンポーネントをたくさんポトペタすりゃ遅くなるから、コンポネントの自作が進むのはあたりまえじゃないの?

まー、数の問題じゃないんだな。これが。
コンポーネント1個でも、ウィンドウシステムとのやりとりが増えると、耐え難いほどパフォーマンスが落ちる。
やってみればわかるよ。

719 :デフォルトの名無しさん:2009/08/31(月) 22:20:48
それ単におまえの設計が下手くそなのを聞きかじりの知識で説明してるだけじゃ

720 :デフォルトの名無しさん:2009/08/31(月) 22:27:41
Swingの描画ぶっこわしといてSwingおせーと言ってる奴と一緒か

721 :デフォルトの名無しさん:2009/08/31(月) 22:42:34
>>718
それって、ネイティブは遅い、JVM(java ツールキット)は速いってことでしょ。
その速い遅いって根拠が自分が作ったAWT,SWINGアプリを根拠として遅いって言うなら君が無知なだけ。
最近awtが速くなったのはネイティブ(directxとか)を使うようになったからなのに、まるで根拠も無くネイティブ(ツールキット)って遅いって勘違いしてるでしょ。
そんなに知識を披露したいなら、AWTイベントキューの話とかできるの?

722 :デフォルトの名無しさん:2009/08/31(月) 23:27:42
>>715 が言ってるのは java.awt.peer が遅いってことだよね。
そんなに間違ってはいないと思う。
確信はない。


723 :デフォルトの名無しさん:2009/09/01(火) 02:25:28
いやpeerが遅いわけじゃない。二重に被せてるから遅い。
それに今はマシンスペック上がったんで気にすることじゃない。
最近だとSwingのパイプラインの効率が悪くて遅かったが5,6辺りで改善されたからやっぱり今は遅くない。

724 :デフォルトの名無しさん:2009/09/01(火) 12:58:32
>>721
> 最近awtが速くなったのはネイティブ(directxとか)を使うようになったからなのに、
> まるで根拠も無くネイティブ(ツールキット)って遅いって勘違いしてる

この発言はそうとう恥ずかしい

725 :デフォルトの名無しさん:2009/09/01(火) 15:12:11
>>724
恥ずかしいやつ登場ww

726 :デフォルトの名無しさん:2009/09/01(火) 16:18:13
>>724
宿題終わった?w

727 :デフォルトの名無しさん:2009/09/01(火) 16:19:55
>>724の意味が分からないんだが誰か訳せるやついる?

728 :デフォルトの名無しさん:2009/09/01(火) 16:40:16
多分見えない敵と戦ってんじゃないですか?選挙はもうとっくに終わったのに立候補したつもりでまだ戦ってるんでしょう…

729 :デフォルトの名無しさん:2009/09/01(火) 17:20:32
>>728
俺はお前が何と戦っているのか(ry

730 :デフォルトの名無しさん:2009/09/01(火) 17:46:42
森さんは最後の最後で誰と闘ってるかわかったみたいですよ。

731 :デフォルトの名無しさん:2009/09/01(火) 17:55:23
>>724
きみって馬鹿?w

732 :デフォルトの名無しさん:2009/09/01(火) 18:04:13
ここ最近のレスの中で>>731が一番馬鹿にみえる

733 :デフォルトの名無しさん:2009/09/01(火) 18:15:17
>>732
今日は誰と戦ったんですか?

734 :デフォルトの名無しさん:2009/09/01(火) 19:00:56
>732
隊長〜
おつかれ−っす^^

735 :デフォルトの名無しさん:2009/09/01(火) 21:34:24
何この流れ

736 :デフォルトの名無しさん:2009/09/02(水) 03:55:56
顔を真っ赤にして自演するアホがいる。

737 :デフォルトの名無しさん:2009/09/02(水) 04:03:21
Java系スレの住人は基本的に行儀がいいので、ひとつの発言に対して内容のない煽りが複数つくことは少ない。
724や732に煽りを入れたくなるのは、ひとりしか考えられないしな。
自演と見ていい。
ひとり変なやつが来て変な流れになっているだけだな。

738 :デフォルトの名無しさん:2009/09/02(水) 04:32:36
>>737
自己紹介乙

739 :デフォルトの名無しさん:2009/09/02(水) 12:24:43
文体をよくみたら、アルゴ君がきてたのか。

740 :デフォルトの名無しさん:2009/09/02(水) 17:48:42
>>739
アルゴくんおつ

741 :デフォルトの名無しさん:2009/09/03(木) 21:44:12
>>721
全く的外れ。
ネイティブを使うと遅くなるのは、描画が原因じゃなくて、メッセージパッシングの性能差だから。
メソッド呼び出しに関してはJavaはCよりも速い。比較対象がウィンドウとのメッセージパッシングになれば、
実行コスト差は2桁以上。
レンダリングが高速化したんで、メッセージパッシングがボトルネックになっている、
それを克服する解として軽量ウィジェットがある。



742 :デフォルトの名無しさん:2009/09/09(水) 18:49:40
>>741
そんな知識、どこで入手できるの?
javaに対する学習をどこでどうやってするのか初学者のぼくに教えてください。


743 :デフォルトの名無しさん:2009/09/10(木) 19:50:38
メッセージパッシングというか、JNIでのネイティブAPI呼び出しのコストじゃないの?

ヘビーウェイトコンポネント(ネイティブコンポーネント)だと
OS(というかウィンドウシステム)ネイティブののイベントを処理する必要があって
それがコストが高いんだと思う。

744 :デフォルトの名無しさん:2009/09/10(木) 20:38:01
drawLineとかfillRectとかでコンポーネント描画するときのJNIのコストは低いの?

745 :デフォルトの名無しさん:2009/09/11(金) 00:24:16
JNI のコストが〜とか言ってる奴は Swing で 3D ゲームでも作ってんのか。

746 :デフォルトの名無しさん:2009/09/11(金) 11:40:16
>>745
ん?いや、別に。

ただ、自分では使って無くても
awtは、ライブラリ内でネイティブAPIとのつなぎの部分が必ずあるから
そこの呼び出しのことを言っている。

747 :デフォルトの名無しさん:2009/09/11(金) 13:28:14
>>745
joglだとJNIのコストがもろに効いてくる場合あった。

748 :デフォルトの名無しさん:2009/09/11(金) 13:48:14
ディスプレイリスト活用すればJNI減らせそうな気がする

749 :デフォルトの名無しさん:2009/09/11(金) 13:50:14
eclipse3.5上のフリーなSWINGベースのUI構築ツールは無いかな。
VEとかなくなったんだね。

750 :デフォルトの名無しさん:2009/09/11(金) 14:46:21
>>749
これか?
http://journal.mycom.co.jp/column/ide/060/index.html

751 :デフォルトの名無しさん:2009/09/11(金) 16:10:32
>>750
凄く良さそうですね。
早速インストールしましたが、軽くていい感じです。

752 :デフォルトの名無しさん:2009/09/12(土) 00:50:55
>>749
750も悪かないけどNetBeansと両刀使いのほうが快適

753 :デフォルトの名無しさん:2009/09/12(土) 02:05:25
EclipseってNetBeansより軽い?

754 :デフォルトの名無しさん:2009/09/13(日) 03:35:24
まあjni自体遅いからな。
ハードアクセラ効くまでの処理が遅い。
結局速度求めるなら、cで直接directx叩けって成る。

755 :デフォルトの名無しさん:2009/09/13(日) 07:29:54
>ハードアクセラ効くまでの処理が遅い。
は?

756 :デフォルトの名無しさん:2009/09/13(日) 22:25:34
>>754
それ、>>753への回答?

757 :デフォルトの名無しさん:2009/09/15(火) 15:52:11
すみません、教えてください。

@ITで質問したんですけど、回答がつかなくて。。。
http://ap.atmarkit.co.jp/bbs/core/fjava/16336

現象
・メインパネルクラスを実行した際にJComboFieldのポップアップウィンドウが消えない。
・フレームをリサイズすると消えます。
・ポップアップウィンドウが残っている間、他のコンボボックスでポップアップが出なくなります。
・メインパネルクラス改だと発生しない
・孫パネルクラスのJComboBoxを編集不可(setEditable(false))にすると発生しない


ソースは次レス

758 :757:2009/09/15(火) 15:54:35

// メインパネルクラス
public class MainPanel extends JPanel {
MainPanel() {
JPanel pane = new JPanel();
pane.setLayout(new GridBagLayout());

GridBagConstraints constraints = new GridBagConstraints();
for (int i=0; i<16; i++) {
constraints.gridx = i % 4;
constraints.gridy = i / 4;

pane.add(new ChildPanel(), constraints);
}

ScrollPane scroll = new ScrollPane();
scroll.add(pane);

setLayout(new BorderLayout());
add(scroll, BorderLayout.CENTER);
}

public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setContentPane(new MainPanel());
frame.setVisible(true);
}
}

まだ続く

759 :デフォルトの名無しさん:2009/09/15(火) 15:56:21
// 子パネルクラス
public class ChildPanel extends JPanel {
ChildPanel() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
for (int i=0; i<5; i++) {
add(new GrandChildPanel());
}
}
}

// 孫パネルクラス
public class GrandChildPanel extends JPanel {
GrandChildPanel() {
JComboBox combo1 = new JComboBox(new String[] {"1111", "22222", "3333"});
JComboBox combo2 = new JComboBox(new String[] {"1111", "22222", "3333"});
combo1.setEditable(true);
combo2.setEditable(true);

setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();

constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight= 1;
constraints.weightx = 0.0d;
constraints.weighty = 0.0d;

constraints.gridx = 0; add(combo1, constraints);
constraints.gridx = 1; add(combo2, constraints);
}
}
まだ続く

760 :デフォルトの名無しさん:2009/09/15(火) 15:58:08
// メインパネルクラス改
public class MainPanel2 extends JPanel {
MainPanel2() {
setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
for (int i=0; i<16; i++) {
constraints.gridx = i % 4;
constraints.gridy = i / 4;

add(new ChildPanel(), constraints);
}
}

public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);

ScrollPane scroll = new ScrollPane();
scroll.add(new MainPanel2());

frame.setContentPane(scroll);
frame.setVisible(true);
}
}
ここまで、
よろしくお願いしまう。

761 :デフォルトの名無しさん:2009/09/15(火) 16:12:54
>>757
ちらっと見た限りではその現象が起きる正確な原因はよく判らないけれど、
AWT部品とSwing部品を混ぜるのはやめてSwingに統一した方がよい。

> ScrollPane scroll = new ScrollPane();
> scroll.add(pane);
↑ここを↓こうする
JScrollPane scroll = new JScrollPane(pane);

762 :757:2009/09/15(火) 16:39:40
>>761先生

ありがとうございます。
直りました。

指摘されるまでAWTが混ざってるとは思っておりませんでした。
AWTとSwingを混ぜるな危険って話は知っておりましたが、
まさか自分がそこに引っかかるとは思いませんでした。

本当にありがとうございました。


763 :デフォルトの名無しさん:2009/09/15(火) 19:25:40
javaの相談/質問すれでswingスレに行けと言われたんだけど
v2cってどうやってあんなに速くレスを描写してんの?
簡単な計算を組み合わせると、V2Cのようにアホみたいに速くなるって言われた

764 :デフォルトの名無しさん:2009/09/15(火) 19:31:41
もう諦めろよお前には無理だ、と言いたいが・・・
続けるつもりなら今の状況を説明
JEditorPaneはやめたんだっけ?

765 :デフォルトの名無しさん:2009/09/15(火) 19:39:02
>>764
俺は簡単に諦めないよ
別にいいじゃん、言われた通りこっちに来ただけだし
気にくわなかったら、あぼーんにすればいいだけ

766 :デフォルトの名無しさん:2009/09/15(火) 20:06:09
じゃああぼーんしやすいように名前入れてくれ

767 :abc:2009/09/15(火) 20:11:38
>>766
適当に、abcとでも入れとくわ

768 :デフォルトの名無しさん:2009/09/15(火) 22:06:32
>>763
まじめに自力でレス描画してるんじゃない?
選択の挙動がへんだったりするから、JEditorPaneではなさそうだね。

769 :abc:2009/09/15(火) 22:26:29
>>768
>まじめに自力でレス描画してるんじゃない?
その通り、public void paintComponent()をオーバライドして
Graphics.drawString()を使って文字を出力している
他にもっと良い方法があったら、この方法にはこだわらないつもり

>選択の挙動がへんだったりするから、JEditorPaneではなさそうだね。
・V2CはJPanel + drawString()を使っていると教えてもらったから
・JEditorPaneは遅いとの事
http://と入れないとクリックした時にURL.toString()(忘れた)が文句を言ってくる
・HTMLを作るのが地味にコストが

770 :デフォルトの名無しさん:2009/09/16(水) 00:11:50
7年前のノートパソコンでも、GlyphVectorをみっちり詰めこんだコンポーネントが
ヌルヌルスクロールするんだな。

771 :デフォルトの名無しさん:2009/09/16(水) 00:43:14
つかV2Cをjavapしてニーモニック読めよ

772 :デフォルトの名無しさん:2009/09/16(水) 05:40:36
JWebPaneがリリースされてくれれば楽なのに

773 :デフォルトの名無しさん:2009/09/16(水) 12:12:35
Graphics2D#drawGlyphVector()が文字列描画最速とAPI仕様に書いてあるね。
実装要求なんだかSunJREの実装自慢なんだかはっきりしないとこが、
あいかわらずもんにょりなんだが…

なぜこんなオーバーヘッドのかかりそうな方法がdrawString()より速いのか、
JNIとかAWTとかDirectXとかパイプラインとかいつもの調子で解説頼む。

774 :デフォルトの名無しさん:2009/09/16(水) 12:19:08
drawStringは、合成文字とか双方向並び替えとかカーニングとか色々複雑な処理してから描画しないといかんのでは?
GlyphVectorはそれら全部処理し終えたフォントグリフの並びで、あとは描画するだけなのでは?
たぶん

775 :デフォルトの名無しさん:2009/09/16(水) 13:38:47
つまり描画自体がボトルネックになってる場合は変わらない、と。

776 :デフォルトの名無しさん:2009/09/16(水) 16:18:15
グリフを直接描画するのと文字列を描画するのとじゃグリフのが早い気がするがソース見てないからわからん

777 :デフォルトの名無しさん:2009/09/16(水) 17:56:18
おもしろそうなんでスレ表示コンポーネントを書いてみた。
パスは「swing」
http://uproda.2ch-library.com/lib169848.zip.shtml

パフォーマンス検証のためだけに書いたから仕上げる気がないんで、
コードがかなりいい加減なのは目をつぶって。
クリッピング処理をきっちりやれば十分なパフォーマンスが出た。
最初、レスのListに対してループを回して、レスがクリッピング領域とかぶるなら
描画するという作りにしたんだけど、さすがに描画するたびに1000回ループを回したら
ちょっと重かった。
バイナリーサーチでどのレスを描画するか最初に決めてから描画するようにしたら
ちょっと軽くなった。

描画するかどうかの判定はレス毎にしてたんだけど、1ピクセルスクロールするたびに
レス全体を描画するのは無駄なんで、1行毎に判定するようにしたらかなり
実用的な速度になった。

ここからV2C並の機能を持たせるとしたらどれだけのコードを書かないといけないやら。
V2Cの作者さんは偉いね。

778 :abc:2009/09/16(水) 19:32:12
>>772
JWebPageが実装されれば便利だけど、さすがにまだまだ先だよね
>>777
参考になります。ありがとう

ttp://codezine.jp/article/detail/2598?p=2
このページではちゃんと、文字が表示されているので
JDKのソースが参考になるかもと思う今日この頃




779 :abc:2009/09/19(土) 11:41:01
1行にどのくらい文字が入るかってどうやって計算すればいいんですかね?
これで、計算しているのですがJPanelのサイズと文字によっては
ちゃんと表示されない可能性があるのでorz

final String str = "1 名前:デフォルトの名無しさん []: 2008/11/21(金) 11:24:21";
//表示するのに何行必要か
int row = fontMetrics.stringWidth(str) / this.getPreferredSize().width;
//表示するのにどのくらいのサイズが必要か
temp = row * * fontMetrics.getHeight();

780 :デフォルトの名無しさん:2009/09/19(土) 11:49:44
一文字ずつ連結してコンポーネントの幅を超えないか評価。

781 :デフォルトの名無しさん:2009/09/19(土) 13:55:42
LineBreakMeasurerにおかませでおk

782 :デフォルトの名無しさん:2009/09/19(土) 14:25:24
日本語Swingだと、LineBreakMeasure使っても禁則がはみ出るときは
はみ出たような気がしたが、最近は改善されてるかも知れない。
長音「ー」を500回書いた文字列とかで試してみて。

毎回文字列生成し直して試行錯誤するのが嫌な短気な人は、
GlyphVector#getGlyphPositions()が速い。

783 :デフォルトの名無しさん:2009/09/19(土) 15:43:28
分割の仕方が気に入らないのなら、独自のBreakIteratorを実装して渡せばいいんでない?

784 :デフォルトの名無しさん:2009/09/19(土) 15:46:18
今は LineBreakMeasurer なんてのがあるんだ。
行の折り返し文字数決定なんて JDK1.0-1.1 のプアなコンポーネント時代に実装したきりだな。

785 :abc:2009/09/19(土) 17:35:13
>>782
>日本語Swingだと、LineBreakMeasure使っても禁則がはみ出るときは
>はみ出たような気がしたが、最近は改善されてるかも知れない。
それは知らなかった。ありがとう

LineBreakMeasurerはちょっと問題があるのが気になる
>LineBreakMeasurer(AttributedCharacterIterator text, FontRenderContext frc)
コンストラクタのシグネチャはこうなっていて、違う文字に替えて計りたいときは
AttributedCharacterIterator を作り直さないといけない所

10回とかならいいけど、スレッド全体の座標を計算する事になるとコストが馬鹿高くなってしまう
>779 名前:abc [sage]: 2009/09/19(土) 11:41:01
>1行にどのくらい文字が入るかってどうやって計算すればいいんですかね?
>これで、計算しているのですがJPanelのサイズと文字によっては
この文章だとdatを「str.split("<br>");」を区切っているので、3個AttributedCharacterIteratorが必要に
つまり、3 * 1000回オブジェクトの生成をしないとダメ

どうにか、ならんいんですかね

786 :デフォルトの名無しさん:2009/09/19(土) 18:11:07
>>603
サンプルあったよ。
http://terai.xrea.jp/Swing/DeleteButtonInCell.html

787 :abc:2009/09/20(日) 17:35:33
ひとまず、ttp://terai.xrea.jp/Swing/GlyphVector.html
の方法を真似して座標計算をするように変更してみた
以前よりは速くなったけど、やっぱり少し遅い気がする

788 :デフォルトの名無しさん:2009/09/20(日) 18:51:08
コード晒してみなよ。
突っ込んであげるからさ。

789 :abc:2009/09/20(日) 19:14:52
>>788
順調に行けば、あと何日かで文字を表示できるようになると思うので
文字を表示できるようになったら、コードを晒します
その時は、よろしくお願いします

790 :abc:2009/09/21(月) 09:28:38
文字列が何行になるか計算をしているメソッドなのですが、
同じアルゴリズムでも計算結果が違います
どっちを信じるのが妥当なのでしょうか

private int lineCount(Font f, FontRenderContext frc, String str, int panelWidth) {
GlyphVector gv = f.createGlyphVector(frc, str);
double currentLineWidth = 0;
float advance = 0;
int lineCount = 1;

GlyphMetrics gm;
for(int i = 0; i < gv.getNumGlyphs(); i++) {
gm = gv.getGlyphMetrics(i);
advance = gm.getAdvance();

if(currentLineWidth < panelWidth && panelWidth < currentLineWidth + advance) {
lineCount++;
currentLineWidth = 0;
}
currentLineWidth += advance;
}

return lineCount;


791 :abc:2009/09/21(月) 09:30:13
private int lineCount(FontMetrics f, String str, int panelWidth) {
int currentWidth = 0;
int charWidth = 0;
int lineCount = 1;
int len = str.length();
char[] ch = new char[len];
str.getChars(0, len, ch, 0);


for(char c : ch) {
charWidth = f.charWidth(c);
if(currentWidth < panelWidth && panelWidth < currentWidth + charWidth) {
lineCount++;
currentWidth = 0;
}
currentWidth += charWidth;
}

return lineCount;
>>790の実行結果
4240行
>>791の実行結果
4670行

実行してみると>>791の方が動作がよい印象を受けます

792 :デフォルトの名無しさん:2009/09/21(月) 12:07:36
0.5pixel四捨五入か1pixel切り上げか解らんが、
丸め誤差を100文字累積させれば、
それだけで数十Pixelのずれが出てもちっともおかしくないんだな。

drawGlyphVectorで描くんだったら >>790 でいいんじゃない?

日本人相手なら、文字Aの幅とBの幅の合計は文字列ABの幅と等しいと
決めつけても、大して問題ないけど。
どうせイタリックとか使わないでしょ?

793 :abc:2009/09/21(月) 18:17:49
>>792
>drawGlyphVectorで描くんだったら >>790 でいいんじゃない?
まだ、何で描写するか迷っています

>どうせイタリックとか使わないでしょ?
現時点では太字とかイタリックは使いません

問題は>>790を使うとなぜか遅いという所だけです
もうちょっと考えみます

794 :デフォルトの名無しさん:2009/09/21(月) 23:38:58
数千行のテキスト1文字1文字でGlyphMetricsオブジェクト生成してたら
そりゃコピーGCが悲鳴を上げるのですよ。

>>782 のgetGlyphPositions()で十分なんじゃない?
一回だけfloat配列を手に入れれば、N文字目頭からM文字目頭までのピクセル幅は
float配列[(N-1)*2]と[(M-1)*2]の値の差でガンガン求められそう。
しかもこのfloat配列、別GlyphVectorに対しても結果格納先として再度使い回しが効くのだ。

795 :デフォルトの名無しさん:2009/09/22(火) 07:10:17
昔組んだソースが出てきた。
数文字を想定して書いたから、数千文字とかでやったらどうなるかは知らぬ・・・。


public static int lineCount(String str, Font font, int width){
float max = new TextLayout(str, font,
new FontRenderContext(new AffineTransform(), false, false)).getVisibleAdvance() ;
if(width >= max)return str.length();

float min = new TextLayout(str.substring(0, 1), font,
new FontRenderContext(new AffineTransform(), false, false)).getVisibleAdvance();
if(width < min)return 0;

int begin = 1;
int end = str.length();

while(true){
int base = (begin+end)/2;
float now = new TextLayout(str.substring(0, base), font,
new FontRenderContext(new AffineTransform(), false, false)).getVisibleAdvance() ;

if(end - begin == 1)return begin;

if(width > now){
begin = base;
} else if(width < now){
end = base;
} else {
return base;
}
}
}

796 :abc:2009/09/22(火) 13:51:57
>>794
そうですね、GlyphVector#getGlyphPositions()を使うように変更してみます
>>791の方法で頑張ってきましたが、intなので誤差が大きくなりすぎました
そのため、JPanel上に表示すると文字列の長さが明らかに変でした

>>794のアルゴリズムはなかなか、便利そうなアルゴリズムなのですが
頭が足りないので理解できるように考えます

>>795
ありがとうございます。時間が空いたらじっくりと考えます。

情報処理技術者試験の勉強でもしてくるかなorz
GlyphVectorのjavadocちゃんと読んでいるんだったorz

797 :デフォルトの名無しさん:2009/09/22(火) 17:39:59
パネルを2枚重ねてどちらにもMouseMoveイベントをつけておくと、
どうも上の方しか検知されないのですよね。
2つとも同時にMouseMoveイベントを発生させる方法ってありますか?

798 :デフォルトの名無しさん:2009/09/23(水) 18:07:43
>>797
以前似たようなことを考えて調べたのを日記にメモってたような記憶があるなー、ということで発掘してきた。
ttp://d.hatena.ne.jp/vmi/20090219/p1

799 :デフォルトの名無しさん:2009/09/24(木) 10:27:47
何がしたいのか解らんのだが、
単一Mouselistenerに両方の面倒見させる訳にはいかないの?

800 :デフォルトの名無しさん:2009/09/25(金) 02:33:30
単に下のパネルにイベント投げ直せばいいんじゃないの?

801 :795:2009/09/25(金) 03:09:22
ひゃー
今さらだけど>795は一行に何文字入るかのメソッドだわ・・・;;

ごめんなさい・・・。

802 :デフォルトの名無しさん:2009/09/25(金) 14:26:27
言わなくてもTextLayoutが出てくる時点で気づいてるだろ。

803 :デフォルトの名無しさん:2009/09/25(金) 17:03:49
>>800
それ、あんま上手く書けない。
いろいろ実験したときのうろ覚えの記憶では、「下のパネル」を探すのがえらく面倒だったような気がする。
結局>>798がいちばんすっきり書けるという結論になった。

804 :デフォルトの名無しさん:2009/09/25(金) 21:25:09
どうせ一行に何文字入るか調べなきゃいけないからTextLayout必要だと思うんだ

805 :デフォルトの名無しさん:2009/09/26(土) 02:49:43
>>803
「パネルを2枚重ねて」っ書いてるから、別に探す必要ないと思う。
>>798の引用元 ttp://weblogs.java.net/blog/alexfromsun/archive/2006/09/a_wellbehaved_g.html
も最初の簡単なサンプルでは、>>799,800が言ってるように、MouseListenerで、
Component#dispatchEvent使って下にredispatchしてる。

806 :abc:2009/09/26(土) 20:51:37
ttp://uproda11.2ch-library.com/11200993.zip.shtml
パスワード:swing

>778 名前:abc [sage]: 2009/09/16(水) 19:32:12
この部分だけ表示しようと思っているんだけど、もう何が何が何だかわからなくなってきた
この部分は一応表示できるけど、例外だらけorz
問題のクラスはnanashi2.view.{ResInfo.java,ResView.java}

さっきまでは、ウインドウの幅を変えないと例外が発生しなかったけど
状態が悪化したorz
誰かhelp me !!

807 :デフォルトの名無しさん:2009/09/26(土) 21:02:11
            ,、‐ ''"  ̄ ``'' ‐- 、
        /イハ/レ:::/V\∧ド\
       /::^'´::::::::::::i、::::::::::::::::::::::::::::\   死ねばいいと思うよ
     ‐'7::::::::::::::::::::::::ハ:ハ::|ヽ:::;、::::::::::::丶
     /::::::::::::::/!i::/|/  ! ヾ リハ:|;!、:::::::l
    /´7::::::::::〃|!/_,,、   ''"゛_^`''`‐ly:::ト
      /|;ィ:::::N,、‐'゛_,,.\   ´''""'ヽ  !;K
        ! |ハト〈  ,r''"゛  ,       リイ)|
          `y't     ヽ'        //
         ! ぃ、     、;:==ヲ  〃
         `'' へ、   ` ‐ '゜   .イ
              `i;、     / l
                〉 ` ‐ ´   l`ヽ
            / !       レ' ヽ_
         _,、‐7   i|      i´   l `' ‐ 、_

808 :デフォルトの名無しさん:2009/09/27(日) 22:50:20
落ち着いてIDEのデバッガを覚えよう。
IDE初めてならNetBeansでいいよ。

折り返しのあるテキスト系コンポーネントのリサイズレイアウトはいろいろと面倒くさかったなぁ。
レイアウトマネージャー様からのサイズ指定はとりあえず絶対服従な。
revalidate()呼べば、レイアウトマネージャがとりあえずgetPreferredSize()経由で
希望サイズをあとで聞いてくるはずだから。希望が叶うかどうかの条件はよく解らん。

809 :デフォルトの名無しさん:2009/09/29(火) 10:38:57
swingworker誰かつかってます?

810 :デフォルトの名無しさん:2009/09/29(火) 11:20:29
誰かって、マルチスレッドにするなら普通使うだろ・・・

811 :デフォルトの名無しさん:2009/09/29(火) 13:16:36
もしかして >>809 は使ってないの?

812 :809:2009/09/29(火) 18:16:47
使ってます



813 :809:2009/09/29(火) 18:57:06
単純にディレクトリをとその中身(ディレクトリ&ファイル)をコピーするのを作りたいんですが、

コピーした内容を逐次jTextAreaにオンタイムで表示させたいのです。

814 :デフォルトの名無しさん:2009/09/29(火) 20:10:10
半年ぐらい前の「JTextComponentのsetText()はスレッドセーフか?」は決着付いてなかったんだっけ…

815 :デフォルトの名無しさん:2009/09/29(火) 20:12:20
>>810
スレッドプール使いたいので、swingworkerは使いません。
swingworkerってexecutor指定出来たっけ?

816 :デフォルトの名無しさん:2009/09/29(火) 20:44:17
スレッドプール方式とGUIの更新ってうまくなりたつのかね
単一のGUI更新スレッドへの参照をワーカースレッドがみんな持ってるとかか

817 :デフォルトの名無しさん:2009/09/29(火) 22:25:06
コンポーネントのサイズに変化があると、
public void paintComponent(Graphics g)が呼び出されますよね
これを、コンポーネントのサイズに変化があっても
意図的に呼び出さなくする方法ってありますか?

818 :デフォルトの名無しさん:2009/09/30(水) 09:34:18
>>817
paintComponent(Graphics g) をオーバーライドして、
不要なときには処理しないようにするとかで実現は出来そうだけど
Swing的に実現できるかどうかはシラネ。

やりたいことが何なのかがわからないから、多分的を外してると思う。

819 :デフォルトの名無しさん:2009/09/30(水) 10:20:38
>>818
やっぱり、それしかないかありがとう
paintComponent(Graphics g)を呼び出す前の、前処理をしておきたかっただけ
paintComponent()の中に書けばいいじゃんって気もするけど、
componentResized(ComponentEvent e) ってのがあるから気になったわけ
componentResized()→paintComponent()の順に呼び出されるのかと思っていたけど
実際にはpaintComponent()→componentResized()の順番だったorz


820 :デフォルトの名無しさん:2009/09/30(水) 11:36:09
>>814
コピー処理の逐次ロギングを毎回setText()で全更新は効率悪すぎるだろ。

JTextAreaに吐くLoggerを昔作ってたけどね。

事前にテキストコンポーネントへsetDocument()しといた
jaxax.swing.text.PlainDocument経由で文字列追加すれば
EDTだろうがなんだろうがスレッド競合のことはなにも考えなくてよかったような気が。

SwingWorkerなんて軟弱なものが無かった頃の昔話。

821 :デフォルトの名無しさん:2009/09/30(水) 12:16:50
>>816
どんなスレッドからでもSwingUtilities.invokeLater経由すれば、
EDTでの実行になるでしょ。

822 :デフォルトの名無しさん:2009/10/17(土) 19:50:19
JTable に書き込むときに、マウスを使用してセルを選択したときは問題ないのですが、
タブで移動したセルに書き込むとき、半角英数字は問題ありませんが、全角を書き込む
は、マウスでクリックしないと書き込めないのですが、解決方法はありませんでしょうか?
タブで移動しながら、半角文字を書き込んでいるときはいいのですが、日本語を書き込む
ときに、どうしてもマウスクリックが必要となります。

よろしくお願いします。


823 :デフォルトの名無しさん:2009/10/17(土) 19:57:38
スレタイから「低速」を外してほしい

824 :デフォルトの名無しさん:2009/10/17(土) 22:24:23
というかAWTもここに戻せよ。

825 :デフォルトの名無しさん:2009/10/17(土) 22:57:17
ごめん。書き忘れちゃったんだ。
俺が悪い。何とでもいってくれ・・・。

低速はいらないと思うね。SWTとの比較なんかもう今やあほらしいし。

826 :デフォルトの名無しさん:2009/10/17(土) 23:00:54
SWTとの比較しておられる厨な方々がアホらしいと思って下さるかどうかが問題なわけで

827 :デフォルトの名無しさん:2009/10/18(日) 02:47:47
まあ速い実装が有るから、入れといたほうが無難。
swing使って遅いって馬鹿避けにも成るし。

828 :デフォルトの名無しさん:2009/10/20(火) 09:01:30
>>827
の「swing遅いぜ厨」避けに入れておいて欲しい。
ホント不毛な話でスレがつぶれるから。
「swing遅い」って話と、「swing今は意外と速い」って話なら後者の方が直ぐに収まるし。

829 :デフォルトの名無しさん:2009/10/20(火) 09:03:04
swingが速くなったっつーよりは
マシンが速くなっただけじゃね?

830 :デフォルトの名無しさん:2009/10/20(火) 09:54:22
>>829 みたいな奴が居ても
「はいはい、遅いですよ。スレタイにも低速って書いてあるでしょ?お帰りください」
って言えるから楽だしな。

真面目にレスすると、マシンも速くなったしSwing自身もOSの描画機能を
最大限有効活用するように変わってきたから、ハードウェアの性能を出し切る様な
アプリでなければ大体の要件に答えられるレベルになった。

って評価だと思う。少なくとも俺はそう。

831 :デフォルトの名無しさん:2009/10/20(火) 22:36:10
Swingのいくつかの描画アルゴリズムは高速化されてるが昔の遅いアルゴリズムも使えるから使ってみればいい。

832 :デフォルトの名無しさん:2009/10/20(火) 22:39:50
あ、はい……

833 :デフォルトの名無しさん:2009/10/21(水) 00:17:58
Java7にApplication Frameworkは載らないの?
Javaクライアントはそんなに将来性が無いのか

834 :デフォルトの名無しさん:2009/10/21(水) 01:12:01
Sun,Swing アプリケーションフレームワークの Java 7 での提供を断念
http://gihyo.jp/admin/clip/01/linux_dt/200910/20

APIが決まらないとか……今のSunにはリーダーシップが足りないね(´・ω・`)

835 :デフォルトの名無しさん:2009/10/21(水) 01:24:31
う、うん……(´・ω・`)

836 :デフォルトの名無しさん:2009/10/21(水) 01:47:06
Sun,Swing アプリケーションフレームワークの Java 7 での提供を断念
http://www.infoq.com/jp/news/2009/10/java7_m5

たぶん、ここを引用しようとしたのかな

837 :デフォルトの名無しさん:2009/10/21(水) 05:23:49
7でswingサポートが無く成るって話?

838 :デフォルトの名無しさん:2009/10/21(水) 05:44:40
mjdk

839 :デフォルトの名無しさん:2009/10/21(水) 07:12:41
>>837
釣り針があまりにでかすぎる

840 :デフォルトの名無しさん:2009/10/21(水) 09:10:24
Swingも速くなったしJVMも速くなったしマシンも速くなった。

841 :デフォルトの名無しさん:2009/10/21(水) 09:15:41
なにもかも速くなった世の中で、まだアセンブラで書きますか?

842 :デフォルトの名無しさん:2009/10/21(水) 09:19:05
なにもかも速くなったのにまだ遅いんですね

843 :デフォルトの名無しさん:2009/10/21(水) 09:25:01
>>841
要求もでかくなったからな。

844 :デフォルトの名無しさん:2009/10/21(水) 11:04:39
VisualEditorのML見てると
Swing自体面倒すぎるのでXMLでGUI定義するか
いやそれはまずい、素のコードをちゃんとパースすべきだ
とかなかなかカオス

845 :デフォルトの名無しさん:2009/10/21(水) 12:06:48
Swingめんどうすぎとおもうこともあるけど、VC++のGUIなら簡単ってこともないよね
使ったことないから知らないのだけど。

846 :デフォルトの名無しさん:2009/10/21(水) 15:32:43
もう絶対座標は嫌だお・・・

847 :デフォルトの名無しさん:2009/10/21(水) 15:43:57
wxなら簡単

848 :デフォルトの名無しさん:2009/10/21(水) 19:50:13
>>845
Windows Formならかなり簡単。
でもどうせならC#と使うのをすすめる

849 :デフォルトの名無しさん:2009/10/21(水) 20:29:17
Groupレイアウトが何か使いにくい。
絶対値ではなく某かのよりどころを基準にしてるからなんだけど、
こんなん使いこなすくらいならnullレイアウトでいいよ。。。

850 :デフォルトの名無しさん:2009/10/21(水) 21:18:56
>>848
C#は嫌だお・・・

851 :デフォルトの名無しさん:2009/10/21(水) 21:25:04
C#なんて消えちまえ

852 :デフォルトの名無しさん:2009/10/21(水) 21:32:31
VisualStudioのGUIデザイナと一番感覚が似てるのって何レイアウトなんだろ
いろいろあってよくわからない

853 :デフォルトの名無しさん:2009/10/21(水) 21:38:04
Qtなら簡単

854 :デフォルトの名無しさん:2009/10/21(水) 21:39:01
もう絶対座標は嫌だお・・・

855 :デフォルトの名無しさん:2009/10/21(水) 22:14:20
Qtはもう新規開発されてないし、メンテナンスモードだろ

856 :デフォルトの名無しさん:2009/10/21(水) 22:44:45
JavaユーザがSystem Look&Feelを諦めればnullレイアウトでいいんだよ。

857 :デフォルトの名無しさん:2009/10/22(木) 02:12:53
>>856
ウィンドウサイズ変えたり要素位置変えるときとかどうすんの?

858 :デフォルトの名無しさん:2009/10/22(木) 02:20:43
というかレイアウトマネージャとLaFはほとんど関係ないだろ。

859 :デフォルトの名無しさん:2009/10/22(木) 05:11:07
たまに関係あるから困る

860 :デフォルトの名無しさん:2009/10/22(木) 20:00:38
JOGL と Swing の組み合わせで 3D オンラインゲーム作れますか?

GLJPanel は AWT 用いる GLCanvas よりだいぶ遅かったと

言われてましたがはて今は?


861 :デフォルトの名無しさん:2009/10/22(木) 21:54:25
HSPスレかと思った

862 :デフォルトの名無しさん:2009/10/23(金) 16:44:24
JTreeを継承して、DefaultMutableTreeNodeを使ってツリーを作りたいんだけど
スパークラス(JTree)のpublic JTree(TreeNode root)を呼び出すしか方法ないの?

863 :デフォルトの名無しさん:2009/10/23(金) 17:18:09
DefaultMutableTreeNodeを使ってツリーを作るのに
JTree(TreeNode root)を呼び出すのは至極真っ当に見えるけど
何が不満なのか書かないと解決策を提案できない

864 :デフォルトの名無しさん:2009/10/23(金) 22:52:48
>>862
は?

865 :デフォルトの名無しさん:2009/10/24(土) 22:46:33
JFrameにフォーカス当たってない時の、KeyListenerのイベントって受け取れませんか?
他のアプリケーション操作時のキー入力を取得できませんかね?

866 :デフォルトの名無しさん:2009/10/24(土) 23:10:15
むーりよーん

867 :デフォルトの名無しさん:2009/10/24(土) 23:17:05
>>866
やっぱり無理ですか-
ありがとうございました

868 :デフォルトの名無しさん:2009/10/25(日) 15:54:13
windowsのモーダルフォームみたいな事をしたいと思っているんだけど、何かいい方法ない?
そのフォームを使ってソフトの設定をしたいんだけど
やっぱり、JDialogしかないのかな

869 :デフォルトの名無しさん:2009/10/25(日) 16:37:12
ソフトの設定がしたいってんならそうだろうね。
一行だけとかならJOptionPaneのインプットフォームが手間無しだけど。

870 :デフォルトの名無しさん:2009/10/25(日) 20:20:03
グラスペインにコンポーネント描画してそこでイベント食い尽すとか

871 :デフォルトの名無しさん:2009/10/25(日) 21:04:31
>>870
なんですか、グラスペインって?

872 :デフォルトの名無しさん:2009/10/25(日) 22:00:13
ちゃんとそれくらい調べなさい。
JFrameとかJDialogとか、つまりRootPaneContainerの概念で、最前面(JLayeredPaneによる層よりもさらに前面)のコンポーネント。
たしかポップアップメニューとかの描画に使われたはず。

873 :デフォルトの名無しさん:2009/10/25(日) 23:16:02
Component glass = frame.getGlassPane();
glass.setVisible(false);

↑こうするとメニューも含めてframeは一時的に操作できなくなるはず。
ついでにカーソルをドクロマークかなにかにしておくのが吉。

874 :デフォルトの名無しさん:2009/10/26(月) 09:52:32
JTabbedPaneを継承してFireFoxみたいなタブ機能を作ろうとしているのですが、
タブを選択したときに閉じるボタンの色を変えるのがどうしても出来ません
どのメソッドを使えば実現できるでしょうか?

875 :871:2009/10/26(月) 10:22:03
>>872-873
トンクス

876 :デフォルトの名無しさん:2009/10/26(月) 10:41:18
JFrameでキャンセルボタンをクリックしたら、自分自身を閉じる処理をしたいのですが
これって、普通にdispose()を呼んでもいいんですかね?

877 :デフォルトの名無しさん:2009/10/26(月) 11:18:02
>>874
普通に考えてタブが選択されたときにsetTabComponentAtのコンポーネントを書き換えるだけでは?

878 :デフォルトの名無しさん:2009/10/26(月) 13:42:37
>>877
ChangeListenerを使って、変化したら選択されてるタブの閉じるボタンの標準画像を切り替えるようにしたら出来ました
ホントにありがとうございました

879 :デフォルトの名無しさん:2009/10/30(金) 20:06:21
自宅のPCでJDialogを使ったプログラムを作ってみたのですが、
他のPCで実行したらダイアログのレイアウトが崩れてしまいました

自宅のPCはLinxuで、レイアウトのズレが発生したOSはWindowsです
崩れる理由を教えてください

880 :デフォルトの名無しさん:2009/10/30(金) 21:54:15
ソースを出さないと適切なアドバイスは受けられないよ。 とりあえず、LAFとかフォントとかの違いじゃない?

881 :デフォルトの名無しさん:2009/10/30(金) 22:30:33
>>880
ソースを出そうと思うのですが、修正をしてしまいました

882 :デフォルトの名無しさん:2009/10/31(土) 00:15:07
フローとか単純なレイアウトではlafくらいしかずれる要因がないから
nullレイアウトかグリッドバッグとか座標指定するレイアウトで座標が何かに依存してるとか。


883 :デフォルトの名無しさん:2009/10/31(土) 06:43:44
 
すべての環境を前提とする実装はそもそも無理だしな。
redhat6とかwindows8でも問題なく動く様にするのは今は無理。

884 :デフォルトの名無しさん:2009/10/31(土) 15:46:28
タスクバーやツールバーが移動出来るソフトがありますが、
やっぱりSwingでは簡単に実装できないんですかね?

885 :デフォルトの名無しさん:2009/10/31(土) 15:51:32
JToolBarは簡単にドラッグして移動できるけど、そういう話ではなくて?

886 :デフォルトの名無しさん:2009/10/31(土) 16:02:46
>>885
Jane Styleを見ていたら動くツールバー等々を作ってみたいな〜と思ったので
JMenubarと勘違いしてました
ありがとうございました

887 :デフォルトの名無しさん:2009/11/01(日) 00:04:32
DnD API叩けばドラッガブルコンポーネント作れるけどな。

888 :デフォルトの名無しさん:2009/11/01(日) 21:23:54
だが面倒くさい

889 :デフォルトの名無しさん:2009/11/02(月) 19:32:30
ツルバーやメニューなど(システム)に設定されているフォントを、どうやったら取得できますか

890 :デフォルトの名無しさん:2009/11/02(月) 20:22:43
どっかのリソースバンドルから拾えたような。

891 :デフォルトの名無しさん:2009/11/02(月) 21:46:21
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/intl/fontprop.html
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/intl/fontconfig.html

892 :デフォルトの名無しさん:2009/11/03(火) 15:48:46
プロパティを直接読むのではなく
UIManager だか UIDefaults だかを使うほうがいいかも。
詳しくは分からないけど。

893 :889:2009/11/03(火) 20:58:29
いろいろと面倒くさそうなので、別の所を作った後にまた質問しに来ます
ありがとうございました


894 :デフォルトの名無しさん:2009/11/05(木) 00:11:25
だからお礼はいらないって

895 :デフォルトの名無しさん:2009/11/05(木) 09:53:23
わたしは何をしたらいいんでしょうか?(´・ω・`)

896 :デフォルトの名無しさん:2009/11/16(月) 21:22:15
フロントをFlexに、サーバをS2BlazeDS+S2JDBC+GlassFishで稼働してるシステムがあるんですが
UIをSwingで構築することになりました。
まだはじめたばかりなんですが、
NetBeansでGUIを構築しようかなとダウンして試してます。なかなかいいですね。
それで、サーバ側との通信をどうしようか考えてます。
既存のシステムがBlazeDSなのでプロトコルはamfです。
Swingを使ったサーバ側のロジック(特にSeasar2)を呼び出すやりかたのオススメってありますか。
できれば、サーバ側の構成は崩したくない(特にS2JDBCを使ったロジック)と思ってます。


897 :デフォルトの名無しさん:2009/11/17(火) 00:05:15
JPanelを継承して、サイズはsetPreferredSize(new Dimension(100, 300))に設定しました。
下の様なコードを書いたわけですが、結果が↓のようになりました
264.0 ←文字列の長さ
13.962890625 ←高さ
100 x 300のパネルなので、高さが26〜27程度になって欲しいところです。
どうにかして、テキストを自動的に折り返して高さが26にする方法ありませんか?

private String text = "あいうえおかきくけこさしすせそたちつてとなに";
public void test() {
Graphics2D g2 = (Graphics2D)getGraphics();
FontMetrics fm = g2.getFontMetrics();
g2.setClip(0, 0, 300, 300);

Rectangle2D r2 = fm.getStringBounds(text, g2);
System.out.println(r2.getWidth());
System.out.println(r2.getHeight());
}


898 :896:2009/11/17(火) 20:03:54
896です。その後、ググったりして色々解ってきました。
S2RMIなどを使うと良い感じのようです。


899 :デフォルトの名無しさん:2009/11/21(土) 23:46:46
JFrameで背景の塗りつぶしを無効にするにはどうすればいいですか?
JOGLなるものを入れてみたんですが、3Dが表示された直後に背景が塗りつぶされてしまい
何も見えなくなってしまいます・・・。

900 :デフォルトの名無しさん:2009/11/21(土) 23:49:13
ダブルバッファを向こうにしてupdateも無効にするんだっけか。

901 :デフォルトの名無しさん:2009/11/22(日) 00:00:58
>>900
お早い回答ありがとうございます。

> ダブルバッファを向こうにしてupdateも無効にするんだっけか。
というのは、createBufferStrategyを呼ばず、update(Graphics)を空オーバーライドする。ということでしょうか?
そうでしたら、既にやっています。ちなみにpaint/repaintも空オーバーライドしてみましたが、ダメでした・・・。


902 :デフォルトの名無しさん:2009/11/22(日) 00:38:17
JOGL使ってるのにバッファーストラテジーをSwingで使ってるの?
めちゃくちゃにも程がある。

903 :デフォルトの名無しさん:2009/11/22(日) 01:04:08
>>902
実はFrameでもやってるんですが、同じ結果だったので変わらないかなと思っちゃったんです・・・。
何がいけないんでしょうか?

904 :デフォルトの名無しさん:2009/11/23(月) 18:03:05
質問なのですが、Swingset3の左側メニューにある、クリックすると展開する部品って
どんなAPI使ってるんでしょうか?

すごい使いたい機能なんですが、どの部品の機能なのかわからなくて…

905 :デフォルトの名無しさん:2009/11/24(火) 10:52:03
>>903
JOGL使うときはBufferStrategyではなくJOGLのダブルバッファを使う

906 :デフォルトの名無しさん:2009/11/24(火) 16:06:29
>>903
SwingでJOGLを使いたいのか単にJOGLで描画したいのかどっち?
JOGLで描画したいだけかJOGLの知識不足なら

【JMF】Java Media APIs【JOGL】
ttp://pc12.2ch.net/test/read.cgi/tech/1201346803/l50
こっちだし、JOGLの事情・勝手を分かってるうえで
Swing上で使いたいならここでも該当スレでもどっちでもいける気がするんだが。
どちらにしてもまずやりたいことをはっきりさせるんだ。

907 :デフォルトの名無しさん:2009/11/24(火) 20:45:08
Windows以外の環境でのVolatileImageのパフォーマンスは最近どうなっていますか?
WindowsだとデフォルトのBufferedImage -> VolatileImageのレンダリングが
ちょっぱやなので、他の環境でそれを当てにしていいものか悩み所です。

908 :デフォルトの名無しさん:2009/11/25(水) 21:44:41
なんかテスト用のプログラム作ってくれればウチのMacで試してみるけど

909 :デフォルトの名無しさん:2009/11/25(水) 22:56:06
マックのJDKって最新はいくつになるの?
6相当って出てる?

910 :デフォルトの名無しさん:2009/11/25(水) 23:43:48
Java5で簡単なコード書いたんだけど、公開はどうすればいいかな?
Mainクラスひとつだから、ソースべたっと貼ってもいいけど、
やはりjarをアップロードするのが手軽でいいか?

仕様は100x100の円を1024回描画した時に何fps出るか。
ちなみに私の環境だとWinXpSp3, C2D E8400, GeForce 9800GTXで、
だいたい800fps overくらい。

911 :デフォルトの名無しさん:2009/11/25(水) 23:44:57
package bstest;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.util.Random;

public class Main {

public static void main(String[] args) throws Exception {
Canvas canvas = new Canvas();
canvas.setPreferredSize(new Dimension(800, 600));
Frame frame = new Frame("BufferStrategy Benchmark");
frame.addWindowListener(new MyWindowListener());
frame.add(canvas);
frame.pack();
frame.setVisible(true);
runAnimationLoop(canvas);
}


912 :デフォルトの名無しさん:2009/11/25(水) 23:46:36

private static void runAnimationLoop(Canvas canvas) throws Exception {
canvas.createBufferStrategy(3);
BufferStrategy strategy = canvas.getBufferStrategy();
Image img = createOvalImage();
Random rand = new Random();
Toolkit toolkit = Toolkit.getDefaultToolkit();
String fps = "0";
int frame = 0;
long nextOneSec = System.currentTimeMillis() + 1000;
while (true) {
long currentTime = System.currentTimeMillis();
if (currentTime >= nextOneSec) {
nextOneSec = currentTime + 1000;
fps = String.valueOf(frame);
frame = 0;
}


913 :デフォルトの名無しさん:2009/11/25(水) 23:47:22
Graphics g = strategy.getDrawGraphics();
if (strategy.contentsLost() == false) {
for (int i = 0; i < 1024; i++) {
g.drawImage(img, rand.nextInt(800) - 50, rand.nextInt(600) - 50, null);
}
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 40, 20);
g.setColor(Color.BLACK);
g.drawString(fps, 0, 10);
g.dispose();
strategy.show();
toolkit.sync();
frame++;
} else {
System.out.println("strategy.contentsLost()");
}
}
}


914 :デフォルトの名無しさん:2009/11/25(水) 23:48:07
private static Image createOvalImage() {
Image img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics g = img.getGraphics();
g.setColor(Color.GREEN);
g.fillOval(0, 0, 100, 100);
g.setColor(Color.BLACK);
g.drawOval(0, 0, 100, 100);
g.dispose();
return img;
}

static class MyWindowListener extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(0);
}
}
}


915 :デフォルトの名無しさん:2009/11/25(水) 23:51:39
ブログとかでそのベンチのソース貼り付けてやってくれる人募集の方がいいだろう。

916 :910:2009/11/25(水) 23:58:50
とりあえずソースだけ貼ってみた。
ブログは持っていないなぁ。

917 :デフォルトの名無しさん:2009/11/26(木) 00:36:14
>>905
なるほど、ありがとうございます!
>>906
もともとBufferedImageの内容を射影変換したものを描画したかったので、それさえ出来るならJOGLじゃなくてもいいんです。
ていうか、JOGLがJavaらしくなくて使いづらいので、便利なのあればそっちを使いたいです・・・。

918 :デフォルトの名無しさん:2009/11/26(木) 22:51:14
>>909
6 でてるよ。 java -version やったらこんな感じ。
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode)

>>910
MacBookPro (MB470J/A) Core2Duo2.4GHz GeForce9400M で 26 fps だったw
-Dapple.awt.graphics.UseQuartz=true を付けると 46 fps くらい。

919 :デフォルトの名無しさん:2009/11/27(金) 00:05:12
>>918
おお、ありがとう。

下のオプションはSunのレンダーを使うだけみたいだし、副作用はなさそう?
512spriteを60fpsで、がマルチプラットフォーム向けの目安にすればいいか。
良いVRAM積んでるLinuxやOpenSolaris環境な方も是非是非計測を。

920 :デフォルトの名無しさん:2009/11/27(金) 00:35:02
ゲームか?
PenMとか糞遅い環境だと即死なベンチだなw

921 :デフォルトの名無しさん:2009/11/27(金) 22:31:22
>>919
逆だ逆。
オプション指定したら、Sunのレンダラを使わない方。

922 :デフォルトの名無しさん:2009/11/30(月) 01:22:53
GridLayout を使うと、すべてのアイテムが均等サイズになるのですが、サイズを割合で
指定する手段はないのでしょうか?

923 :デフォルトの名無しさん:2009/11/30(月) 09:27:21
GridLayoutじゃ無理だなぁ GridBagLayout使うか、自作かだね

924 :デフォルトの名無しさん:2009/12/01(火) 07:10:23
>>923
Thx

925 :デフォルトの名無しさん:2009/12/05(土) 01:21:04
JFrameにJMenuBarをセットして使ってるんですが、JMenuBarのupdate()に
JFrameのBufferStrategyからgetDrawGraphics()で取得したGraphicsを渡すと描画されません。(?)

これを正しく描画できるようにするにはどうすればいいでしょうか?

926 :デフォルトの名無しさん:2009/12/06(日) 00:11:13
最近Javaを始めた初心者です。
いまマウスで線を描く簡単なプログラムを作っているのですが、
ウィンドウを最小化してまた復帰させたときに描いた線が消えてしまいます。

マルチバッファリングの処理をいれてないのでそれが原因かと思ったのですが、
調べてみるとswingは自動でダブルバッファリングをしているとのことで何が原因か皆目検討がつきません。
よろしければ助言をいただけないでしょうか。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class Draw extends JPanel implements MouseListener, MouseMotionListener{

  static final int LINE = 1;

  private int x1, y1, x2, y2;
  private int mode;

  public Draw(){
    x1 = -1; y1 = -1;
    addMouseListener(this);
    addMouseMotionListener(this);
  }

927 :デフォルトの名無しさん:2009/12/06(日) 00:12:19
  public void paintComponent(Graphics g){
    if (mode == LINE) drawByMouse(g);
    mode = 0;
  }
  public void mousePressed(MouseEvent e){
    x1 = e.getX(); y1 = e.getY();
  }
  public void mouseDragged(MouseEvent e) {
    x2 = e.getX(); y2 = e.getY();
    mode = LINE;
    repaint();
  }
  public void drawByMouse(Graphics g){
    g.drawLine(x1, y1, x2, y2);
    x1 = x2; y1 = y2;
  }
  public void mouseClicked(MouseEvent e){}
  public void mouseEntered(MouseEvent e){}
  public void mouseExited(MouseEvent e){}
  public void mouseMoved(MouseEvent e) {}
  public void mouseReleased(MouseEvent e){}

  public static void main(String[] args) {
    JFrame f = new JFrame("Draw");
    f.setSize(400, 300);
    f.add(new Draw());
    f.setVisible(true);
  }
}
以上までがソースコードです。
よろしくお願いします。

928 :デフォルトの名無しさん:2009/12/06(日) 05:53:11
ためしに実行してみたけど、
むしろ「ウィンドウを最小化してまた復帰させるまでは線が消えない」ことに驚いた。
JPanel を継承するとそうなるのか。

何か勘違いしてるみたいだけど、
コンポーネントは repaint() が呼ばれるたびに
まっさらにクリアしてから描画しなおすのだよ。

以下のいずれかの方法をとる必要がある:
・マウスが動く軌跡をすべて記録して、
 paintComponent() で全ての線を描きなおす。
・マウスが動くたびにオフスクリーンイメージに線を描いて、
 paintComponent() で、そのイメージを貼りつける。

最後に:このていどの質問なら
「Java質問・相談スレッド」に書いた方がいい。


929 :デフォルトの名無しさん:2009/12/10(木) 14:16:39
JScrollPaneの内部で使われているJViewportは窓の役割を果たしていますが、
コンポーネント全体を描写した後に窓から見えるコンポーネントの一部を表示しているのですか?
それとも窓から見える部分だけ描写しているのですか?

930 :デフォルトの名無しさん:2009/12/10(木) 16:41:25
窓から見える部分だけ描画している

931 :デフォルトの名無しさん:2009/12/10(木) 17:48:57
>>925
フルスクリーンっていうオチじゃなくて?

932 :929:2009/12/10(木) 19:44:25
>>930
わかりました
ありがとうございます

933 :デフォルトの名無しさん:2009/12/11(金) 14:54:49
マルチラインフォントを実現させるために、DefaultStyleDocumentにinsertString()で文字列を追加しています
しかし、insertString()の実行回数が増えてくると、処理にかなりの時間がかかってきます
どうにかならないでしょうか?

934 :デフォルトの名無しさん:2009/12/11(金) 17:59:08
>>931
さあ

935 :デフォルトの名無しさん:2009/12/12(土) 02:24:46
>>933

・insertString呼び出しを減らす。
・ぎりぎりまでsetDocumentしない。
・PlainDocumentで済ませる。

DefaultStyleDocumentのSun実装ってVector使ってるぽいので、
途中への段落挿入は遅そう。

ところでマルチラインフォントってなに?

936 :デフォルトの名無しさん:2009/12/12(土) 03:55:50
二行分の記述を()で囲いたいとか?

937 :デフォルトの名無しさん:2009/12/12(土) 16:00:45
それかもしれない。

938 :933:2009/12/12(土) 18:02:19
>>935
アドバイスありがとうございました

939 :デフォルトの名無しさん:2009/12/12(土) 20:51:03
マルチラインていうとだいたいどのツールキットも複数行テキストのことだが。
フォントってなんだろうな。

940 :デフォルトの名無しさん:2009/12/12(土) 21:00:16
フォントのベースラインが固定されていないってことでは

941 :デフォルトの名無しさん:2009/12/12(土) 21:19:18
それは扱い面倒そうな仕様だな。
目で見ればずれてるって理解出来るが、プログラムでずれてるのを補正するのは面倒。

942 :デフォルトの名無しさん:2009/12/13(日) 00:30:27
確かに面倒だろうな。

943 :デフォルトの名無しさん:2009/12/13(日) 14:16:30
すんません教えてください。キーが取れないんです…

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class OreView extends FrameView implements KeyListener {
 public OreView(OreApp app){
  super(app);
  :
  中略
  :
  mainPanel.addKeyListener(this);
  mainPanel.requestFocus();
 }

 int key_code;
 public void keyPressed(KeyEvent e){
   key_code = e.getKeyCode();
   System.out.println("key_code_on:"+key_code_on);
 }
 public void keyReleased(KeyEvent e) {}
 public void keyTyped(KeyEvent e) {}
}

上記以外は、ほとんどNetBeans IDE 6.5.1 で生成したJavaデスクトップ
アプリケーション(SingleFrameApplication)のまんまです。

アプリのウインドウの上にマウスを置いてキーボードを叩いてもkeyPressedが
呼ばれないのはなぜでしょうか?


944 :943:2009/12/13(日) 14:57:53
MouseListener で同様にやってみたんですが、こっちは思った通りに動いています。
KeyListener が取れない理由って何かあります…?


945 :デフォルトの名無しさん:2009/12/13(日) 15:08:33
誰かがキーイベントを横取りしているのでは

946 :943:2009/12/13(日) 15:16:33
>>945
確かにそんな感じはします…出来合いのフレームワークなので、自分で
書いたコード以外にいろいろ走ってますし

が、調べるとっかかりがちょっと思いつかないです。ほとんど新規プロジェクトの
生成直後なので、Swingの挙動に明るい方、何かヒントあればお願いします


947 :デフォルトの名無しさん:2009/12/13(日) 15:53:04
>>945

948 :デフォルトの名無しさん:2009/12/13(日) 16:11:09
キーボードフォーカスがどこにあるのか調べる
requestFocusしているが、本当にそこにフォーカスが行ってるのか

949 :デフォルトの名無しさん:2009/12/13(日) 17:13:57
mainPanel が focusable じゃないとか。

フォーカスの行方を調べるには KeyboardFocusManager とか使うとよいかも。


950 :デフォルトの名無しさん:2009/12/13(日) 17:33:31
>>949
同意

951 :943:2009/12/13(日) 17:47:35
みなさんどうも。

うーむ…
focusなんたらって名前のプロパティをチェックONOFFしてみましたが、
どう組み合わせてもだめっぽい感じです。

KeyboardFocusManager をちょっと調べてみます。

952 :943:2009/12/13(日) 19:52:45
一応報告です

KeyboardFocusManagerで調べたら、mainFrameにフォーカスが当たっていたので、
mainPanelではなく、getApplication().getMainFrame()へaddKeyListenerしたら
キーが取得できたっす。

ヒントくれた皆さんありがとー

953 :デフォルトの名無しさん:2009/12/13(日) 20:01:57
それはmainPanel.addKeyListenerじゃ取れないだろうなあ。

954 :デフォルトの名無しさん:2009/12/13(日) 23:01:41
KeyStrokeとInputMapのWHEN_IN_FOCUSED_WINDOWじゃダメなの?

955 :デフォルトの名無しさん:2009/12/14(月) 13:54:32
漠然と質問ですが、Swingを使いやすくした補助ライブラリみたいなユーティリティクラス群のライブラリってありますか?
apacheのcommonsみたいなやつ

956 :デフォルトの名無しさん:2009/12/14(月) 14:06:43
ラップして使い勝手あげる方針がApp Framework。
機能強化して使い勝手あげるのがSwingXとかSwing lab製ライブラリ群。

957 :デフォルトの名無しさん:2009/12/14(月) 15:12:05
>>956
GUI作成支援のアプリケーションを作りたいのですが、
D&Dで移動したり、部品のリサイズ、追加、削除、この辺をやる上で使い勝手がいいライブラリはどれになるでしょうか?

958 :デフォルトの名無しさん:2009/12/14(月) 15:13:13
SwingWorkerって1.6で登場ってことで、1.5の場合バックグラウンド処理はどうすればよいでしょうか?
ちなみに、Swingって1.6で大幅に使いやすくなったのでしょうか?

959 :デフォルトの名無しさん:2009/12/14(月) 16:47:08
>>958
フツーにThread立ち上げればいいんじゃない?

ディスパッチスレッドとの競合管理とかめんどいんでね、もーね、その間GlassPane使ってGUI操作禁止にしてる。

960 :デフォルトの名無しさん:2009/12/14(月) 16:51:14
なにそれ?
その間は入力できないの?w

961 :デフォルトの名無しさん:2009/12/14(月) 17:08:19
>>960
うんw

と思ったけどヘビータスクの要所要所でEventQueue.invokeWait()でGUI操作してたわ。
SwingWorkerと大して変わらんね。参考にならなくてすまん。

962 :デフォルトの名無しさん:2009/12/14(月) 17:29:03
5.0で使えるSwingWorkerがあるでしょ

963 :デフォルトの名無しさん:2009/12/14(月) 17:40:28
>>962
SwingWorkerってクラスはないですけど、代替えクラスがあるんですかね?

964 :デフォルトの名無しさん:2009/12/14(月) 17:41:25
javaってchdirみたいなカレントディレクトリ移動できないんですか?

965 :デフォルトの名無しさん:2009/12/14(月) 18:28:25
>>963
jdesktop SwingWorkerでぐぐれ

966 :デフォルトの名無しさん:2009/12/14(月) 23:08:42
SwingWorkerくらい作ればいいじゃん

967 :デフォルトの名無しさん:2009/12/15(火) 00:32:55
>>966
だったらあなたが作ってくださいよ。

968 :デフォルトの名無しさん:2009/12/15(火) 01:09:08
http://terai.xrea.jp/Swing/AnimeIcon.html
とりあえずここのソース落とすと中にSwingWorkerらしきものが入ってる

JDKのとは少し違う

969 :デフォルトの名無しさん:2009/12/15(火) 14:02:39
いまオリジナルのSwingWorkerホストしてるのどこだっけ?

970 :デフォルトの名無しさん:2009/12/16(水) 12:14:21
何かそんな適当に拾って来たのを、自分でメンテするのは嫌だな。
ちゃんと誰かがメンテしてるのは無いの?

971 :デフォルトの名無しさん:2009/12/16(水) 12:39:54
無名クラスとinvokeAndWaitでええやん。
凝ったことすればSwingWorkerの再発明になりそうだが
それもまたよし

972 :デフォルトの名無しさん:2009/12/16(水) 12:54:51
>>964
スレチなんでさくっと。

カレントディレクトリ移動の目的はな〜に?
プラットフォームにもよるけど、VMプロセスのカレントディレクトリを移動しても
たぶんFile#getAbsoluteFile()とかには反映されないよ。

システムプロパティ"user.dir"を変更しとくのじゃだめ?

973 :デフォルトの名無しさん:2009/12/16(水) 13:20:13
javaにカレントディレクトリの概念はないいんじゃなかったっけ

974 :デフォルトの名無しさん:2009/12/16(水) 17:02:26
1.5ではバックグラウンド処理の機構が用意されていないのでしょうか?

975 :デフォルトの名無しさん:2009/12/16(水) 17:16:55
>>972
ファイルの相対パスアクセスを気にしていたので、user.dirですべて解決しました。
ありがとうございます。

976 :デフォルトの名無しさん:2009/12/16(水) 17:39:33
>>974
無いから追加されたんでしょう
すでにあるのなら新しく作る意味ないし

977 :デフォルトの名無しさん:2009/12/16(水) 17:59:02
>>972
-Duser.dir=C:\tmp\で指定したのですが反映されませんでした。
プログラム内でセットしないといけないのですかね?

978 :デフォルトの名無しさん:2009/12/16(水) 18:03:07
>>977
あっ違う。設定はできているけど、URLクラスのfileプロトコルが無視しやがる…
new URL("file:./xxx.ini")にすると、起動ディレクトリからの相対パスだ。バグかこれ?

979 :デフォルトの名無しさん:2009/12/16(水) 18:29:55
バグってるのはおまえWWW

980 :デフォルトの名無しさん:2009/12/16(水) 18:40:31
>>978
確かになるわ

981 :デフォルトの名無しさん:2009/12/16(水) 23:11:08
>>978
あぁ...

982 :デフォルトの名無しさん:2009/12/16(水) 23:15:26
>>978
だからー、もう new File("./xxx.ini").toURI().toURL() でええやん。
後は質問スレで。

983 :デフォルトの名無しさん:2009/12/16(水) 23:17:36
>>978
工夫しな

984 :デフォルトの名無しさん:2009/12/17(木) 10:23:24
>>983
アプレット通信でRMI使ってて、RMIの-Djava.rmi.server.codebaseがURL指定。
RMIモジュールをパッケージ化したので、フルパスでなんか書きたくない。
そこで相対だと思い質問しました。
工夫するのはURLでパラメータを受け取る方で、
せっかくURLというものでアクセス方法統一したなら、
工夫しないとうまく取れないというのはいかがかなと思った次第です。


985 :デフォルトの名無しさん:2009/12/17(木) 23:18:33
javaってピクセル単位でα値を持った半透明のウィンドウを作れましたっけ?
Windowsのレイヤードウィンドウと同等のことがしたいのです。

986 :デフォルトの名無しさん:2009/12/17(木) 23:36:01
Sunのjdk6u10以降ならcom.sun.awt.AWTUtilities使えるはず

987 :デフォルトの名無しさん:2009/12/18(金) 00:13:11
>>986
ありがとう。でもこれじゃピクセルごとのαはできそうにないですね。

988 :デフォルトの名無しさん:2009/12/18(金) 00:31:50
Path2Dで自分で定義すりゃいい

989 :デフォルトの名無しさん:2009/12/18(金) 01:00:00
?マウスについてる半影みたいなのをPath2Dでできますか?

990 :デフォルトの名無しさん:2009/12/18(金) 01:09:18
JFrameのRootPaneだかなんかのpaintComponentをオーバーライドして何もしないようにすると透けるとかそういうのなかったっけ

991 :デフォルトの名無しさん:2009/12/18(金) 02:02:10
import java.awt.*;
import javax.swing.*;
import com.sun.awt.AWTUtilities;
public class Hoge extends JWindow {
float[] fractions = new float[] { 0, 0.97f,0.98f, 0.99f, 1 };
Color[] colors = new Color[] { Color.WHITE, new Color(1, 1, 1, 0.001f), new Color(1,0,0,0.001f), Color.RED, new Color(1,0,0,0.001f) };
Paint paint = new RadialGradientPaint(128f, 128f, 128f, fractions, colors);

Hoge() {
setSize(256, 256);
AWTUtilities.setWindowOpaque(this, false);
setVisible(true);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(paint);
g2.fillRect(0, 0, 256, 256);
}
public static void main(String[] args) throws InterruptedException {
SwingUtilities.invokeLater(new Runnable(){
public void run() {new Hoge();}
});
Thread.sleep(5000);
System.exit(0);
}
}

992 :デフォルトの名無しさん:2009/12/18(金) 21:30:56
マウスについてる半影が理解できん。ポインタの影のことか?

993 :デフォルトの名無しさん:2009/12/18(金) 21:41:42
理解できんとか、おまえアホだろ
それ以外あるのか?W

994 :デフォルトの名無しさん:2009/12/18(金) 22:00:08
http://news.softpedia.com/images/news2/Ubuntu-8-10-Release-Candidate-Screenshot-Tour-7.jpg
確かに、拡大すると少し影が付いてるな

995 :デフォルトの名無しさん:2009/12/18(金) 22:40:50
じすれ

996 :デフォルトの名無しさん:2009/12/18(金) 23:03:43
Java7のリリースが延びた隙にSwing Application Frameworkねじこんでほしいな

997 :デフォルトの名無しさん:2009/12/18(金) 23:24:11
それそれー
ゴスリンがシングルトンの設計くそって言ったせいで取りやめになったんだっけか?
どうせシンプルなアプリケーションにしか使われないんだしいいじゃないかと思うんだけどなぁ

998 :デフォルトの名無しさん:2009/12/18(金) 23:29:49
swing out

999 :デフォルトの名無しさん:2009/12/18(金) 23:34:28
?

1000 :デフォルトの名無しさん:2009/12/18(金) 23:40:28
JLabelがクリックされたとき、JLabelではなく親のコンポーネントがクリックされたことにしたいのですが
どういしたらいいでしょうか?

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

252 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)