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
なかなかすごそうなコンポーネントです。これはどういうものでしょうか?

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)