AWTもターゲットに入ってていいんだよね? Q. AWT と Swing 混ぜちゃ駄目って聞いたんですけど 混ぜちゃ駄目なんですか・・・・? A. 今まででは、「駄目」というのが正解です。 が、現在開発中(未リリース)のバージョンではSwingとAWTの混在ができるようになっています。 正式リリースがされるまで、情報の錯綜があって混乱すると思いますが 普通の人にとっては「まだ駄目」という状況だと思ってください。 Q. Nimbusって何よ。 A. 次期Swingの標準となるとされているLAFです。 元々は、SUNのGnome環境のテーマに使われていた見た目を移植したものになります。 実装にはXMLベースでLAFを定義できるSynthLookAndFeel を利用しています。 jdk6の開発版で試す事ができます。 Q. こんなプログラムを作れって言われたんですが・・・ A. 宿題スレへどうぞ。 Q. なんでスレタイに低速って入ってるの? A. まだまだ速くなるってことさ。
スレ立て乙 Nimbus って、今でも JDK でしか使えないの? うちの環境では JRE でも Nimbus が使えるけど。 JDK もインストールしてあるから、 JRE が JDK 付属の Nimbus を読み込んでる?
Nimbusサポートは6u10以降だから、 前スレ開始とほぼ同じ時期の登場だったかな。 次スレで直せばOKじゃない?
XAML使えるようにならないかなあ
このスレpart10だからな。 前1がSwing/AWTスレ8をディスったからテンプレにないだけで。
断る
jtableでソート出きるように変更したら、うまく背景色が表示できなくなりました どなたか、教えてください //2列目以外はすべて、数字でソートする。 model = new DefaultTableModel(columnName, 0) { @Override public Class getColumnClass(int columnIndex) { if(columnIndex == 1) return String.class; else return Integer.class; } } //奇数行は白、偶数行は水色で背景を塗りつぶす。 private static class TestTableCellRenderer extends DefaultTableCellRenderer { private static final Color BGCOLOR = new Color(135, 206, 250); @Override public Component getTableCellRendererComponent(JTable tb, Object val,boolean isSelected, boolean hasFocus,int r,int c){ setBackground(r % 2 == 0 ? Color.white : BGCOLOR); return super.getTableCellRendererComponent(tb,val, isSelected,hasFocus,r,c); } }
今は無理
14 :
12 :2009/12/21(月) 14:38:45
>12 エスパーすると、レンダラーの設定をString.classのカラムに対してやってない? table.setDefaultRenderer(Integer.class, new TestTableCellRenderer()); にしないとダメだよ
swingについて質問 コンポーネントAをコンポーネントBにadd()し、コンポーネントCにもコンポーネントAをadd()します。 その後にBとCを表示してみると、Bがうまく表示されません。 どのようにしたら、B、CどちらにもAを表示させる事ができますか? JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); panel1.add(label); panel2.add(label); frame.add(panel1, BorderLayout.NORTH); ←表示されない frame.add(panel2, BorderLayout.SOUTH);
そもそも一つのコンポーネントを複数のコンテナに含めることができるのか?
>>16 コンポーネントAがBに表示されずCにしか表示されないということであれば、
コンポーネントAを2つ生成(内容は同じだが別のオブジェクト)して、
一方をコンポーネントBに、もう一方をコンポーネントCにadd()するしかないかと。
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
panel1.add(label1);
panel2.add(label2);
frame.add(panel1, BorderLayout.NORTH);
frame.add(panel2, BorderLayout.SOUTH);
19 :
16 :2009/12/21(月) 23:57:13
画面のレイアウトが2種類あるのですが、ユーザに画面レイアウトを選ばせたいと考えています
ちなみに、レイアウトが替わっても表示するものは同じです
JPanel panel1 = new JPanel(); ← レイアウトA
JPanel panel2 = new JPanel(); ← レイアウトB
panel1.add(label); ←表示するもの
panel2.add(label);
>>18 表示する物が同じだから1つのインスタンスでどうにかしたい
と思いました
21 :
20 :2009/12/22(火) 03:00:07
ごめん勘違い。 同じものを配置替えするという方法を取るところだろうね。
ユーザーがレイアウトを選ぶたびに BかCに add し直すしかないのでは
23 :
デフォルトの名無しさん :2009/12/22(火) 04:21:44
同意
24 :
16 :2009/12/22(火) 10:14:08
やっぱり、add()し直すしかないですよね 実装する時に手を抜きたかったのですが、無理ですね ありがとうございました
ある画面実行中に、各Componentの登録済み全イベント処理クラスを知りたいのですが、 Component#getListeners(Class<T> listenerType)の中にあるリスナー群がすべてのイベントになるでしょうか? つまりgetListeners(各イベントクラス)を10イベントリスナークラス分実行してとれたものを、 これ以外のイベント処理クラスは使用していません、と言いきれるものになるでしょうか?
何をしたいかよくわからないんだが、とりあえず、10ってどこから出てきた数?
>>26 Component#getListeners(Class<T> listenerType)の中で使われてゐたリスナークラスの種類です。
事実上、リスナーってインタフェースだからな。 ActionListenerとMouseListenerどっちも実装してるクラスとかあっても、 ちっとも珍しい話ではない。 getListenersで得られたアクションリスナが、 実はマウスリスナでもありました、 というのは自前でinstanceof演算子で判定するしかないのでは。 とエスパー回答。何がしたいかわからんが、java.util.EventListenerProxyも 読んどいた方がいいような。
>>27 あぁ、10の意味がわかった
その中に Button とかでよく見る ActionListener が無いのが不思議ではなかったか?
残念ながら Component#getListeners はサブクラスでオーバーライドされている
全部の一覧を得るのは無理じゃない?
>>29 うーん。でもJButtonのgetListenersはオーバライドされていないんだよね…
JComponentのオーバーライドが効いてる JComponent以下はEventListenerListを使っててどんなリスナでも入る
>>31 おお、すみません。見落としてました。
対象部品のgetListeners呼んでおけば各部品の全イベントが取れそうですね。
教えて下さい 今SourceForgeでJavaMIDIMixer作ってるモノですが MDIウィンドウを画面の下や右にピタッっと張り付ける そんな事を実現するスタンダードな手順はありますでしょうか?
ありがとうございます^^ これはすばらしいですね
ドッカブルでドラッガブルなGUIならDnDAPI使って自前で作ったがjava.netの何処かでみたぞ。
JScrollPaneにJTable、JTextPaneなどを追加すると、最小限(現在選択している場所)の描写しかしませんが どうやって、実装してるんですか?ヒントをください
InvalidateRectのこと?
39 :
37 :2009/12/23(水) 23:05:40
JPanelあたりを継承して、それをJScrollPaneに追加したいな〜と思ったので
Graphics#getClipBounds
>>40 JTableのソースを読むと、そんな低レベルのメソッド使ってませんよ
そりゃ描くのはJTable自身じゃないからな BasicTableUIみてみろ
JTableのソースなんて読まなくていいの ためしに、JPanelにボタンとかリストボックス配置して、 JScrollPaneでそのJPanelかこってみなさいよ Graphics2Dとかが自動的に処理してくれるから、ボタンもちゃんと押せるし、ほかの部分の描写かからないし 画像を張りたいなら、スクロール関係なしで、グラフィックを描写するPanelを設計して、 JScrollPane -> JPanel -> Layout -> グラフィックPanelクラス の順番でつなげればいいだけ グラフィックパネルの中ではそういうの必要ですけどね、 JTableはJTableUIのソースを見る必要がありそうですね がんばってね!
44 :
37 :2009/12/23(水) 23:32:06
まてまて。ここは JViewport の setScrollMode() の賢さを讃えるところじゃないのか?
JViewPortのJDKドキュメントの「高速スクロールアルゴリズム」解説とやらに 知りたいことは全部書かれてる気もするが
セルの話かと思ったらテーブル全体の話か
D&Dで部品の配置を変えるGUIツール的なものを作りました。 自由に配置移動やボタンの追加等行って、それを保存呼び出ししたいと考えてますが、 その場合余計なことをせず、TOPのフレームをシリアライズANDデシリアライズで実現できそうでしょうか? ComponentがSerializableなので、シリアライズ保存は想定されているんですよね?
一応想定されてるんですが、バージョン間の互換性は保証されていません XMLEncoder/XMLDecoderの方がいいかもしれません
互換性って、JDKのバージョンでなく対象クラスのバージョンですかね?
Swing各クラスのJavadocに下記の文がいちいち書いてある > 警告: このクラスの直列化されたオブジェクトは、今後の Swing リリースと互換ではなくなる予定です。
JButtonでボタンをクリックすると、あらかじめ登録しておいた内容を実行しますが だれが、あらかじめ登録していた内容を呼び出すのですか?
>>52 どういう内容が知りたいのか図りかねるが
取り敢えずEDTと答えておこう。
>>52 JButtonの中の人
厳密にいえばAbstractButton#fireActionPerformed
その呼び元はDefaultButtonModel#setPressed
ButtonUIの中の人がマウスリスナかなんかを使ってマウスの動きを見てsetPressedを呼ぶ
55 :
52 :2009/12/24(木) 20:46:07
>>53 単純に誰が呼び出しているか知りたいだけで、
とくに意味はありません
thx
IDEでプロファイラ動かすと、Swingアプリの見えないとこでうごめいている 小人さんスレッドがたくさん観察できるよ ※ コンソールからスレッドダンプでもおk
イベントとかコールバックとか、 たしかに初めのうちは分かりにくい仕組みではあるよな
各画面間の変数アクセスの最良の方法は何でしょう? 画面作成時のコンストラクタで親画面や操作したい画面を渡す? 画面をグローバル(public static)にする。 なんかstritsみたいにこれで行こうフレームワークはないですかね?
MVCで設計を見直せばOKでは。 ControllerにViewとModelぶらさげて、 Viewから親画面と子画面をたどり Modelから親データと子データをたどれば 画面間で変数アクセスできなくても無問題。 Webアプリとやらの「自称MVC」とはたぶん違うので注意。
今のところこれで行こう的なフレームワークとかってないんですかね? もしくはそんな動向の噂とか… なるべく先をにらんだ設計にしたいもので
ラベル、ボタン、チェックボックスなどをD&Dして表示位置を変更したいのですが、 JRE、サーとパーティのライブラリ問わずに、適した便利なクラス(マウスリスナー?)知っていたら教えてください。
>>61 こんなん作ったけど、いまいちうまく動かん。
int x ;
int y;
boolean init = false;
public void mouseMoved(MouseEvent e) {
Component c = (Component)e.getSource();
if (!init) {
init = true;
x = e.getX();
y = e.getY();
return;
}
c.setLocation(c.getX() +(e.getX() - x), c.getY() +(e.getY() - y));
x = e.getX();
y = e.getY();
}
アプレットでブラウザの×ボタンを押して終了したときに、そのイベントを拾うことっててきますでしょうか?
│A.. B ─┼─── .a │ .b │ Jtableの質問です 上記のような縦列表を作りたいのですがどうすれば良いのでしょうか 表の空欄には数値データを入れて計算等が出来るようにしたいと思っています
>>63 destroy()メソッドが呼ばれたときに中でメッセージを表示したりは
できるけど、閉じるのを防ぐことは出来ないと思う。
67 :
64 :2009/12/26(土) 12:04:16
説明不足で申し訳ありません 列ABにString[]、行abにString[][]を使って JTable table = new JTable(String[][],String[])としたのですが、 String[][]を使ったために空セルにInt型のデータを入れられません どうすれば列AB行abを残したまま空セルに数値データを入れられるのでしょうか
String.valueOfで文字列化するというのは?
表計算ソフトのようなテーブルを作るなら、 セルレンダラーやセルエディタを駆使しないと難しいよ。
70 :
64 :2009/12/26(土) 13:33:55
さがせばスプレッドシートのライブラリあるけど?
JScrollPaneの中でJViewportがどの様に動いているか研究しているのですが、 スクロールバーをクリックした後に、JScrollPaneのどのメソッドが呼び出されているのかわかりません どなたか教えてください
スクロールバーをクリックすると、JScrollBarが持ってるBoundedRangeModelのsetValueが呼ばれる それによってそのBoundedRangeModelに登録されたChangeListenerが起動する BasicScrollPaneUIがここにChangeListenerを登録していて、その中でJViewport#setViewPositionを呼んで表示範囲を調節している JScrollPaneはJViewportとJScrollBarとScrollPaneUIを管理しているだけ
一般的なダイアログみたいに右下にボタン配置したいんだけど、どういった風にレイアウト組むのが自然?
75 :
72 :2009/12/29(火) 11:39:40
tes
BorderLayoutのPAGE_ENDに置いたBorderLayoutのLINE_ENDに置いたGridLayoutにボタンを置くのが俺流
GridBagConstraints.SOUTHEAST でええやん
JSliderでツマミのマウスドラッグにより変更された際、ChangeListenerのの中で ((JSlider)e.getSource()).setValue(0); とかやっても、内部的な値は0にされるのですが、ツマミの位置がドラッグされた場所になってしまい 整合性がなくなってしまいます。これを防いでツマミも0の位置に合わせるにはどうすればいいでしょうか?
SwingUtilities.invokeLater
あと、e.getSource()とかやめた方がいい
SwingUtilitiesよりEventQueueを使ったほうがいい
ありがとうございます。
>>80 なんか振動?みたいな動きをしましたが、結局何も解決しませんでした。
>>81 なんでです?調べるキーワードも分からなかったんですが
>83 たぶん振動するのは 1.スライダーが動く 2.スライダーの値が0になる 3.マウスがスライダーの上にあるのでスライダーが動く これが繰り返されてるんだと思う。 スライダーをドラッグしたときどうしたいかがよくわからない、もう少し詳しく話してほしい
なんでそんな不便なUIをおつくりなのか、状況が把握できていないので、確実に悪とはいえませんが、、 Swingは、スレッドセーフではないので、操作するときは、invokeLaterは、ほぼ必須です。 ちなみに、invokeLaterは、SwingUtilitiesでもEventQueueでも一緒ですね。 スライダーがかたかたいうのは、 スライダーに値をセットする前に、 マウスをはなした事にするイベントを、 擬似的に発生させれば回避できるかと思います。
こんな感じで、スレッドが値と表示値を破壊しないようにできます。 if (EventQueue.isDispatchThread()) { SwingUtilities.invokeAndWait(runnable); }else { SwingUtilities.invokeLater(runnable); }
e.getSource()は、ソースを見てもどのスライダーなのか、把握できないので、お勧めしません。 JSlider jSliderXXXXXなどと、パネル(フレームでも)のメンバー変数として、準備し、 そちらへアクセスしましょう。
せめて、e.getSource()の使い道はこれくらいですかね。 if(e.getSource() == jSliderValueA) { jSliderValueA.hoge(); }eles if(e.getSource() == jButtonX) { jButtonX.setXXX(); }
JSlider#getValueIsAdjusting()の説明は読んだか?
JSliderの値を反映させないようにってことなら、MouseListener.mouseReleased()でsetValueすればいいんじゃない?
>>87 でももし、明らかな場合はいいよね?ローカル変数にコンポーネントのインスタンス作っては
無名リスナークラスを設定しまくってるから、数十行の間に全ておさまってるんだけど・・・
コンストラクタで渡すのが理想だけど、無名クラスならこういう風にすれば? final JSlider target = slider; slider.add○○Listener(new ○○Listener(){ public void ○○(○○Event e){ target.・・・; }}); >85 SwingUtilitiesはEventQueueのカバーメソッドなのでなるべくEventQueueを使うように、とどっかに書いてあった
>>85 やっぱり不便ですね。皆さんありがとうございました。
>なるべくEventQueueを使うように これswingの実装を知ってる必要があるんじゃね?
staticメソッド呼ぶだけだって。 EventQueueのカスタム化も大した労力ではないが。
TimerQueueがpublicなら・・・
現在JTextAreaで入力を行っていて、入力時のイベントをDocumentListenerで受け取っているんですが、 漢字などの変換決定時に同じ文字のRemoveイベントとInsertイベントが飛んできてしまいます。 例えば"ねこ"を"猫"に変換するときに INSERT ねこ [変換する] REMOVE ねこ INSERT 猫 [変換決定] REMOVE 猫 INSERT 猫 まぁ、動作としては正しいのでしょうが、こちらのプログラムの仕様上どうしても最後の重複した猫が 大きな無駄になってしまうので、なんとか変換決定イベントを知りたいのです。 もちろんRemoveイベントも受け取らなくてはならないのでRemoveを無視すれば?というわけにはいきません・・・。 キーイベントかなんかで頑張るしかないのでしょうか?(バグが出そうですが)
InputMethodListener使ってInputMethodEventを見張る。 イベントのgetText()やgetCommittedCharacterCount()の長さを デバッグ文で観察しつつ、いろいろなかな漢字変換操作を試してみよう。 確定した瞬間をとらえる判定式が、おのずと導けると思う。 細かいことは忘れた。
普通にprocessEvent辺りだと思うんだが何でそんな面倒に考えるの?
なんかややこしそうなので妥協します・・・ ありがとうございました
上限4文字Maxの都道府県入力フィールドで 「わかやまけん」とか読みを入力するときだけリミッターを外すとか みんなしてないのかな?
都道府県入力フィールドに入力制限なんてつけないもの・・・ 表記ゆれが怖いからコンボボックスじゃない?普通
ある程度出来てから調整したほうがいいよ。 たぶん一から作り直しになるだろうけど、frameworkとかlibrary化するってのはそういうものだと諦めたほうがいいだろう。 その変換で無駄な感じとは思っていても、たいていは思ってたほどコストでもないからそのまま逝っちゃうってのがおおいけど。
文字一つごとに膨大な計算をするのでフォントが複雑だと体感できるほどに遅くなることがあるんですよね。 入力中もリアルタイムで見た目を更新するので、うひゃ〜なんですけど、時間があればやります。ありがとうございました
同じデータを用いて2つのテーブルを作りたいのですが、 1つのフレームに複数のテーブルを設置する事は出来るのでしょうか? また、フレームを2つ作った場合、片方のテーブルのデータを変更した時に もう片方のデータも同時に自動で変更するという事は出来るのでしょうか?
>105 同じデータを使ってTableModelを作ればいいだろう JTable自体は二つ、TableModelを共通のものとかにすれば自然とそうなるんじゃないか?
>>105 JavaAPIのJavadocからもリンク張られてるけど、
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data あたりも読んでみては。
106の方も言ってるけど、
この図のうち、
(TableModelやAbstractTableModelを継承した)Table Model Objectを1インスタンス、(JTableを継承した)Table Objectを2インスタンス作る。
んで、2つのTableのイベントリスナを同じModelに登録(addTableModelListenerメソッド)しとけば、
Model変更時にfireTableDataChangedみたいなメソッドで双方のTableに通知できる。
入力に使った方のTableも、入力イベントじゃなくて、
もう一方の方と同じようにfireイベントで更新しないといけないんじゃないかな。
(入力イベントで行うのはModelの更新だけ。もちろんModelの先にあるTable Dataも更新されるだろうけど。)
ID、パスワード用のテキストボックスがメインのログイン画面があり、 htmlみたいにデザインを変更したいとの要求が上がっています。 Swingのhtml的デザインってどこまでできるのでしょうか?
>>108 HTMLを使ったSwingコンポーネントのレイアウトは無理。
Swingの各種LayoutManagerのレイアウト機能はHTMLやCSSよりはるかに優秀。
リキッドデザインとかお手の物。CSSハックとかバカバカしくなって、戻れなくなるよ。
htmlはcellも少ないしテーブルでいいのかなって思うけど何がダメなの?
だめなとこなんかどこもないよー でもswingのhtmlがレイアウトできるのはjavax.swing.text.Viewであって swingコンポーネント(JComponent)ではないんだ レイアウト周りのAPIは結構似てるけど。
108です。 アドバイスありがとうございます。 cgiからアプレットに移行したシステムで、cgiがログイン画面をhtmlで変更できますよ、としていたので、 そのままの要求がアプレットにも上がってきた形になってます。 イメージとしては、表示したいhtmlの内容を設定ファイルに書いておき、 それをロードして、そのレイアウトでアプレットの画面を表示することをしたいです。 つまり、アプリ改修なしで好きなタイミングで好き勝手にデザイン変更することが求められ、 htmlに慣れているので、html以外のデザイン変更方法は受け付けない、というのが要求です。 凝ったことはしない+入力部品はID、パスワードだけで、増減はなしです。 Swingに取り込むときの設計イメージがわきません。アドバイスいただければと思います。
>>112 文がおかしかったので、
cgiがログイン画面をhtmlで変更できますよ
↓
htmlでできているのでログイン画面を自由にで変更できますよ
それでいくらくれるんですか?
DQNはweb何とかだけやってればいいのかなって思うよ。やっぱり改めてそう思った。
そういえばJWebPaneってJava7に入るのかな。
>>112 もしその機能が本当に重要なのであれば、
ログイン画面はApplet化しないでウェブブラウザに任せる、つまり
htmlのままおいておくべきだとおもうけど。
>>117 うおおお、これはすごいですね。
イメージが付いてきました。
こういうDQNってさ、なにげなく白い奴のしゃぶりをやっちゃって、もうフィックスしちゃってんだろうなと思った。
狂牛病に取り付かれたスポンジ脳と同じで、脳味噌スカスカって感じはするよね。
121 :
デフォルトの名無しさん :2010/01/08(金) 19:45:08
うおおお、
仕事で飯喰うなら、こんな所に丸投げするなよと思う。 そのうちhtmlをswingになんてアフォフレームワークを売り物にしてくる業者が出て来たら(ry
>>122 仕事増えるならいいじゃん。
仕事ください
JTextComponentのサブクラスは文字を表示することができますが、 文字列の座標情報?などはどうやって管理しているのでしょうか? JTextComponentはDocumentインターフェイスに依存しているところまではわかるのですが、 そのあとがイマイチわかりません
何をしたいの? 解析したいだけならデバックすれば?
座標はViewが管理してます ViewFactoryにDocumentのElementを渡して作ってもらいます
127 :
124 :2010/01/13(水) 21:09:05
>>126 確かに、viewで管理しているみたいですね(さっき、軽く読みました)
ところで、どうやって文字を表示しているんですか?
java.awt.graphicsは使っていないみたいなんですが
なんかデジャヴが・・・ 前にJTableについて訊いてた人と一緒? まぁどっちでもいいけど JButtonとかJTableとかJTextComponentとかSwingにあらかじめ用意されてるコンポーネントはみんな、 自分では描かずにButtonUIとかTableUIとかTextUIとかに処理を委譲している だからJButtonとかJTableとかJTextComponentとかの方には表示関係のコードやマウス・キー処理のコードはない ButtonUIとかTableUIとかTextUIとかの方にはルック&フィールごとに異なったサブクラスがあって(MetalButtonUI,等)、 それらがルック&フィールごとに異なった内容を表示し、ルック&フィールごとに異なったマウス・キー処理をしている 見るならそっち側
>127 View#paint(Graphics g,Shape allocation)ってあるよな? ちなみにTextUIってのは単なるViewFactoryだ。
すまん。「BasicTextUIはTextUIを継承したViewFactory」の間違いだ。
JPanelで、paintComponent(Graphics g) をオーバーライドして描画を行う際 描画範囲がJPanelのサイズを超えた場合、自動でJPanelのサイズを拡大するには どうすればよいですか?
getPreferredSizeもオーバーライドして、描画範囲が超えないようなサイズを計算して返す
getPreferredSizeに頼るとほとんどsetSizeが無効になりますよね? setSizeでセットしたサイズ内で収まるようにするプログラムしたいときはnullレイアウトしかないのでしょうか。
getPreferredSizeがsetSizeしたものより大きな値を返さないようにするとか。
1.誰かがgetPreferredSize()呼んできたので100x100を返した。 2.そしたら誰かがsetSize()に80x80を渡してきたので不本意ながら従った。 3.そしたら誰かがクリップ領域10x10+20+20にしてpaintComponent()を呼んできた。 こんな状況? クリップ領域は気にせず半径500の円弧だろうがなんだろうがガンガン描いたらよろしい。 どうしてもクリップ領域大きくしたいならrepaint(x,y,w,h)だけ呼んで paintComponent()を終わらせればまたいつか新クリップでpaintComponent()が呼ばれる。 paintComponent()中にどうしてもコンポーネントサイズを大きくしたくなったなら revalidate()だけ呼んでpaintComponent()を終わらせる。 そのうちgetMinimumSize()が呼ばれるので希望サイズを返す。 getPreferreSize()やgetMaximumSize()が呼ばれてもInteger.MAX_VALUEを 返しておけばいい。 やがてsetSize()が呼ばれるだろう。もし希望が叶わなくてもここは絶対服従。
いや違うんです。 なんか誤解してるようですが、newしたときとかでその初期セットサイズ setSize(a,b)のまま固定しておきたくて、 基本的にサイズのは変更を許さず、resizeとかのレイアウト変更によって初期セットサイズを変更されたくないって意味です。 場合によっては縮小のときだけは許すが、拡大はmax sizeはsetSize(a,b)まで。 そういうときはnullレイアウトしかないのでしょうか。 レイアウトマネージャ使うとsetSizeの設定は実質意味をなしませんよね。
paintComponentでやるしょりか?
getPreferreSize()だろうがsetSize()だろうが実際はフレームと配下のコンポーネントのバランスをLMが勝手にとるから AWTならnullレイアウトでいいけどSwingだと修飾がJava2Dだからなぁ。 ゲームだとGUI自前だしCanvasのサイズを強制したいからnullレイアウト使うがね。
>>138 あまり分かってないようだけど、setSizeの質問ではswingはまったく関係ないよ。
>>140 描画中にリサイズしたらイベントキューが理論的に順番めちゃくちゃにならない?
JComponentのpaint(Graphics g)とprint(Graphics g)ってどう違うの?
printって印刷だぜ?
JTabbedPaneにadd("タイトル", JTableのインスタンス)を5回しています JTableの列幅に変更があった場合、addした5つ全ての列幅を変更したいと考えています どのように、すればよいのでしょうか?
幅だけじゃなくて列の属性が全部同じなら、全部のJTableで1個のTableColumnModelを共有する
147 :
デフォルトの名無しさん :2010/01/27(水) 06:05:30
Swingでゲームを作る人がいないのはなぜですか?
148 :
デフォルトの名無しさん :2010/01/27(水) 06:12:28
ゲームを作るのに便利なライブラリ (画像効果など) とか手厚く用意されてるわけじゃないから。
fillRectで塗った色はprintComponentで再描写しても消えないの?
コンポーネントの描画に関して、何か誤解をしているように見える。
NetBeansみたいなフォームデザイナってビジネスで使えるの? IDEのバージョンアップでデザイナそのものが使えなくなるかもとか考えると怖い。
GridBagLayout手書きしか使わんなー。 もちろん直接じゃなくて、ビルダークラス挟むけど。 builder.setContainer(container); builder.setResourceBundle(resourceBundle); builder.weight(0,0).addLabelResource("some.resource"); builder.weight(100,0).colSpan(2).add(new JButton(action)); builder.nextRow(); みたいな感じで。
手書きなの? 1.6からだけど、手書きならgroup layoutとかいいよ。 grid bagのさらにパワーアップしたレイアウトだからそのブルダークラスとやらと同じ感じで設定できるだろう。
JOptionPane の「OK」「キャンセル」みたいなデフォルトのラベルリソースってどこかから取れない? JOptionPane でキャンセルボタンにデフォルトのフォーカスを置きたいのでユーティリティメソッド 使わないで書いていったんだけど、ボタン名を自分で指定しなきゃいけないのかな。
うちMacなんでAqua LaFのしか見当たらないんだけど、 com/apple/laf/resources/aqua.properties (他数言語)に OptionPane.yesButtonText=Yes OptionPane.okButtonText=OK などと書いてあるなあ。
>>154 "OptionPane.yesButtonText"
"OptionPane.noButtonText"
"OptionPane.cancelButtonText"
"OptionPane.okButtonText"
これらをキーにして UIManager.getString(String) を使う。
ロケールも指定すれば、各国語にローカライズされたテキストも取れる。
UIManager.getString("OptionPane.cancelButtonText", Locale.ENGLISH)
は "Cancel" を返す。
JPopupMenuにたくさんのメニュー項目を入れると、メニュー項目が画面の縦幅に入りきらなくなります。 自動的に上下にスクロールとか、2列にするとかの仕組みはありませんでしょうか。
マカってホント情報弱者だな。
AWTUtilities#setWindowOpacity() で透明度を設定すると、3回に1回くらい一瞬だけ真っ黒になるのだけれど、これはグラフィック性能がクソだからなのでしょうか?
>>161 たぶん、PCニュース板あたりじゃない?
あそこではMacを、
>>160 みたいに馬鹿にしているし
XP しか使ってないんだけど Windows Look and Feel って Vista や 7 だと違うの?
マカってホントに情報弱者だな。
167 :
デフォルトの名無しさん :2010/02/10(水) 10:32:30
JTableでセルごとに色を変えたいのですが、 どのように処理すればいいのでしょうか? 行ごと、列ごとは出来ましたが、 各セルごとができません。 ご存知の方がおられましたら、 ご教示していただけませんでしょうか?
CellRendererじゃねーの?
169 :
デフォルトの名無しさん :2010/02/10(水) 10:45:50
もっとちゃんとご教示していただけませんでしょうか?
釣りか
分からないなら答えなくても結構ですよ
DefaultTableCellRenderer のサブクラスを作り、getTableCellRenderComponent() (だったかな?) を オーバーライドし、スーパークラスの同名メソッドを読んだあと this めんどくせ
C#にするからもういいや
>>170 このスレ、質問者になりすまして回答してる人がいるね。
この板ではよくあること
というか最近さらに増えた。 ニートが増えたんだろうな
今日はニートの日だったな。
卒論提出前の学部生だと予想。
180 :
デフォルトの名無しさん :2010/02/11(木) 09:43:02
GUI部分をnetbeansのGUIエディタで作成して,それ以外はjrubyで作る みたいなことを簡単にできる方法ってありますか?
イベントリスナで jruby 呼べば良いだけじゃん。 そういうフレームワークちょいちょいと作れば?
SwingのEDTでスクリプトの実行って実行モデル的にどうなの? リスナ上でやるには十分遅い処理じゃね?
そんな重い処理ならスクリプトなんか使うなよ。
で、おまいら GUI コンポーネント組み立てて行く時は上位の JPanel あたりから組み立てる派か 末端の JButton, JTextField あたりから組み立てる派かどっちよ?
iTextの質問ってここでよい?
187 :
デフォルトの名無しさん :2010/02/20(土) 11:12:02
iTextの質問ってここでよい? age
質問うp
189 :
デフォルトの名無しさん :2010/02/20(土) 21:18:02
Swing アプリ使ってるとたまに再描画がクソ重くなるんで調べてたら、ときどき javax.swing.RepaintManager.currentManager(myframe).getVolatileOffscreenBuffer(myframe, 16,16).getCapabilities(null).isAccelerated() これが false になってるのがわかりました。起動直後は true で、サクサク動きます。 これを防ぐ方法は無いでしょうか? javax.swing.RepaintManager.currentManager(myframe).getVolatileOffscreenBuffer(myframe, 16,16).setAccelerationPriority(1.0f) としてみましたが、やっぱりしばらく使ってると同じ状態になってしまいました。 環境は以下のとおりです。 Java 6u18 Windows XP 32bit NVIDIA GeForce Go 6600 VRAM 128 MB
SwingかJava2Dの使い方間違えてるかVRAMのデータが使えない状態にあるんだろう。 とりあえずjavaのオプションからDirectXとOpenGLのバージョンとソースすべてうp。
ソフト使うだけは板違い。
>>193 ありがとうございます。
リンクしていただいたバグは VRAM 上のイメージとメインメモリ上のイメージとで
動作が異なると言うことで、速度低下だけが問題になっている >189 の問題とは違うもの
みたいです。
translaccel と ddforcevram がそれっぽいなぁと思って試してみたんですが、やっぱり
しばらく使ってると問題が発生してしまいました。
ソースコードに問題があるのなら修正に挑戦する気はあるのですが、再現させる手段が
さっぱりなのでどこに手を付けていいものかさっぱりな状態です。
他に同じ症状の情報が見当たらないので、やっぱり環境に大きく依存する問題なのかも
しれません。
beansbinding\u306eObservableListImpl.fireElementChanged(int) ってどこからも呼ばれないの?
修正 beansbinding の org.jdesktop.observablecollections.ObservableCollections.ObservableListImpl.fireElementChanged(int)
PCの構成とドライバのバージョンうp
198 :
デフォルトの名無しさん :2010/02/28(日) 04:50:07
まじでおまえらSwingで何つくってんだ? ゲームのマップエディタ適当にSwingで適当につくろうとして久々触ったけど 相変わらず糞だなぁ、、いつまともになるんだろこれ。。
どこが糞なのか何がまともなのか理想を語りたいらしい。
こんな夜中に語りだすのか?…
糞なら使うなよ 適正な言語も選べないのか
マップエディタの実装が糞なだけでswing関係なかったりしてw cとかで組めるならjni使えばいい話し出し。
ここでjni出してくるのはどうかと思う
javaからwin32apiは使えないからな。
つかえまsが
Swing に対する唯一の不満は、Win32 用の L&F が ネイティブのそれと微妙に違っててイラっとすることくらいなんだけど 操作感覚にダイレクトに突き刺さってくるので困る。 SWT の作りは大嫌いだし(いまどきイベントループとか) 全般的な命名も好きになれないし(Shell って名前をアレに使うなよ) 体感速度に差があるとも思えないんだけど、 この部分だけが引っかかってしまう。 自分で作るんなら Swing なんだが 使うんだったら SWT みたいな。
そういうヲレクラス作ればいいだけじゃ?
J/DirectなんてJ#にすら見捨てられたよな
Browser と半透明ウィンドウのためだけに SWT 使うとる。
AWTUtilだっけ?あれとJDICでよくね?
JWebPaneってどうなったん? WebKitつかってるとかいう
>>206 いまどきイベントループ、って
どんな言語でもイベントループなんじゃないの?
たしかにイベントループを表に出していない Swing の方が異端だな。
どうもイベント廻りの挙動がおかしいと調べてみたら呼び出し先のライブラリで イベントループしてました、なんて事にさっきまでハマってたところ。 元々イベントループなんざシングルタスク言語やノンプリエンプティブな環境向けの手法だお。 Java のようなマルチスレッド環境では使わないに越したことはない。green thread 時代に yield() 駆使してた悪夢がよみがえる。
最近、日曜プログラムでSwing始めました。 仕事ではCOBOLとかC言語が多かったのでJavaはかじった程度の知識しかありません。 ところで、コンポーネントのリスナークラスとか追加するときって、無名クラス使うのが 一般的なんですか?(本とか読むとそれが多いと書いてあったので) 個人的には画面系のプログラムも作ったこともなかったので、よく分からないんですが、 コンポーネントの生成や属性の設定の中に、ロジックが入ってくる様に思えて なんか違和感を感じるんで、今は無意味でもクラスに名前を書いて内部クラスにしてます。 でも、無名内部クラスにするが一般的なら、それになれとかないとなぁと思い質問しました。
画面系を作ったこともないんですよね? どういう違和感を感じるんですか。
>>216 アプリケーションと画面を同一クラスとして作っていると
そんな感じになってしまうかもしれない。
>>217 ちゃんと勉強するとなるとかなり大変なんで初心者・初級者用のgui教本は全てそんなもんですよ。
分離しようとすると結局コード量が多くなるんでもしちゃんとguiやるならIDEないと無理でしょうね。
>>216 分かりやすい・自然だと思う方を採用したらいいんじゃないでしょうか。
無名クラスの場合は引数以外に定義された環境の情報にアクセスできるメリットと、
切り分けても命名に困る(〜ボタン押したときの処理、以上の名前が思いつかない)
ことが多数なので、私自身は無名クラスで書くことが多いです。
良い名前が思いつかないのであれば、多分分けるべきじゃないと思いますよ。
222 :
デフォルトの名無しさん :2010/03/07(日) 00:10:01
javaのjTextAreaから日本語文字を[ctrl+c]でコピーして テラパッドなどのテキストエディタに[ctrl+v]でペーストした時に 日本語が文字化けしてしまいます。防ぐ方法はありますか。 【Java】 1.6.0_17-b04 (Sun Microsystems Inc.) 【OS】 Windows XP 5.1 (x86)
224 :
222 :2010/03/07(日) 01:10:43
225 :
216 :2010/03/07(日) 03:16:14
>>217 、218、219、221 コメント有難うございます。
コンポーネントを作る際、例えば以下の様なものがあるとするじゃないですか。
1.btnS11 = new JButton("Save");
2.btnS11.setFont(new Font("Monospace",Font.BOLD,14));
3.btnS11.addActionListener(new ActionListener {public void actionPerformed(ActionEvent e) {Saveロジック(処理)}})
4.pnl1.add(btnS11);
ってな順になるのかと思いますが、それをコンポーネント分繰り返して
「1.生成2.属性設定3.ロジック4.貼付 1.生成2.属性設定3.ロジック4.貼付…」
みたいな感じで書いてます。
「1、2、4」は画面の見栄えの部分で、「3」はリスナーを追加する行為は画面の見栄え
リスナークラス内は「ロジック」になって、画面定義とロジックが混ざる感覚になる。
「リスナーを有名の他クラスにして、外に飛ばしてやれば、それが除外されるので画面定義だけの部分になってくれる。」
ので、しっくり感が出てます。
(なんか説明、へただなぁ…。)
226 :
216 :2010/03/07(日) 03:44:09
>>221 221さんが行っているメリットは、無名クラスではなく、内部クラスのメリットだと思います。
一応、外だしの有名クラスにするときも、元のクラスの内部クラスにはして、フィールドとか
までは、利用してます。
結局、無名クラスの場合のメリットとしては
「べつにクラス化しても、結局一ヶ所しかから呼ばれないから意味ない」
「そんなクラスにわざわざ名前つけるのもバカらしい」
「コード見るときに、あっち行ったりこっち行ったりするのも分かりにくい」
のでまとめて書く。ってことかなと思ってます。
(無名クラスの場合のメリットというよりか、外だしにしたクラスのデメリットですが…)
>良い名前が思いつかないのであれば、多分分けるべきじゃないと思いますよ。
命名規則を何となく決めて置けば、まぁ、なんとかしのげます。
MyBtnS11ActionAdapter 見たいなこのボタンのこのリスナーってなクラス名にしてます。
(よい名前かは置いといて…、ってか、BtnS11って、命名なんやねんってツッコミ入りそうですけど)
先ずはguiアプリを実際に作ってから半年後にまた考えてみても遅くないでしょうね。
>>216 ビジネスロジックは別クラスに実装して、
無名リスナーはUIとビジネスロジックのアダプタとして実装している。
こんな感じ。
JButton b1 = new JButton("OK"):
b1.addActionListener(new ActionListener(){
getSomeLogic().doLogic();
});
getHogeLogic()とdoLogic()の中身は想像で補ってくれ。
ビジネスロジックは、UIと粗結合であるべき、フレームワーク非依存であるべき、
というのが信条なので、SwingのAPIが混ざったクラスにビジネスロジックを書きたくない。
イベント処理にXXXListenerが必要というのはSwingの都合でしかないので、
そういう事情はSwingのUIクラスの中だけで隠蔽したい。
以上のような理由から、上記の作り方をしている。
次の課題として、UIオブジェクトとビジネスロジックオブジェクトのバインディングについて
考える必要があるけど、
そこは、ハードコーディングするなり、上位のオブジェクトからsetしてもらうなり、
DIコンテナでインジェクションするなり、好きな方法をどうぞ。
お薦めはDIコンテナだが、不慣れなら他の方法でもいい。
229 :
228 :2010/03/07(日) 08:44:34
ぐあぁコード間違えた。こうだ。 JButton b1 = new JButton("OK"): b1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ getSomeLogic().doLogic(); } });
>無名クラスではなく、内部クラスのメリットだと思います。 書いててそう思ったんですが、まあ多分通じると思ってそのままに・・ コンポーネント名+イベント名 な命名しか思いつかない場合、 自分だったら無名内部クラスで片付けてますね。 でもまあその辺りは個人の感覚次第で 何が正しいってわけでもないはず。 (特この件にかんしては明確にどっちが優劣ってのはない。) 「そういう書き方もある」ことを抑えてて、 そういうコード見て面食らう事がないのであれば 別にどっちで書いてもいいと思うんですよ。 vi も Emacs も優れたエディタなんです。
231 :
216 :2010/03/07(日) 18:05:59
あぁぁぁぁ。(なんか自分に腹立ってます)
>>230 自分が無知なので広く意見を伺いたく質問したつもりなのに
変な噛みつき方してすみませんでした。
コメント有難うございました。
>>226 >良い名前が思いつかないのであれば、多分分けるべきじゃないと思いますよ。
は、名前が思いつくようなクラスは再利用性があるクラスだから、
「名前が思いつくかどうか」自体が、内部クラスにするかどうかの
そこそこ良い基準になるということを言ったんだと思った。
ちょっと思っただけ。
やってれば分かるが普通は
>>228 にいきつく。今のswingはここらで止まってる。
>>233 >>228 でもいいんだけど、コンポーネントに直接ActionListenerをaddするんじゃなくて、
Action作って使いまわしたほうがマシだと思う。
ひとつのActionを複数のコンポーネントやキーに割り当てたいときとか。
サーバサイドしかやったことないと思しき某外資系ITゼネコンのアフォSEが JAR ファイルの中見て無名内部クラス使いすぎ云々 (品質悪い) と因縁 付けて来た事があったなー。
サーバーサイドやっているとね
そんなゼネコンと仕事してる時点で質が低いからどうでもいいな。 金が欲しいなら言う事聞くしかないだろ?
自分ところが下請けだから下請け前提で読んじゃったんだね君。
> ひとつのActionを複数のコンポーネントやキーに割り当てたいときとか。 さすがにそのくらいはやってんじゃなかろうか。 同じことを何度も書くのはそもそもアレだし。
ダイアログ表示中に任意のキー押下で任意のアクションを呼び出す方法はあるでしょうか?
もしかしてモーダルなダイアログの話?
>>241 そうです。
エラーが発生してダイアログを出すときに、スタック情報を適当なpublic static にコピーしておいて、
ダイアログ表示中に隠し機能としてF5を押すと、
コピーしておいたスタック情報をクリップボードに張り付けるということがしたいです。
客から問い合わせがあったときに、簡単に対応したいので。
InputMapとActionMap使ったら簡単なんじゃない? JDialog dialog = new JDialog(); dialog.setModal(true); dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); JPanel pn = (JPanel)dialog.getContentPane(); pn.getActionMap().put("hoge", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { System.out.println(e); } }); pn.getInputMap().put(KeyStroke.getKeyStroke("F5"), "hoge"); dialog.setVisible(true);
>>243 ありがとうございます。
JOptionPane.getRootFrame()から何とかしてアクションマップを登録して、
JOptionPane.showMessageDialog(…);することはできないでしょうか?
JOptionPane の API リファレンスにユーティリティメソッド使わないで JDialog 参照する方法が載ってるだろう。
>>245 JOptionPane.getRootFrame()から何とかして、って書いてあるから答えがかみ合ってないよ。
そんなことは知ってるけどもっと簡単な方法がないかってことだろ。
XXして
JOptionPane.getRootFrame()
で済む方法ってことでしょう。
要はその方法はないってのが正しい返しかな。
超絶役に立たないレスだな。 だから JDialog 参照しろという話をしてるわけだが。
強引なやり方としては Toolkitを使って全てのイベントを監視する方法もある。 どのコンポーネントがフォーカスを持っていようと F5が押されたらスタックトレースをダンプするようにもできると思う。
Swingの画面を印刷するにはどうすればよいでしょうか? ちなみに、スクロールで見えてない部分も含め印刷させることが出来るでしょうか? WORDの差し込み印刷をSwingでやることになりまして…
取ってもアフォな案件だなw vbaをjavaから呼ぶcom作る輪
俺vba苦手だから Apache POI に頼るー。 Apache POI だけはいつも俺の心のアニキ。
XML で保存出来るのに今時 POI とかないわ。
JEditorPane#getPrintableでRTF文書の印刷とか考えてるならやめとけー。 まずは簡単なWORD文書をディスプレイに描画させてみて、満足いく結果が得られるのか早期に検討すべし。 たぶん Aspose.Words for Java みたいな有料ライブラリが必要になるだろうよ。 >252 XMLなんか差し込み印刷したってしょうがないだろ
>>253 Word XML (WordML) 形式の話をしてるんだが、まだ Office が XML で連携できてるって
気付いてない奴って多いんだよな。おまえみたいな。
DB 舐めて Word ファイル作るだけにバカみたいな金払わされてる客がいたんで (レイアウト変更等別料金)、検索結果の XML から XSL で Word ファイル作る ツール作って XSL の書き方だけ教えてあげたらもの凄く喜ばれた。 んで別のデカい仕事貰った。
>254 「Word XML (WordML) 形式の話をしてる」 「WORDの差し込み印刷をSwingでやる」の話じゃなかったんならオレが謝る。
もしプロなら人の仕事を奪うのは良くないなと気づかないといけない
>>256 Swing から Word XML 出力 & Desktop#print() が思い付かない時点でオhル
>258 重ね重ね申し訳ない。 「Swingの画面を印刷するにはどうすればよい」の話じゃなかったんならオレが謝る。 「スクロールで見えてない部分も含め印刷させる」の話じゃなかったんならオレが謝る。 「Word XML 出力 & Desktop#print()」がSwingなのかスレ違いなのかはオレもよくしらん。
バカは黙ってろよ
逝ってよし
ところで >249 氏はもしかするとWindowsユーザーなのだろうか
Wordは最初っからどうでもいいんですが、 結局Swingの画面をjavaのコードだけで印刷って出来ないんですか? デスクトップの機能を使ってなんとかできないですかね… Wordの差し込み印刷はバージョンによって動作が違うし、Linuxじゃ動かないのでパスしたいんです。
与えられた紙の隅から隅まで自分でお絵かきしたいなら「Java 2D API プログラマーズガイド」の7章を読む 既成コンポーネントやコンテナのprint()がどこまでまじめに印刷に対応してるかはレッツトライ スクリーンキャプチャがしたいならjava.awt.Robotだ。
awtでボタンを押すとFileDialogをsetVisible(true);するメソッドを呼び出すだけの アプレットを作りました。 これをブラウザ(IE6)でHTMLから呼び出して、 ボタンを押してファイルダイアログを呼び出します。 この開いているファイルダイアログを放置して 呼び出し元のウィンドウをクリックすると クリックするたびにコンソールに例外がモリモリ出ます。 ↓こんなの Exception occurred during event dispatching: java.lang.NullPointerException: null pData at sun.awt.windows.WComponentPeer._requestFocus(Native Method) at sun.awt.windows.WComponentPeer.requestFocus(Unknown Source) at java.awt.Component.requestFocusHelper(Unknown Source) 以下略 これを出さないようにしたいのだけれど調べてもさっぱりわかりませぬ。 これってJavaのバグなのかな? それとも何かしなきゃいけないことがあるのかな! 助けてエスパー!
AWT のスッピン FileDialog なんて久しく使ってないから忘れた。
267 :
265 :2010/03/11(木) 22:24:17
ですよねー ふるーいアプレットのシステムを ポーティングするお仕事でこの問題が見つかったのですが 事象の起こし方もすごい簡単なのに 調べても調べてもちっとも出てこないので 泣きそうです HTMLから呼び出すとモリモリなんだけど アプレットビューワーから呼び出すと起きないのですよ
中身読んだら Java 7 でリサイズした時の話だった。失礼。
>>265 を読んだ限りでは、どうもJRE自体のバグっぽいね。
あるいはブラウザとの相性が悪かったか。
実害がないなら放置していいんじゃないかな。
Swing→RMIの通信をSwing→httpに変更しようと思っています。 RMIはもう使用したくないとのこどで、大幅改修はせずに移行したいとのことです。 まぁ、その辺は言いたいことはあるんですが、この不景気なもので来るもの拒まずです。工数が増える分には。 そこでまずRMIのインターフェースはあまり変えないということで、 メソッド呼び出しのリモートプロシージャの考え方を踏襲することに。 Swingにhttpクライアントを入れて"multipart/form-data"でデータを送信します。 データはRMIで使用した全ての引数でシリアライズした中身をファイルアップロードで送ります。 ポップ引数は2つで、リモートクラス名とメソッド名。シリアライズを解凍して(引数の配列)、 リモート側で(httpサーバ)メソッドインボークする感じです。 レスポンスは"text/plain"で、RMIの戻り値のシリアライズです。 このやり方はいかがなものでしょうか? 改善案や便利な方法があればお願いします。 落とし穴などもあれば。 Swing→httpは外せないってところでお願いしますm(__)m
RMI-HTTP Tunneling というものがあってだな。 使ったことないけど。
中身はrmiのままなんだから、http通しても大差ないのにね。 まあ金貰えるなら言う通りに実装してやればおk。
単に HTTP にすりゃ良いってだけなら (ファイアウォールでも通すのか?) SOAP に置き換えりゃ良いんじゃねぇの。
>>271 RMIとHTTPってレイヤが違うような…?
RMIがいやだからHTTPにしたいって言うのが理解できないんだがまあそんなことはどうでもいい。 Swing関係なくね?
RMI か HTTP かで心が Swing してんだろ。
279 :
265 :2010/03/13(土) 01:43:58
>>268-270 気にかけていただいてありがとうございます
例外の内容で調べて同じのは出てこなかったけど
「Defaultmodel.なdialogが云々でバグです!」
といったような内容のがBugDataBaseでボロボロ出てくるので
指定しなくてもモーダルだと主張しているFileDialogの
フォーカスの処理とブラウザから呼び出した際の相性に問題があるんだと思います。
(自分でmodalを指定するDialogだと同じ操作をしてもこの問題は起きません)
お客さんには事例を寄せ集めて
「我々のせいじゃないし、どうにもできないので勘弁していただきたい!」
と主張してみることにします。
ありがとうございました。
他所に仕事取られる訳だな。物はいい用と思うけどね。せっかくのビジネスチャンスを(ry
>>279 は月曜日にクソッタレのフニャチンどもにこう言われるはずさ
そんな欠陥のある言語を選択したのはお前の会社のミスだろ?
それにJavaはオープンソースなんだろ?
中追ってお前のところで直せよ
そしたら
>>279 はExceptionを握りつぶしてこう言ってやるのさ
問題ありませんってね
HAHAHA
おまえは書き込む前に一息置いて読み直す癖を付けろ。
バグ混入させるぐらいなら、プログラマ辞めればいいのに。 明らかに向いてないというか、能力足りてないだろう。
翻訳:極論振りかざすオレカコイイ!
バグが混入しないと思ってる時点であほだな
優秀なプログラマほどバグが少ない現実。 馬鹿にはプログラミングは向いてないよ。
そう自分を責めるな
たとえ4秒に1回落ちてもフロントエンドに影響が無いように作れってぐぐるの中の人が言ってた!!(違
>>286 いくら優秀でもバグがゼロにはならない。
>>283 に従うと、バグを混入させるプログラマは辞めなければならない。
したがって、最終的には全てのプログラマは辞めなければならない。
ユーザとして使ってるとバグが出るのってホント頭に来るのは事実。 作った香具師出てこいよ。
やだよ。 あいつら池袋のヤベェ工房から買ったヤニでトんでんだもん。 どうでもいいけど、池袋に溜まってる工房ってだいたい病気持ってるよなw まじ怖いわw 街中で堂々とコンジローマ自慢してんじゃねえよwくせえw
いやだから池袋のヤベェ工房から買ったヤニでトんでる香具師が作ってんだって。
でも池袋のガキどもは、本当にヤバい事する時は隠れてやるんじゃね? そういう現場を生で見たことないし。 だからまだいい方。 三軒茶屋あたりでうろついてるのは、本当にどうにかしてほしい。 あそこは深夜になるとリアル北斗。
>>297 たまに使っている人いるよな
死語だけど
>>298 元ネタがネットじゃなくて小説だからかな
池袋といったらダラーズだよな
デュラララカ
あらららぎさん
Swingで、ドラッグ中のキー入力を取得するにはどうしたらいいでしょうか。 JDesktopPaneを使っていて、JInternalFrame間のDnD中に、アクティブなフレームを 切り替えたいと思っています。 Windowsプラットフォームだと、CTRL-F6で内部フレームが切り替わりますが、 ドラッグ中だと切り替わりません。
DnD中にアクティブなウィンドウを切り替える意味は何?
下にあるフレームを上に持って来たいんだろ。
マウスリリースされたときにlafが勝手にやってくれる動作じゃダメなのか
>>303 ExplorerやNautilusのように、ウインドウ内のドロップ対象で動作が変わるのですが、
そのような作りは一般的ではないのでしょうか。
ドロップ元とドロップ先が完全に見える状態にウインドウを並べてドラッグ&ドロップするのでしょうか。
それとも、CLIしか使わないのでわからない、ということでしょうか。
>>305 Windows Explorerでファイルドラッグ開始
→ALT+TABでドラッグ対象ウインドウの非表示部を表に出す
→隠れていた部分のアイコンにドロップ
みたいなことです。
>>307 ドロップされる位置によって動作が変わります。
つ nlink
Macでもドラッグ中にExposeとかSpacesを使えるけど あれと似たような感じなのかな。
マカって情報弱者だな。
おまえってボットなの?
九分九厘そうだろう。
Mac 使ってるけど これで来るわけ? ↓
マカって情報弱者だな。
goto 311;
きっちり一時間で巡回してんのかw
呪文を唱えるとボットが召喚できると聞いてry マックって旨いよな!
マカって情報弱者だな。
>>319 分秒合わせてくるとか、何コレコワイwwwww
こいつ自作板にも出るし何年も前からpc11鯖に寄生してるボットだろ
eclipseのプラグインで使いやすいお勧めのSwingサポートプラグインはVisual Swing for Eclipseになるでしょうか?
Swing Application Frameworkってどう思います?
ok
>>322 Visual Swing for Eclipse かな
いや Visual Swing for Eclipse でしょ。
JDK1.5で画面をデフォルトプリンタで印刷したいんですけど、print()の引数のGraphicsってどうやって取得すればいいのでしょうか? というか、swingの印刷のサイトがなさ過ぎ… あまりやんないんですかね
>>323 netbeans platformでおk
まあこっちはミドルウェアに近いが。
たとえばなんだろうか、専ブラの類の規模を作ろうとするとApp Frameworkでは物足りない。
もとからSwing初学者がjavaの流儀でGUI作るのを容易にする目的のものだからね。
それがJava 5のEoDの一環でJDKに含まれるようになるだけだから。
#俺はTiming Framework入れて欲しい。Swing Labsの成果はもっと取り込んでいいと思う。
swingにフレームワークはいらんだろう
Swing 自体がフレームワークじゃねぇの。 あと自分とこの要件向けにドメインフレームワーク作るだけだろ。
SwingはToolKit
334 :
デフォルトの名無しさん :2010/03/26(金) 00:41:08
ホント、マジで教えて欲しいんだが、 おまいらSwingで何つくってんだ? ゲームのマップエディタつくったんだが、遅くて、見た目もイビツで 恥ずかしくて公開できやしない。
センスが無いと何やっても駄目な典型。
速い言語で作ったら今度は Segmentation Violation が出まくりの糞言語とか言ってそう。
テキストボックス入力中に、ボックス直下に入力でマッチした候補をインクリメンタルで表示する部品はあるでしょうか? googleの入力補てんみたいなものです。 自作の必要あり?
>>334 Swing以外で、サクサクで見た目も良いツールつくれるなら、そっち使えば良い。
無能ほど他人のせいにしたがる。
しかも無能は自分の無能さに気づく能力も無い。
>>334 オープンソースにして公開すれば、
誰かが高速描画仕様に修正してくれるんじゃないかな。
ここには有能な人も多いみたいだし。
俺は嫌だけどね。
価値有るものじゃないと弄る気にも成らないけどな。 金払ってプログラマに拘束化してもらうのが確実。
343 :
デフォルトの名無しさん :2010/03/27(土) 07:36:53
他人を無能呼ばわりする奴が、 どの程度描画を高速化できるのか興味あるね。 さぞかし有能なコードを書いてくれるんだろうよ。 まずはソースをうぷだ。
俺は、この前このスレじゃないがソースうpしたけど、 ソースについて何の評価も貰えなかった・・・ そんな俺は腐ったミカンですか?
2ch ではマジレス・ソースうpするとまともにコメントつかないのが常識
ヒットアンドアウェーの チンカス ばっかだしな。
ソースをうぷったのにコメントを戴くことができなかった7つの理由
1.閲覧者のレベルが低かった
2.閲覧者の得意分野が違っていた(学校、仕事、趣味、ゲームetc.)
3.問題のある部分は見当たらなかった
4.ソースが巨大すぎて読む気が失せる
5.あまりにも低レベルすぎて指摘のしようがない
6.誰も見てくれなかった
7.その他
>>344 もう1度ここでうぷってみたら?有能者が応えてくれるんじゃないの
348 :
デフォルトの名無しさん :2010/03/27(土) 10:59:18
有能な人のソースを見てみたい 凄く速いのかな
宿題スレでお礼がくると あぁネタだったんだなぁ と思ってしまう
>>347 1、3、4、6はありえないと思う。
5は、そこまでひどくないとは信じたい
JAVAの勉強で作ったゲームなんだけど・・・
何度も晒すのは、ちょっと気が引ける・・・
ゲームは、まぁまぁおもしろいとは言ってくれたけど
まずはソースをうぷだ 話はそれからだ
あえて本気を出さないソースがうけるのか
スネークゲームか。 implements Config はやめて static import NyoroArrayは事実上双方向リストなので、LinkedListあたりを利用 できないか考える。 Foodのもつ画像は、 static イニシャライザを使って、クラス全体で 10個持てばよいと思う。 今はノーマルエサがダイエットエサの出現状態まで管理までしている ようだけど、ノーマルエサとダイエットエサは同時に各1つしか出な いみたいなので、ゲーム世界側でそれぞれ1つずつ持つのがよいのでは ないだろうか。 では、ごはんー。
ActionKey.java 値が0と1しかないのなら、intじゃなくてbooleanを使ったほうがよいのでは。 初期化 private boolean status = false; メソッド public void press() { status=true; } public void release() { status=false; } public boolean isPressed() { return status; }
ゲームの出来ない(コンピュータにも余裕で負けるよ)、俺にはさっぱりルールが分からなかったorz 可愛い女の子の絵だけで、お腹が一杯です
ゲーム本体の良し悪しはともかくとして、 問題にしてるのはマップエディタの方では?
>>357 ゲームの人とマップエディタの人は別人じゃないの?
ゲームクリアしたら女の子とのセクロスシーンが出てくる、 なんてことになったらウレシくてティンコ旅立ち
マッポエディッタがうぷられて、マッポvs有能人の壮絶なバトル、ってなことになったら面白いのになあ
マップのセルが全部JButtonとか、グリッドがJTableとか、 そんなとこをエスパー予想。 …いや、Wizardryレベルのマップならそれで十分なんだけどさ
>>353 ゲームは全然知らないけど、それでも問題が多いのは分かる。
たぶん354, 355のような指摘は100個くらいは挙げらるし、クラス設計にも問題がある。
(が、設計の能力はすぐには身につかない)
普通の職業プログラマに対してなら、『プログラミング作法』、『Effective Java 第2版』、
『Java言語で学ぶデザインパターン入門』あたりの書籍を勧めるところだけど、ゲームは
文化の違い等があるから、たぶんこれらの本を読むのは遠回りになるだろうな。
>>355 おまえもいろいろと酷そうだなw
boolean型でstatusなんて名前はない(名前は重要だぞ)
private boolean pressed = false;
public boolean isPressed() { return pressed; }
普通はこう。(ただしクラス設計としては問題がある)
365 :
デフォルトの名無しさん :2010/03/27(土) 21:11:34
誰か、statusという名前が駄目でpressedならオケという理由を教えてくれまいか ていうか、変数名に動詞を使うのにはめちゃくちゃ違和感がある 俺の場合、動詞から始まる名前はメソッドにしか使わないからなぁ
>>365 status = true とか return status とか見てもなにしてんのかわかりにくいだろ。
あと、 pressed は動詞じゃないから。
statusでは「何の」状態なのか分からない pressedなら押したかどうかなんだなと分かる まあキーなら押したかどうかしか状態がないだろという話もあるが メソッドと命名の方向性は合わせた方がいいと思う
そういうことか…レスサンクスコ。
370 :
334 :2010/03/27(土) 21:56:30
別にこまってないし、ソースupする気なんてないよ
遅い理由はJTableのレンダラにJLabelを使っているからなんだけど手を抜こうとしたらこれが都合よかったのでそうしてるだけだし。
にしても、あとはSwingのせい。
DataGridView@C#でやったらどんだけ高速だったことか。
見た目がいびつなのは、レイアウトマネージャーの動作がキチガイだから。
SWTのGridLayoutが神レイアウトだと思うんだけど、これのSwing版発見したのでつかってみて
ttp://code.google.com/p/uface/issues/detail?id=8 掲示板添付のzipが使えた。
正式にはどこで公開されているのか知らん。英語わからんし。
俺はSwingを使うときは無条件でSwingUtilities.invokeLater()を使ってたけど、
よくよく考えると結構重要なのかも
http://wisdom.sakura.ne.jp/system/java/swing/swing4.html 353のソースは、まあ、よくできてるんじゃね?
俺も初心者レベルなんで詳しいことはよくわからんがw
あとは…
ifが連なってるところはswichi にしたほうがいいとか(一般的には条件分岐よりも
ジャンプのほうが速いはず…だけどこれはコンパイラ依存か)、
女の子の画像は裸のほうがいいとか、そのくらいしかわからん。
個人的に、画像の直貼り付けは遅そうな感じがするけどどうなんだろうね。
(もちろん、速度を気にしないなら直貼り付けで全く問題ないけど)
画像データを配列に読み込んで、その配列を処理したほうが速い気がするんだけど、
それをやるとかなりソースが複雑になりそうだなあ。
372 :
334 :2010/03/27(土) 22:06:05
連続書き込みすまん swtgridlayoutで見た目は完全に改善された。かなりオススメ で、とりあえず俺はJavaもSwingも上級レベルで使えると自負してるけど これで(公開できるほど)まともなアプリをつくるのは 不可能または、並々ならぬ努力が必要と思うので 本気でみんなが何をつくっているのか気になる。 何かまともなもん作ったって事例があったら教えてくれ。
>>371 あまり関係ないけど、コンパイラ依存じゃなくてVM依存だと思うw
374 :
353 :2010/03/27(土) 22:55:33
おぉ!沢山のレスありがとうございました! こんなに沢山アドバイス貰えるとは思ってなかったよ 知らない単語も出てきてるし、参考URLまで貼ってくれてるしで、 いろいろ調べて勉強してみます。 ありがとうございました ちなみに、トップの絵書いてくれた友達にも、 JAVA質問スレと、このスレで絵についてのレスされてる事を教えた所すごく喜んでましたw
バカでも出来るコードレビューには食いつきが良いのなw
380 :
デフォルトの名無しさん :2010/03/28(日) 00:21:39
また猛牛が暴れだしたようだな
うpするにしてもレベル低いソースの方が食い付きがいいよね
>>381 なんだコイツ
受け狙いのつもりなのだろうか
くだらねぇ話でスレ延びてんな。Swing 関係ねぇじゃん。 もう Java 総合スレで統一したらどうだ。
嫌あっちで反応悪くて、こっちでうpしたら、みんな気合い入れてコメント下から、当人らが興奮したってだけだろ。 どうせswingスレは普段過疎ってるから有効利用なんじゃねw
386 :
334 :2010/03/28(日) 04:26:13
>>377 おおおぉ、凄いチェック力。
>>198 書いたのすっかり忘れてた
このスレで頑張ってるというか、グチ&みんなが何つくってるのか興味で書き込みしてるだけなんだけど
.NETが性能も開発効率も見た目も圧倒的に良いのに、
いまだSwingにこだわる君たちの思考に興味がある
>>386 .NET って UNIX 系 OS や Mac とかでも動いたっけ?
春だなあ java.netでもsf.netでもいいからSwingアプリ探してみなはれ。
monoの再現度がまだまだ。 というかwinでMS製言語使うにしてもVC++だと思う。
Swing と比べるなら .NET ではなくて Windows Forms や WPF じゃなかろうか。
JDK1.5なのでSwingWorkerが使えません。 この場合 1秒間隔でTimer起動→スレッド起動→バックエンド処理→待ち受け画面表示→イベント処理終了でswingスレッドを戻す →バックエンド処理終了→Timerのstaticに終了フラグセット(継承して持たせた) →Timer起動で呼ばれる→フラグ立ってるので待ち受け画面非表示 こんなことしないといけないんすかね… あ〜1.6で書きたい。ただ1.5以上サポートなんで1.6依存でかけない…
ライセンスとかに問題がなければ SwingWorkerをパッケージに含めてしまうというのも可能かも。 あるいは似たようなクラスを自分で書くとか。
>>370 1000x1000程度のJTableなら、全セルにイメージ貼り付けても、
スカスカ動くがな。
大方、全セルにJLabelをnewしてつっこんだとかだろ。
>>394 1.5で使えるとかって書いてないんですけど使えるものなんですかね?
たいていの質問回答スレには、最初の一行しか読まずに回答始めるあわてんぼさんが常駐してる。
This project is a backport of SwingWorker included into 1.6. を訳してみろ…
意味が分かりました。すみません。躍起になって1.5ばかり探してました・・・
400 :
334 :2010/03/30(火) 19:48:53
>>393 newなんてするかい・・そこだけはりつけちゃる
public Component getTableCellRendererComponent(JTable table, Object data,
boolean isSelected, boolean hasFocus, int row, int column) {
MapTable mapTable = (MapTable) table;
if (!(mapTable.enableStartColumn <= column && column < mapTable.enableStartColumn
+ mapTable.enableLength)) {
this.setIcon(null);
} else {
if (data != null) {
int item = (Integer) data;
if (item != -1) {
PalletTableItem pi = palletTable.getValueAt(item);
if (pi != null) {
this.setIcon(pi.icon);
} else {
this.setIcon(null);
}
} else {
this.setIcon(null);
}
} else {
this.setIcon(null);
}
}
if (isSelected) {
this.setBorder(lineBorder);
} else {
this.setBorder(emptyBorder);
}
return this;
}
きったねー
>>400 動作には関係ないが、ソースは少し見やすくなったかもしれない。
public Component getTableCellRendererComponent(JTable table, Object data,
boolean isSelected, boolean hasFocus, int row, int column) {
MapTable mapTable = (MapTable) table;
Icon icon = null;
Integer item = (Integer) data;
if (mapTable.enableStartColumn <= column
&& column < mapTable.enableStartColumn + mapTable.enableLength
&& item != null && item != -1) {
PalletTableItem pi = palletTable.getValueAt(item);
if (pi != null) {
icon = pi.icon;
}
}
this.setIcon(icon);
this.setBorder(isSelected ? lineBorder : emptyBorder);
return this;
}
単に図星だったから、慌ててソース書いただけだろw
そう思いたいんですね
最初から示さなかった時点で負けとしか。 後だし乙。
JTreeの要素の並び順ってJtreeの機能で設定することができるでしょうか? それとも登録の前にソートして、ソートされた順番で登録しないといけないでしょうか?
>>407 TreeNodeに対して children() を呼んだときにソート済みで返ってくればよいと思う。
UIよりはモデル側の問題。
javafx を始めたいんだけど、入門書ってありますか?
javafxは辞めておいたほうが。
入門レベルは英語ばっかだね。
LaboBrowser っての使ってみたけど全然ダメだの。 マトモに表示できるのは Google トップくらいだ。
Lobo? あれは JEditorPane よりもマシという程度
一般的なブラウザ >> [実用性の壁] >>> Lobo >> Swing >>>> HotJava
JWebPaneまだ〜?
Flying Saucerの出番か!?
419 :
334 :2010/04/11(日) 12:07:15
おひさしぶり! んでもって君らが何つくってんのか教えてくれんの?
JaneStyleとかすごい恥ずかしいUIだけど公開されてんぞ?
a
window自体に最優先のキーイベントを登録したいのですが、 要は、どのパネル、どのコンポーネントを開いていても呼ばれるイベントです。 WindowにWHEN_IN_FOCUSED_WINDOWのイベントをgetActionMap().put(action, action)するみたいな感じです。
ほほう。それでそれで?
>>422 KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventPostProcessor(new KeyEventPostProcessor() {
public boolean postProcessKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED)
System.out.println(e);
return false;
}
});
このサンプルコードのようにすると出来るようです。
あとはKEY_PRESSEDの所と、System.out.println(e)の所を適切に変えればOKです。
1日掛けて調べました。。。
もし宜しければ、私のブログの応援クリックをしてもらえませんか?
http://study-blog.jugem.jp
間違えました。 KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() { public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) System.out.println(e); return false; } });
JTableに行ヘッダを追加しようとJScrollPane#setRowHeaderView()でJListのインスタンスを渡しました。 行ヘッダは追加されたのですが、 行ヘッダのJListでカーソル移動やマウスドラッグをするとJTable側がついてこず JListだけがスクロールします。 JTable側も連動させるにはどうすればよいのでしょう??
>>426 scrollPane.getRowHeader().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
scrollPane.getViewport().setViewPosition(scrollPane.getRowHeader().getViewPosition());
}
});
これで、カーソル移動とマウスドラッグはOKでした。たぶん他も大丈夫かと思います。
もしよろしければ
>>424 のクリックをお願いします。
>>424 削除ガイドライン違反
8. URL表記・リンク
宣伝・罠・実行リンク
・明らかに宣伝を目的としたリンク・クリックや訪問で課金が発生するもの等は、宣伝掲示板以外では削除します。
こんなところで宣伝したら馬鹿に突撃されるぞ。
専門板なら平気だよ。
>>428 悪気はないんですけどね。
まぁ無職で時間にゆとりがあるので、色々やっとるという訳です。
とりあえずクリックした人はいないようですw
どうにかやっていく方法はないものでしょうか。
1.質問が出る。
2.アフィリエイトをクリックしてもらう。(1クリック数円)
3.解答をする。
という形式にしたいなぁと思っております。
>>429 ,430
基本的にプログラム板は過疎っていますからね(^^;
↑スレ違い。適切なスレでやってください
434 :
228 :2010/05/04(火) 07:47:44
じゃあ俺は
>>424 のブログ?のコメントをエロサイトの宣伝に使わせてもらうよ。
だめ?そこを何とかお願いします。
>>434 あ、おはようございます。Give&Takeの精神でお願いします。
宣伝嵐報告してきておk?
438 :
426 :2010/05/05(水) 12:40:32
>>427 できました!つたない質問で的確な回答を頂けてとても感謝しています。
クリックしておきましたよ(^^
439 :
427 :2010/05/05(水) 20:19:49
>>438 こちらこそ、ありがとう。
迷惑でなければ今後も質問があれば調べて回答したいと思います。
1つのJPanelのインスタンスを、複数のJFrame上に同時に描画するにはどうすればよいですか?
シリアライズしてネット越しに垂れ流してデシリアライズとか
>>441 それじゃ「1つのインスタンス」にはならないじゃん。
>>440 共有すべきはmodelであってviewじゃない。
____ / \ /\ キリッ . / (ー) (ー)\ 共有すべきはmodelであってviewじゃない / ⌒(__人__)⌒ \ | |r┬-| | \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
なんでviewじゃ駄目なんですか?
>>447 GUIコンポーネントは親を1つしか持てないから、複数のコンポーネントで1つの子を共有することができない。
参考: java.awt.Component とか java.awt.Container のソース。
てっきりイベントがらみで駄目なのかと思った
>>449 それもあるから親を1つしか持てないようになってるんだろう
ルックアンドフィールは、複数同時には使えない? JFrame 2つつくって、片方は、javax.swing.plaf.metal.MetalLookAndFeel もう片方は、UIManager.getSystemLookAndFeelClassName() でとってきたやつを 適用する、みたいなことはできないようになってるってことでいい?
JFrame を表示する前に都度 UIManager#setLookAndFeel()、 SwingUtilities#updateComponentTreeUI() で指定してやれば 見た目は別々になるんじゃないの。全くお勧めは出来ないが。
MetalLookAndFeelで1.1や1.2のころの昔の紫色のUIに変更するにはどうするんですか?
JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); の事か?
>>451 できるけど挙動が狂うって話があった気がする。
>>452 >>456 基本できないよな 少なくともAPI作り手はそんなこと想定しなていようだな
サンキュー
>>453 LookAndFeel laf = new javax.swing.plaf.metal.MetalLookAndFeel();
MetalTheme theme = new javax.swing.plaf.metal.DefaultMetalTheme();
MetalLookAndFeel.setCurrentTheme(theme);
UIManager.setLookAndFeel(laf);
多分これのことかな?
>>443 あたりに関連して、
frame1 : JFrame --- button1 : JButton
frame2 : JFrame --- button2 : JButton
みたいに、なってて、button1とbutton2が同じモデル buttonModel0をsetModelされてるとき、
frame1をクローズして、frame1がGCで回収された後でも、button1は、buttonModel0からリスナ経由で
参照されてるから残る。
もちろん、button1を再利用したいときもあるけど、そのままメモリリークになりやすい。
どこかのタイミングでプログラマの責任で、button1.setModel(null)して、モデルへの参照を切るべきなんだろうけど、
なんか、定石みたいな書き方ありますかね?
>>459 frame1 のクローズイベントで切り離す。
JTable でセルをdbl clickだんどするとそのセルをエディットできますよね。 これを無効にしたいんですがどのAPIでしょうか。 それにしてもJTableは複雑ですよね・・・
日本語でおk
JTableは本当に複雑ですけど1つのコンポネントにあれこれ機能を詰め込みすぎって感じがします。 dbl clickやF2でセルを編集できるようになりますがこれをoffにするにはどうするんですか?
JTable.setDefaultEditor()にnullを渡しておくのはどうだろう。 本来は自作TableModelを作るべきだと思うが。
>>464 javadocみるとそれしかないかなって思ってましたけど、一番単純な方法はやはりそれでしょうね。
javaはclassの継承を中心とした言語設計なのに、swingはDIというかMVCというかプラグインというか、java langにとってswinの設計思想はまったく異質なので非常に複雑なライブラリとなっています。
愚痴を言うわけではないですが複雑な割にこの程度の機能(それもtableとして当たり前のような機能)しかないswing.tableなら、
少なくともhtml,dom,xmlやgridbag + cellの自作コンポでほとんど用が足りると思います。
javascript.prototypeのような考えならまた違ったのかもしれませんが、それをいうとあとの祭りなのでしょうね。
それと日本語のswingを扱ったHPは皆無ですね。グーグルでもこのスレがよくヒットします。
ああ、誤解を招きかねないですが、spiなら問題ないですがswingのようなui,skinableではspiや plubableじゃなくてcssや、顧客一人一人に合わせたskin(script)のようにもっと軽く設定できない (つまりskin,look,feelingについては固定の設定は存在しないという設計思想)と、UI開発者は敬遠するかなって思います。 webクリエーチャ達の髪の毛の軽さと同じく、JEditorPaneのhtmlエディタもしかりです。
>>465-466 SwingはJavaプログラマのためのライブラリです。
htmlやcssの方が得意な人のためのライブラリではありません。
SwingにhtmlやcssでUIを設定できないと文句を言うのはお門違いだと思います。
正確に言うとjavaじゃ無くてjvmプラットのUI
xmlならsynthがある。
JEditorPaneは最初はやる気満々だったけど扱おうとするドキュメントが方言だらけで投げた。
というかここら辺のフォローはSwing labの管轄なんだが。
まあ俺々思想が強すぎて
>>465 の意図がよく分からんが。
synthはswing uiに新しい機能を定義したり追加したりするものじゃないですよね・・・
swin sets 3も見てみましたけど、ただ高機能にしただけってところじゃないですかね。 それら機能の追加などカスタムなことをユーザ(開発者)が簡単にできるようにしないと汎用コンポでもないし汎用ライブラリ(javax swing)としても意味ないです。 少なくともjava,c++(qt3,qt4),dotnet,gameライブラリを当たり前のように使える開発者は時間があればそれぐらいのコンポネントは普通に作れますよ。 swing labのコンポネントはnetbeans apiに組み込んじゃったほうがいいんじゃないかと思います。 今はjavafxでしょうし、lgplのようですし、せっかく有用なコンポなのでswtと同じ感じでnetbeansを特に使う人達への特権ってことで。
ブログでやれ
キーバインドの変更だけならInputMap使うほうが素直では。
htmlしかコーディング出来ないスキルでguiやろうってのが無謀。
475 :
デフォルトの名無しさん :2010/06/26(土) 19:50:11
ahe
476 :
デフォルトの名無しさん :2010/07/02(金) 10:14:55
低速だとはおもわない
伝統だから付いてるだけだよ。 # 「Java 高速 GUI SWT」に対する皮肉も込めて…
教えてください。 JFrame→JDialog(モーダル)→JDialog(モーダル)の画面遷移で、 最後のJDialogをdispose()すると、最後のJDialog残像が残るんですが、(何回かやってると) dispose()した後、2番目のJDialogをrepaint()しないといけないもんですか? 実際はもうちょっと複雑で、 2番目のJDialogの中にtableがあってTableのセル内のボタンを押した時に、 3番目のJDialogが開くようになってます。 そこで、選択した物をテーブルに表示するという処理になります。 3番目のJDialogを引数無で作成すると残像は起こらないんですが、 オーナー(2番目のJDialog)を指定してJDialogを作成した場合のみ問題が発生します。
hideしてからdispose
1.5以降ではhide()は推奨されないメソッドになっているため、 JavaDocの通り、setVisible(false)をしてからとか、 windowクラスのtoBack()をしてからdispose()をするなど、 色々と試してみたんですがうまくいきません。(モーダルなのでtoBack()は効くかもわかりませんが(汗)) あとは、windowsの問題かと思い、VM引数のnoddraw=trueでやってみたりもしたんですがダメでした・・ 奥が深いですね・・・
それが再現出来るような説明を付けてバグ報告
3番目のJDialogをEventQueue.invokeAndWait()経由で開いてみるのはどうだろう。
先回りエスパーでinvokeLaterと修正してみるテスト
SwingUtilsですね 確認してみます。 色々と助言ありがとうございます。 解せないのは、 オーナーを指定した場合と、していない場合の動作ですが まだわからないことが多いので勉強してみます。
Apache pivotのWTKって、Swingの補完に使えんのかな。
486 :
デフォルトの名無しさん :2010/07/17(土) 17:38:40
Java SE 6環境でNetBeans6.9を使ってSwing勉強中なんですが、手動でフォーカス制御することができなくて詰んでいます。 調べてみたところフォーカス指定にはFocusTraversalPolicyを自力実装する必要があるようなのですが、 フォーカス順が複数のパネルにまたがっている場合にどうすれば良いのか解りません。 (同一パネル内の場合はsetNextFocusableComponentと同じ動きをするpolicyを実装して想定どおりに動かすことができました) 親JPanelの中にボタンと2つの子JPanel 1, 子JPanel 2を配置して、 それぞれの子パネルにいくつかのコンポーネントが在るような画面で、 子供1と2が混在するフォーカス指定をする方法を教えていただけませんか。 例えば、子1.テキスト1 → 子2.ボタン1 → 子2.ボタン2 → 子1.テキスト2 → 親.ボタン → 子1.テキスト1といった感じです。 長文失礼しました。 よろしくお願いします。
requestFocus()を使うんじゃないの?
ありがとうございます。 そんなのがあったんですね。。。orz
別人が返答してて笑った。 requestFocus()を実行するのは誰の仕事になるんでしょうか。コンポーネントが自分の次が誰なのか知っていないといけない実装は避けたく思っています。 何より次のフォーカスがそのコンポーネントの所属していないパネル上の場合は、 親を経由してしかもその先のパネルの情報まで持っていないとダメな強い依存関係が生まれませんか? と、ここまで書いてきてmediator作れば良いのかなと少し思った。
>>486 親JPanelから子JPanel は参照できるし、依存してもいいんだよね?
やりたいようにフォーカスしてくれる FocusTraversalPolicy 実装して
親JPanelに setFocusTraversalPolicy(policy) するだけじゃない?
>>490 レスありがとうございます。
親Panelに独自traversalPolicyを設定しただけではダメでした。
親に対してsetTraversalPolicyProvider(true)することで期待した動作になりました。
ただ、今度は別のパネルに一度でも切り替えるとrequestFocusInWindow()が動作しない(falseが戻り、フォーカスも当たらない)状況に。
初めから画面遷移とフォーカスでハマると考えていましたけど、まさかここまでとは。
JComboBoxのeditableの値で異なる動作になるとか色々とハマりどころが多いので、
どうやってその辺りのハマり回避と使い勝手のバランスをとるかを考えると難しいですね。
パネルごとにfocustraversalpolicyを切り替える必要がないのなら、フレームに設定したら?
>>491 画面遷移とか、別パネルに切り替えとか後出しで出てくるし…
どういうGUIを作ってるのか書かないとアドバイスのしようもないよ?
# たぶん非標準的UIでSwingを変な使い方して自らハマリ所に突撃してるんだと思うが…
>>492-493 ありがとうございます。
フレームにポリシー設定というのは知りませんでした。
おかげさまで全パネルで自由なフォーカス制御ができるようになりました。
情報が後出しになっているとのご指摘については申し訳ありません。
Swingを学び始めて何をどう実現できるのかを色々と試しているところなので、それぞれの問題はすべて別のプロジェクトになっています。
requestFocus()の問題は、CardLayoutにパネルを2枚add()して片方のパネルのボタンを押すともう片方のパネルを表示(CardLayout#show())する実装で、
初回表示では正しくフォーカスされるのに、2回目以降ではrequestFocusInWindow()がfalseを戻して正しくフォーカスされない状態です。
Swingはブラウザベースのアプリに比べてできることが格段に多いので楽しみながら学ばせてもらってます。
何が実現可能で何が実現困難なのか、ActiveX連携とかOCX周りとかもためしたいなと思ってます。
テキストフィールドにフォーカスが当たった時に背景と文字の色を変えたいと思っています。 テキストフィールドのフォーカスゲインとフォーカスロストのイベントで色指定すればできたのですが 複数のテキストフィールドに対して統一的な設定をする方法があったら教えてもらえないでしょうか。 例えば100個のテキストフィールドがある時にゲインとロストで合わせて200個のメソッドを書かずにすませたいんです。 よろしくお願いします。
>>495 どう考えてもメソッド書くのは2個でいいだろ…
>>496 レスありがとう。
2個ですませられるやり方が知りたいです。
自分の知ってるやり方だとテキストフィールドのインスタンスにリスナー登録するから
インスタンスの数に比例してメソッドの数が増えるんです。
>>497 やり方としては全く同じだと思うが。
FocusListener colorChangeFocusListener = new FocusListener{
public void focusGained(FocusEvent event) {
JComponent target = (JComponent)event.getSource();
target.setBackground(Color.CYAN);
}
public void focusLost(FocusEvent event) {
JComponent target = (JComponent)event.getSource();
target.setBackground(Color.WHITE);
}
}
JTextField[] textFields = new JTextField[10];
for (int i = 0;i < textFields.length;i++){
textFields[i] = new JTextField("Hello");
textFields[i].setColumns(10);
textFields[i].addFocusListener(colorChangeFocusListener);
mainPanel.add(textFields[i]);
}
>>498 サンプルコードありがとうございました。
やっぱり個々のフィールドにリスナー定義というのは避けられないんですね。
内容は498さんのコードそのままになりそうですがリスナーグループみたいなモノが作れないか考えてみます。
>>499 リスナーグループとかって作るのは簡単だろうけどそれって本当に必要なの?
同じ性質のTextFieldを大量につくるんならサブクラス化したっていいんだし
フレーム内のコンポーネントを再帰的にたどってリスナーをセットしてまわるコードだって
簡単に書けるだろうし…
単にコードが汚くなるのが嫌ならファクトリで追い出すくらいにしたほうがいいぞ。
495です。 諸事情でネット使えないところに缶詰めでした。 体は大切にした方がいいよ、ホント。 さて、継承クラスを作るっていうのは思いつきませんでした。 早速作って色変え問題は解決です。 他にも似たような問題がいくつかあったのも同様のやり方で対処できました。 簡単なログイン画面作るだけで60時間とかかかって涙目になったけど今回使った部品のハマりそうなところは一通りハマった気がします。 あとはこのハマりどころをまとめて発表すればおしまい。 ほんとにありがとうございました。
503 :
デフォルトの名無しさん :2010/08/13(金) 04:02:06
Frameを破棄する処理がよくわからず困っています。 ↓のように、生成したFrameにWindowListenerを追加し、 WindowListener.windowClosing()にてdispose()を呼び出すようにしています。 SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Frame frame = new Frame("Frame" + i); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { Window window = e.getWindow(); window.setVisible(false); window.dispose(); } }); frame.setVisible(true); } }); これで閉じるボタンを押すと確かにframeは非表示にはなりますが、 どうもframeのリソースが解放されないようなのです。 小規模かつ小数のウィンドウを生成/破棄するなら特に問題ありませんが、 Frameを拡張したクラスのフィールドに大きな画像などをもたせ、 生成/破棄を繰り返すなんてことをするとヒープ領域不足に陥ってしまいます。 frameを完全に破棄するにはどのように記述すれば良いのでしょうか。
504 :
503 :2010/08/13(金) 06:24:14
自己レスです。 画像などの保持をFrame拡張クラスでなくComponent拡張クラスにさせてFrameにadd、 disposeする前にremoveAll()を呼び出すようにしてみたところ、 画像の分のメモリ領域が回収されるようになり、 ヒープ領域不足にはならなくなりました。 Frameの分のメモリは回収されないので、根本的な解決にはなっていませんが、 取りあえず10000回開閉しても大丈夫だったので、この方向で行こうかと思います。 引き続き、何か良い方法があればよろしくお願いします。
JFrameとかDialog,JDialogじゃないの? imageをfreeしたいなら用途が違うけど、removeNotifyとか近いかも。
どこかでFrameのインスタンスを掴んでいて、オブジェクトリークしてるんじゃね?
FrameかJFrameかはっきりしてSwingならwindowClosing()じゃなくwindowClosed()のほうだな。
508 :
503 :2010/08/17(火) 02:03:33
>505-507 返信ありがとうございます。 java.awt.Frameを使用しています。 Window、JWindow、Dialog、JDialog、JFrameでも試してみましたが、同じ問題が発生しました。 >505 imageも含む、Frameインスタンスをfreeしたいと思っています。 imageのfreeのみであれば、>504の方法で実現できたのですが、 どうもFrame自体はfreeされないようなので、何とかならないかなあという状況です。 removeNotify()はツールキット以外からは呼ばないようにと ドキュメントに記述されていたので、触れないようにしていました。 試しにprintデバッグしてみましたが、 どうやらウィンドウを閉じる過程で内部的に呼び出されているようでした。 >506 リークしないようにFrameへの参照をすべてローカル変数にしてみましたが、ダメでした。 Window.getWindows()で取得できるWindow配列にはdisposeしたウィンドウも含まれていたので、 Windowのstaticフィールドか何かに参照が残っているのかもしれません。 dispose()のドキュメントに以下のような記述がありました。 「Window およびそのサブコンポーネントは、pack または show を呼び出してネイティブリソースを再構築すればふたたび表示可能にできます。 再生された Window およびそのサブコンポーネントの状態は、Window が破棄された時点のそれらのオブジェクトの状態と同じです。 破棄と再生の間の追加変更は考慮されません。」 「破棄された時点のオブジェクトの状態」で再生されるってことは、それがどこかに保存されているってことですよね。 ひょっとして一度Windowを生成したら完全な破棄はできなかったりするんでしょうか。 >507 Swingの場合はwindowClosed()で何かをすれば解決できるということですか?
509 :
503 :2010/08/17(火) 02:30:18
何度も長文ですみません。 検証用のコードは以下のような感じです。 public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { for (int i = 0; i < 10000; ++i) { MyFrame frame = new MyFrame(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { final Window window = e.getWindow(); window.setVisible(false); window.dispose(); for(Window w : Window.getWindows()){ System.out.print(w.getName() + " "); } System.out.println(""); } }); frame.setVisible(true); frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); } } }); }
510 :
503 :2010/08/17(火) 02:33:27
続きです。 private static class MyFrame extends Frame { private final BufferedImage image; private MyFrame() { image = new BufferedImage(1920, 1080, BufferedImage.TYPE_4BYTE_ABGR); } public void removeNotify() { System.out.print("removed, "); super.removeNotify(); } public void addNotify() { System.out.print("added, "); super.addNotify(); } } 実行結果 added, removed, frame0 added, removed, frame0 frame1 added, removed, frame0 frame1 frame2 (略) added, removed, frame0 frame1 frame2 frame3 frame4 frame5 frame6 frame7 frame8 frame9 frame10 frame11 frame12 frame13 added, removed, frame0 frame1 frame2 frame3 frame4 frame5 frame6 frame7 frame8 frame9 frame10 frame11 frame12 frame13 frame14 Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space (略)
GCされたときにフレームへの参照が残ってなければ、Window.getFrames()のリストからも消える。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Hoge { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { (new Timer(50, new ActionListener() { private int count = 0; @Override public void actionPerformed(ActionEvent e) { if(count%5==0) System.gc(); JFrame f = new JFrame(); f.dispose(); System.out.println(Window.getWindows().length); if(count++>50) ((Timer)e.getSource()).stop(); }})).start();}});}}
>>510 でエラーが出てるのは
MyFrame frame = new MyFrame();
でBufferedImageがヒープ食いつくしてるだけ。
Window.dispose()が実際にリソース解放するのはGCが発生したとき。またはいろいろ依存。
GCが発生するより先に
>image = new BufferedImage(1920, 1080,BufferedImage.TYPE_4BYTE_ABGR);
ここでヒープなくなってるだけだ。一回で32MByte食ってるだろ。
disposeする前にimage=nullすれば食いつくさないしdisposeした分もGCしたとき回収される。
513 :
503 :2010/08/17(火) 12:10:50
>511 確認できました。 分かりやすいサンプルをありがとうございます。 >512 解説ありがとうございます。 dispose()してもリソースはすぐには解放されないんですね。 画像の保持をComponentにさせた場合にうまくいったのも、これで理解できた気がします。 おかげさまで何とかなりそうです。 dispose()とGCについて、続けてもう少し勉強してみようと思います。 どうもありがとうございました。
質問させてください。 JFrameをsetFullScreenし全画面表示を行っています。この状態でJOptionPaneなどを呼びだすと JFrameごとJOptionPaneも最小化されてしまい、デスクトップに戻ってしまいます。 タスクバー上で選択すればJOptionPaneの表示されたJFrameが再表示されるのですが、 ユーザの操作なしで画面を再表示することはできないでしょうか?
嘘を嘘と見抜けない人には2chは向いていないと思う
チャンコロの騙されるほうが悪いと同じ理屈だな。
2chはグローバルスタンダードだからな
つまり英語こそが標準言語で、日本語はマイナー言語と。
519 :
514 :2010/09/18(土) 10:45:48
どうやって解決下の価格のは礼儀だろう。 もうシスモンするなよ。
礼儀以前に意味不明なのが多いので迷うけど…同じように悩む人がいるかも知れないので。
JFrameは、ハードウェア支援が受けられる排他モードのフルスクリーンをサポートしています。
でも他のウィンドウを呼んで、フルスクリーン化したウィンドウの手前に出すことはできません。
http://download-llnw.oracle.com/javase/6/docs/api/java/awt/GraphicsDevice.htm どうしても全画面ぽくしたいなら、次のメソッドを組み合わせるとそれらしく動作しますね。
ウィンドウ枠を無くすJFrame#setUndecorated(true)と常に手前に出すようにするJFrame#setAlwaysOnTop(true)、
ウィンドウを最大化するJFrame#.setExtendedState(Frame.MAXIMIZED_BOTH)かJFrame#setSize()でスクリーンの大きさに合わせる。
あとはこのウィンドウをオーナーにしたJDialogあたりを呼び出せば大丈夫。
ただ、本物のフルスクリーンに比べてパフォーマンスは落ちます。
しかし、書き込む前に誤字ぐらい直したら?
>>520 見づらすぎる。
試してないがJInternalFrameにするのは?
>>522 JInternalFrameを置くJDesktopPaneをどこに配置するかの問題と、
子ウィンドウのJDialogかJFrameをJInternalFrameに置き換えるのが多少手間ですね。
まあ、子ウィンドウのContentPaneを取ってきてJInternalFrameにそのまま貼りつけてやれば
なんとかなりそうだけど、問題はJDesktopPaneかな。
親ウィンドウのlayeredPaneかglassPaneに置いてやれば上手くいくような気が…しなくもありません。
自分も考えただけで試してないけど。
やってみた。JLayeredPaneの方は、どうもだめかな。 というのは、下にJTableでもあってスクロールしたりするとJInternalFrameの方がかき消されてしまう。 もちろん描画されてないだけで上にあるから、JInternalFrameの見えない枠をつかんで移動し直せば 描画されるし動かせるけど、ペイントマネージャーを何とかしないと無理そうです。 GlassPaneの方はJFrameにsetGlassPane(new JDesktopPane())で問題なく動作した。 ただ、下のコンポーネントにマウスイベントは伝わっても位置が伝わらないので JScrollPaneの中のコンポーネントでgetViewPort().getMousePosition()とかしたりしてるとnullが帰ってくる。 GlassPaneで凝った表示とかさせてなければ、これでもいいかも。
とはいえ、JInternalFrameの移動が遅いのでほとんどメリットはないかもしれません。 いろいろsetDoubleBuffered(true)したけど、どうも変わらないし。 小さなウィンドウならいいけど、それなりの大きさのを動かすと重いです。
これはひどい。 >In Java 1.6 the upcoming dialog is damaged and in the upper left corner. とあるけど、こちらでは呼び出したJDialogにフォーカスが合わないし、操作すると 下の全画面ウィンドウがちらついて、タスクバーが見え隠れします。 閉じるボタンを連打するとなんとか閉じられる。 おそらく全画面化したフレームからフォーカスが外れると排他モードから抜けるんだろうけど・・・
vistaか7じゃないだろうな
Vistaでも再現するようだが
こんな過疎スレにurlだけはってもただの宣伝だから使用レビューくらい貼れ。
>>530 じゃないけど使ってみたよ。
サクサク動くし、生成されたコードがきれい(変なタグが入ったりしない)で、思い通りにポトペタすることができたよ。
SWTでだけど、レイアウトを間違えてAbsoluteLayoutでやってて、途中でFormLayoutにしたらまったく見た目変わらずコンバートしてくれたのには驚いたw
とにかく細部まで作りこまれてて完成度が高いと思った。
まだ今のところは気になる点はないね。
>>533 何か問題ある?
仮にEclipse使いじゃなかったとしても、GUI生成のためだけに導入ってのもありだと思うけど。
>>534 5、6年前なら説得力あっただろうけど、今さらイラン
>>532 jiglooより使いやすいでしょうか?
かなり使いやすいよ つーか533は何が使いたいんだw
windowbuilderは元々日本円で4万位の有償ソフトだしなあ。 実際の開発案件で採用したこともあるよ。 GUI系のツールの中ではトップレベルに使いやすいと思う。 ただ、気になる点もいくつかあった。 1.GUIとソースがタブ切り替えになってて、その切り替えが遅い(タブ切り替えの都度コンパイルから初期化までのロジックを実行してる)。 2.自動生成のテンプレから逸脱したGUI初期化ロジックを組むと、その部分がGUIの編集画面に反映されない。 3.いくつかのレイアウトでは冗長なコードが生成される。 NetBeansで開発してて、生成ロジック部分が編集不可なことに苛ついた人にはオススメ。
そういうの、EclipseでJAVAを普通に使ってる人は金払ってライセンスを受けている。 いまさらだけどエクリプス使いの日曜プログラマーにはおすすめかもね。
>>539 >金払ってライセンスを受けている。
そりゃそうだけどタダで公開して環境を簡単に揃えられることに意味があるんじゃないのか?
そのためにわざわざ買い取ったの公開したんじゃないの。
WindowBuilder Proのフリーってビール的フリーだけ?
>>540 とするとnetbeansで何かダメなところがあるのか?
540じゃないけど、 netBeansも良い開発環境だと思う。 ただ、参画するプロジェクトで指定されるのはeclipseの方が多いかな。 IB◯が絡んでるとほぼ確実にRADが指定されるし。 まああれです、両方とも使えるようになっておくのが一番。
うちも個人ではNetBeansに乗り換えたんだが、 仕事ではプロジェクトでEclipse指定されることが多いな… # IB◯は絡んでない仕事でもそんな感じ
IBMとか関係なくGUI使うプロジェクトだけNetBeansだったな。 あとはEclipseがデファクトすぎてどうにもならない。
両刀の俺にはどっちもいける
ちょっと質問いいかな。 GUIアプリ作る時ってJFrameを継承したサブクラスをわざわざ作って そのクラスをベースにGUIを構築するけど これってどんな利点があるの? インスタンス名を省略できることくらいしか利点が思いつかないんだが。
独立したコンポーネントとして捕らえれば自然な考えでしょ。 別にリスナーとかを独立して管理したければそうすればいいよ。 デスクトップアプリはMVCのVとCがくっ付いてるのが普通だと思うけど。
別に継承する必要ないから俺はJFrameそのまま使う VとCを分離したっていいじゃん?
ダメとは言ってないだろw
MVCの話はさておき、 将来アプレットにするかもしれないとか計画があるんなら、 自作する最上位ビューはJPanel継承したコンポーネントにしておくかな。 あとはJAppletでもJFrameでも好きなコンテナにハメてくださいってかんじで
>>552 会社で設計するときは、こうだね。
フレームワークが使うから。
話がそれるが、GUIアプリの教本なんかでJFrameやらコンポーネントを継承したクラスに さらにリスナをimplimentsしてるコードをみるとイラッとくるんだがおかしいだろうか?
>>545 自分は数行のコードならAddListenerの引数中で無名クラスに実装してそこで見られるようにしておくが。
VisualEditorが吐くように。
まああまり長くなると見にくいので分離するけど。
556 :
555 :2010/10/08(金) 02:48:02
実際の開発ではみんなロジック分離してるんじゃないか? public class hoge extends JFrame implements ActionListener {} は教本かなにかの名残だろ。
558 :
デフォルトの名無しさん :2010/10/08(金) 22:30:56
何でイラっとくるの?
implements 〜Listener でイベントのソースを見ないで処理してたりすると サブクラス化が面倒だったり
JTreeで空フォルダを実現するには オーナードローするしかないの?
javax.swing.tree.TreeNode#isLeaf()でfalse返すようにするんじゃダメだったっけか? まぁ、自前でアイコンつけちゃう方が楽かも知れんけど。
お、なるほど isLeaf ですか ありがとうございます
ツリーのノードをreloadすると そのノード以下のフォルダが閉じてしまうのは不可避?
reload後に自分で展開するしかなかろう
やはりそうなのか・・・
>>564 下のようにするとreload後も閉じないよ
Enumeration expandEnum = jtree.getExpandedDescendants(tree.getPathForRow(0));
reload();
if(expandEnum == null){
//もともと何も開かれていない
}
else{
//ここで元通り開く
while(expandEnum.hasMoreElements()){
jtree.expandPath((TreePath)expandEnum.nextElement());
}
}
なるほど、それで全ノード列挙できるんですね うまくいきました ありがとうございます
Swingの勉強にどんな本使ってる? 2000年絶版のBlackBookのSwing版か、Java GUIプログラミング〈Vol.3〉さらにパワーアップしたSwing を購入しようと思ってるんだけど、ほかに良さそうなのある?
本買わなくてもJavaTutorialだけでいいような
>>569 そこの会社だったかその本のシリーズが無くなったからそのシリーズ未完だけどもう出ないぞ。
>>570 本だとPCつけなくてもどこでも読めるし、何かと便利だから欲しいんだよね
>>571 BlackBookの方はもう中古じゃないと売ってないね
だいぶ古いけど同シリーズのJAVAプログラミングが良かったから、Swing版もいいかもなと
>>572 PCが起動していない時間があることにちょっと驚いた
>>570 ていうか重要なことをあんなチュートリアルに置くなと思った。
Windows の Java1.4〜6。JInternalFrame と DnD。 ドロップ先のコンポーネントを別の JInternalFrame で隠しても、判定が透けてしまう。 (Container#getMouseEventTargetImplの仕様) ずーと多用してたのに、今日はじめて気がついた。 個々の JInternalFrame に、すべてを reject する DropTarget をくっつけるか、 dragOver で、別の JInternalFrame に隠されていないかチェックして reject すれば対処できた。 でも、JDesktopPane (つまり JLayeredPane) ではデフォでそうなるようにしていいと思うんだが・・・
MDIなんて死滅してるから見放されてるんじゃない
578 :
デフォルトの名無しさん :2010/10/21(木) 21:19:46
sf.netのJMIDILayerにaward与えるってメールがきてた ワクテカしてサイト見に行ったら スパイウェアとマルウェアとウイルスのない100%Awardってやつだった 俺様m9 まあ、Windowsで開発していたのにMACで動作確認されてて助かりました SwingもMDIも現役です。 今は人様のJSynthLibに浮気してる。 SwingもMDIも現役です。
MDIなくてもいいっていう人はタブがあればOKな人? データいっぱい比較したい時どうすんの? ツールバー付きのメインウィンドウたくさん出すの?
580 :
デフォルトの名無しさん :2010/10/22(金) 12:13:57
CopyRect
>>579 比較が重要な要件なら比較機能をつけるべき、
ユーザがウィンドウを並べて目で見て比較って
のが既に微妙なんじゃないかと…
# 工数的にとか予算的にそういうところに落ち着くことはありますけど…
>>581 もちろん差がしきい値以上なら強調するとか、対策はしてる。
でも研究用のツールとかだとセルをなめて見るなんてのもざらです。
>>570 swingのチュートリアルなんてあったっけ?
もしかしてピアソンエデュケーションのJavaチュートリアルの章のこと?
以前のように Java Tutorials のダウンロード版が公開されることを期待してます。
セル内に大きなサイズの画像を表示させるときに セル内でスクロールさせて表示することはできますか?
>>585 URLだけ生きてない?
前のjavadocとかリンクないけど鯖においたままなのが大量にあるよ
589 :
デフォルトの名無しさん :2010/11/05(金) 19:38:48
Windows7(aero)のLookAndFeel(WindowsとNimbus)って JButtonのsetBorderPainted( false ) に対応しないの? たぶんLookAndFeelの仕様なのかもしれないけど こういうのってきちんと修正されるの?
そもそもボーダーのユーザー設定を素直に聞いてくれるLaFは少ない。そういうもん。 "ユーザー設定のボーダー"をどうしても"描画したい"というならJPanelに放り込んでパネルにボーダー設定する方法があるが、消したいとなるとLaF次第。
消すんであれば setBorder(null) すればいいんでないの
まぁ
>>589 の言いたいのは単に「バグだ」ってことなんだろうけど
俺もWindows7だけどJMenuBerのsetMnemonicの動作もおかしいね。 Altキー押すとメニューにフォーカスはされるんだけどキー押してもメニューの展開がされない。 同時押ししないとメニューが開けない・・・。 これWinのGUIで一番大事な機能なのにな。
Synth LaFって人気ないよね。学習が難しいのかな。
いちおー使ってんだけど、ほかで見かけないんだよなー 背景画像の引き延ばしはできても繰り返しがない?のがちと不便 それはともかくバランスのいいデザインにするのがむずい
SubなんとかってLaFがなかったっけ?あれはSynthだよね 他では聴いたことがない。
596 :
デフォルトの名無しさん :2010/11/08(月) 15:48:28
WindowBuilder Proは無料で使えるの?
598 :
デフォルトの名無しさん :2010/11/08(月) 19:55:58
>>597 サンキュー。早速入れてみた。カッコウイイなこれ。ところでswing使えるんだが
SWT使えないの?なんかエラーになるんだが・・・
599 :
598 :2010/11/08(月) 20:10:13
できた!ビルドパス通さないといけないのね。
JTextArea使用中にAltキーを押すとメニューバーにフォーカスが移ってしまうんですが、 これを無効化する方法ってないですか。 テキストの編集中にのみフォーカスの移動を制御したいのですが。
>>600 まったく検証してないから的外れなこと書いてたらすまん。
当該テキストエリア(またはアプリ全体)のKeyEvent拾ってAltを検出できるか確認。
検出できるなら条件指定してイベントをつぶせばいいはず。
検出できないならOSレベル(またはJavaVM)で処理が終わってると思われるので難しそう。
または、Documentクラスで入力チェックできるか確認。
こっちはクラスの使用目的考えるとイレギュラーな匂いがする。
ツッコミおまちしてます。
>>600 JMenuBar じゃなくて MenuBar の場合かな。
なお、JMenuBar であればフォーカスは移らないが、その代わり、[Alt]押した後、文字は打ち込めるが、
[↓]押すと Windows の「移動」「サイズ変更」... のコンテキストメニューが出る。(W2K+JDK5)
キーを押すと JFrame がイベントをディスパッチし、DefaultKeyboardFocusManager に処理がわたり、
下って下って、例えば JTextArea に行く。
その後上って上って、DefaultKeyboardFocusManager に戻り、
結局なんだかんだで native メソッドに処理がわたっているらしい。
MenuBar の場合も Windows のコンテキストメニューの場合も、同じらしい。
(らしい、というのは反証がないか調べて尽くしてないから)
そこまでの間に、どこかで KetEvent#consume すればいい。
手っ取りばやくはこれでどうかな。
JTextArea a = new JTextArea() {
protected void processKeyEvent(KeyEvent e) {
super.processKeyEvent(e);
//ここまでで IME の処理も終わってるはず(定かではない)。
//consume されておらずかつ [Alt]単押しの場合にのみ作用。
//MenuBar でも JMenuBar でも対応できる。
if (! e.isConsumed() && e.getModifiers() == KeyEvent.ALT_MASK) {
e.consume();
}
}
};
JFrame でディスパッチする前につぶしてもいいかもしれない。
上の[Alt]単押しってのは、[Alt]PRESS イベントのときを想定してるだけなので、 その次にやってくる 「[Alt]+[ローマ字]」のイベントなどは、つぶれてしまう可能性がある。 とはいえ実際はソースに書いたように IME の処理は終了済みなので、問題はないと思う。 JFrame がディスパッチするまえにつぶすとそうは行かない。 「[Alt]に間違って触れたとき」の予防なのか、 「フォーカス制御した挙句、さらに特殊な処理をしたい」のか、 必要な処理に応じて厳密な調べ方を加えて下さい。
質問です。 現在JFrame上からファイルをPC上にドラッグ&ドロップでコピーを行うプログラムを組んでいます。 しかしファイル名が英字なら動作するのですが日本語ファイル名だとコピーが行われません。 特に例外が発生しているわけでもないので原因もよく分かりません・・・。 ファイルパスをSJISでのエンコードしてからFileを生成したりと色々試してはみたのですがだめでした。 どなたかこのような現象を解決した方はおられますか?
PC上? そもそもJFrame上と言われても、その説明ではJFrameの上に 何を置いてファイル操作のGUIを実現してるのかさっぱりわからんよ
>>604 JLabel に自作の TransferHandlerあてこんで、Transferable 実装して、
javaFileListFlavor で java.util.List(ArrayList) 渡すっていう意味でいいのかな。
今そう作って試してみたら俺の環境ではできた。
"E:\\temp\\アドレス帳.txt" ファイルを、
"E:\\temp" 以外にコピーできる、Excel で開ける、Word に貼り付けられる。など。
XP と JRE6、Windows2000 と JRE5、Windows2000 と JDK1.4。
できちゃった以上俺には解決できないかもしれないけど、
OSとJREが何か書いてみたら? あと必要だと思ったらソースも。
せめてOSくらい書いて欲しいところだな…
DnD APIでファイルリストの処理するくらいならOS差はないからDnD関係ないところでミスってる可能性があるな
>>606 コードまで作ってくださりありがとうございます。
ほぼ私の作成していたコードと同じ内容です。
しかし実行してみたところやはりコピーが行われませんでした。
となると環境が問題なんですかね・・・?
OSは7、JREは6を用いていて、同じく7を用いている友人も動作しなかったようです。
>>610 Windows7 64bitだけど、1.6.0_21で動いたよ。
JTableテーブルについて質問なんですけど、 大量の複数のスレッドから一斉にテーブルにアクセスしてテーブルの内容を更新したい場合、 それぞれのスレッドでSwingUtils.invleLaterを使って更新処理をすればいいんでしょうか?
>>610 ファイルの絶対パスを file.encoding にしたがって
byte[] bs = file.getCanonicalPath().getBytes() して VM外に送出してるらしい
なので file.encoding を変えれば動くのかもしれない
でも特にミスしてないかぎり わざわざそんな必要性なさそうだよな
615 :
デフォルトの名無しさん :2010/11/12(金) 14:29:00
WINSCPみたいのってSwingで作れる?
scpのプロトコルは実装可能なんだから、可能じゃね?
どの部分を懸念してるのか書くともう少し的確に答えられる
Java初心者です。 メニューからファイルを開き、画像(JPEG)をパネル上に表示させるというプログラムを書いているのですが 上手くいきません。 本・ネット等色々調べたのですが、解決できませんでした。 具体的には JMenuItem openmenu = new JMenuItem("開く");を押すとイベントが発生し JFileChooserで開きたい画像を選択 その画像をJPanelに表示させる という流れです よろしくお願いします
まずはその上手くいかなかったプログラムを見せた方がよい
>>619 ご指摘ありがとうございます
少々長くなりますがお願いします
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Modelling");
setSize(800, 700);
JPanel p = new JPanel();
p.setPreferredSize(new Dimension(300, 700));//大きさ指定
p.setBackground(Color.ORANGE);
p.setLayout(null);//これにより座標で配置できるようになる
JPanel p2 = new JPanel();
p2.setPreferredSize(new Dimension(500, 700));
p2.setBackground(Color.GRAY);
JMenuBar menuBar = new JMenuBar();
JMenu menu1 = new JMenu("ファイル");
menuBar.add(menu1);
JMenuItem openmenu = new JMenuItem("開く");
setJMenuBar(menuBar);
public void actionPerformed(ActionEvent e){
if (e.getActionCommand() == "開く"){
//開くが押されたときの処理
JFileChooser filechooser = new JFileChooser();
Icon icon = new ImageIcon(filechooser.getSelectedFile().getPath());
JLabel label4 = new JLabel(icon2);
p2.add(label)4;
}
すみません p2.add(label)4;→p2.add(label4) です パネルp2に画像を表示させたいです;
1.コンパイルできるものを書く 2.最低限必要な部分だけ書く それくらいはがんばってください
import javax.swing.*; import java.awt.*; import java.io.File; import java.awt.event.*; public class ModelTest extends JFrame implements ActionListener{ Modelling frame; public JPanel p,p2,p3; JButton bt1,bt2,bt3; JMenuBar menuBar; JMenu menu1; JMenuItem openmenu,savemenu,closemenu; JLabel label4; ImageIcon icon1,icon2; JFileChooser filechooser; String filename; String name=""; public static void main(String [] args) { //フレームの作製 ModelTest frame = new ModelTest(); frame.setVisible(true); }
ModelTest() {//コンストラクタで初期画面表示部品の配置を行う //////////// //フレーム// //////////// //getContentPane().setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Modelling"); setSize(800, 700); //setLocationRelativeTo(null); //アイコンの表示 ImageIcon icon1 = new ImageIcon("./icon.gif"); setIconImage(icon1.getImage()); ////////// //パネル// ////////// JPanel p = new JPanel(); p.setPreferredSize(new Dimension(300, 700));//大きさ指定 p.setBackground(Color.ORANGE); p.setLayout(null);//これにより座標で配置できるようになる //パネル2画像表示用 JPanel p2 = new JPanel(); p2.setPreferredSize(new Dimension(500, 700)); p2.setBackground(Color.GRAY);
JButton bt1 = new JButton("ボタン1"); bt1.setBounds(10, 50, 80, 30); JButton bt2 = new JButton("ボタン2"); bt2.setBounds(10, 90, 80, 30); //ボタン配置 p.add(bt1); p.add(bt2); //パネル配置 Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.WEST); contentPane.add(p2,BorderLayout.EAST); //////////// //メニュー// //////////// JMenuBar menuBar = new JMenuBar(); JMenu menu1 = new JMenu("ファイル"); menuBar.add(menu1); JMenuItem openmenu = new JMenuItem("開く"); JMenuItem savemenu = new JMenuItem("保存"); JMenuItem closemenu = new JMenuItem("閉じる"); menu1.add(openmenu); menu1.add(savemenu); menu1.add(closemenu); //イベント openmenu.addActionListener(this); closemenu.addActionListener(this); setJMenuBar(menuBar);
public void actionPerformed(ActionEvent e){ if (e.getActionCommand() == "開く"){ //開くが押されたときの処理 File dir = new File("C:\\pleiades-e3.6-java-jre_20101025\\workspace\\Modelling"); JFileChooser filechooser = new JFileChooser(); int selected = filechooser.showOpenDialog(this); if (selected == JFileChooser.APPROVE_OPTION){ //name= chooser.getSelectedFile().getPath(); File file = filechooser.getSelectedFile(); ImageIcon icon2 = new ImageIcon("filechooser.getSelectedFile().getPath()"); JLabel label4 = new JLabel(icon2); p2.add(label4); } } if (e.getActionCommand() == "保存"){ //保存が押されたときの処理 } if(e.getActionCommand() == "閉じる"){ //閉じるが押されたときの処理 System.exit(0); } } }
よろしくお願いします。
>>626 File dir = new File("C:\\pleiades-e3.6-java-jre_20101025\\workspace\\Modelling");
JFileChooser filechooser = new JFileChooser();
↓
JFileChooser filechooser = new JFileChooser();
です
色々ミスがありまして、すみません
icon1,p1,p2,bt1,bt2,その他以下略がコンストラクタ内でローカル変数として宣言されているせいでModelTestのフィールドが設定されていない コンストラクタ内の JPanel p2 = new JPanel(); とかは p2 = new JPanel(); などとして、新しいローカル変数を作らないようにする いったん表示した後に新しいコンポーネントをaddするなどレイアウトが変わるときはrevalidateを呼ぶ必要がある p2.add(label4); の後に p2.revalidate(); を あとは × ImageIcon icon2 = new ImageIcon("filechooser.getSelectedFile().getPath()"); ○ ImageIcon icon2 = new ImageIcon(filechooser.getSelectedFile().getPath());
それから2レス以上要るような長いソースはどこかにうpしてくれ・・・
>>629 アドバイス通りに変更したところ画像を表示することができました。
本当にありがとうございます!
revalidateというのを知らなかったので、とても参考になりました。
そして自分の調べが足りませんでした…
重ねてお礼申し上げます。
ありがとうございます。
こういうスレに書き込み自体が初めてだったので勝手がわかりませんでした。
今後はソースはうpということを念頭に置いておきます。
失礼いたしました。
次は、大きな画像がはみ出さないように表示する
ということにチャレンジしてみたいと思います!
何回もしつこいとは思いますがが、本当にありがとうございました!
死ね
633 :
デフォルトの名無しさん :2010/11/15(月) 15:41:11
通報しました
635 :
デフォルトの名無しさん :2010/11/26(金) 20:33:00
age
636 :
デフォルトの名無しさん :2010/11/26(金) 22:08:54
頻出の質問かもしれませんが、うまく調べられませんでした。 環境はJRE6です。 JTableのヘッダについて、以下の順序で作ったテーブルをスクロール すると、新しく表示される部分が正しく描画されません。 たとえば右にスクロールすると、スクロール開始前の右端の数ピクセルが 繰り返し描画されます(右端にFと描画されている時はFFFFFFFFFが続きます) スクロールを戻すと、最初に描画されていた範囲は正しい描画のままです。 テーブル本体は正しく描画されています。 1.new JTable() 2. setModel(new MyModel())を使ってモデルをセット。 (モデルはAbstractTableModelを継承させていて、 列数(20)、行数(20)、返す値("nulpo")を定数で返す様に定義しています。) 3.setAutoResizeModeでAUTO_RESIZE_OFFをセット。 4. JScrollPaneにsetViewportViewでセット 5. JScrollPaneをフレームにセット 6. jTable.getTableHeader().setPreferredSize(new Dimension(100,30)) すいません、もう一つ質問があります。 JTableにセルエディタとしてJListをそのまま使った場合、 セルの表示域までしかJListが表示されなくて使えませんでした。 この場合は、どのようにすれば正しく実装できるのでしょうか? Ctrlで複数選択できる機能が付いたコンボボックスの様な動作を期待しています。 JComboboxじゃなくJListを使おと思った理由は複数選択がしたかったからです。 JCombobox->AccesibleContext->JList->setSelectionMode という方法も試してみましたが、単一選択しかできませんでした。 以上です。長文失礼しました。
>>636 >jTable.getTableHeader().setPreferredSize(new Dimension(100,30))
んなことするからじゃないの。
縦幅指定したかったのなら Renderer 作るかなんかしたらどうじゃ。
table.getTableHeader().setDefaultRenderer(new TableCellRenderer() {
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column
) {
JLabel label = new JLabel(table.getColumnName(column));
label.setPreferredSize(new Dimension(100, 30));
label.setBorder(new BevelBorder(BevelBorder.RAISED));
return label;
}
});
ん、違うか。 まぁいいや。イケてる人の突っ込み待ってくんろ。
640 :
デフォルトの名無しさん :2010/11/26(金) 23:49:21
これからSwingを使って開発する人が参考にすべき美しいソースコードの例ってありますか? サンプルコードじゃなくて実際のソフトウェアのソースコードがいいです。 gitとかsvnでとってこれるとうれしい。
NetBeans
643 :
615 :2010/12/05(日) 20:39:10
FTPとSCPは別物ですぜ?
>>643 その程度のことを人に聞かなきゃ分からん奴には作れない
646 :
615 :2010/12/06(月) 16:54:45
どういうの使えばwinscpみたいの創れるの?
apache antがscpタスクの実装にjcraftのjschというのを使っている。
649 :
615 :2010/12/06(月) 20:21:10
>>648 わざわざありがとうございます。勉強します。
真面目にそれなりの規模のソフトを書こうと思うと、最低でも数ヶ月、 下手すりゃ何年も手を入れ続けることになる。 俺もそうだし。 あんまり精神論語るのもアレだけど、それでもやろうってモチベーションと、 最低限自分で出来るところまでは自分で頑張る気概がなければせいぜい Hello World!に毛が生えたくらいのコードしか書けないよ。 今はGoogle先生が1円も払わずに色々教えてくれるんだから自分で 出来るとこまではやりなよ。 ま、頑張って。 良いソフトかけたらここで教えてくれ。
651 :
615 :2010/12/07(火) 06:19:51
>>650 そうなんですか。甘く見てました。早速コード見てみたらあまりの多さにびっくりしました。c++理解してないと無理そうですね。Javaとは別にc++勉強します。
色々とありがとうございました。
>>615 まずググれ。
「Java scp」で検索するだけで掃いて捨てるほど
使えそうなサンプルが出てくるのになぜここで聞く?
自分で調べるのが面倒だからとか言ったら張り倒すよ。
自分で何とかしようとした上でわからなければ力を貸すけど、
そうじゃなきゃ誰も協力しないよ。
俺は別にwinscpのコードが読めなくても構わないと思う。
winzipのコード読めないがJavaでZIPの圧縮解凍するコード書いてるし。
ただ読めて損は無いから頑張ってや。
653 :
615 :2010/12/07(火) 18:35:08
>>652 ググった上で聞きました(java scp等)。
正直一人で調べてやっていると
今自分がやっているのが本当にあっているのかすら
わからない状態になってしまい、
途方にくれてしまったので。
コマンドプロンプト状態とGUI状態では
また別物なので混乱してしまいました。
特にswingは処理長いものをやると固まるし、
swingworkerもなかなか・・・
申し訳ない
>特にswingは処理長いものをやると固まるし、 Swing関係ない。 多くのGUIツールキットはシングルスレッドで、そのスレッド上で長い処理を行うと固まるのは当然のこと。
655 :
615 :2010/12/08(水) 11:23:38
正直なところSwingとAWTってどっちが速いの? なんかAWTはシステムデフォルトのGUIを呼び出してるっぽいし、 そっちのほうが速い気がするんだけど。
「速い」の定義による。
SWTが一番速い
>>657 実際速いかどうかはしらんが。
SwingのJFileChooserなんかと比べると
AWTのFileDialogほうが高機能ではある。
SwingのGUIはJVM独自で描画してるから、
それがネイティブのGUIに勝っているのであれば速いんじゃまいか。
661 :
デフォルトの名無しさん :2011/01/20(木) 09:28:50
Swing後のGUIって何? もしかいて無いの?
Java 7 で Swing Application Framework の追加が予定されている
SWT
AppFrameworkならJava 8に回されたよ。 しかも開発が終了してるので今後メンテされることはないよ。
>>536 The Jigloo SWT/Swing GUI Builder is free for NON-COMMERCIAL use only.
666 :
名無しさん :2011/02/01(火) 06:48:45
参考になるSwingのオープンソースはどのようなものがありますか? 部分的なサンプルはよくみかけるのですが
kodersとかgoogleソースコード検索で探すといいよ
いいよね
Javaがデスクトップで流行らなかったのはGUIだよね。 遅いダサい作り辛い。 ま個人的にはMetalは好きなんだけど。 .netになれた自分としてはSwingはよーわからん・・
Metalがダサいというかフォントが酷かったな。 あの汚いフォントで使いづらいファイル選択ダイアログとか出すから、 一瞬でアンインストールされるフラグ立っちゃうんだよ。
フォントって変えられないの? クリアフォントが使えないことを言っているんだろうが、 個人的には気にならんが。
確かにデフォルトで表示されるフォントはもうちょっと考えればよかったのにな。 Emacsでもメイリオにしちゃう俺が言うのもなんだがw
673 :
デフォルトの名無しさん :2011/02/08(火) 23:59:10
MVCモデルで設計した場合について質問です。 あるJFrameとListenerとControllerをすべて別クラスにする場合はどのようなクラス構成がいいのでしょうか?まず思いついたのがこんなのなんです。 public class Controller{ public void init (){ Model mode = new Model(); ViewListener viewListener = new ViewListener(this); View view = new View(viewListener); } public void helloWorld(){ System.out.println("Hello World"); } } public class ViewListener extends ActionListener{ private Controller controller; public ViewListener(Controller controller){ this.controller = controller; } @Override public void actionPerformed(ActionEvent e) { controller.helloWorld(); } } public class View{ puclic View(ActionListener viewListener){ this.addActionListener(viewListener) } } けどこれの場合JFrameが子画面の子画面の子画面みたいなときに、コンストラクタにひたすらActionListenerを伝って渡していかなければいけないので余り綺麗に思えません。 それを解決するためにActionListenerシングルトンにしてしまって、利用するviewでViewListener.getInstance()みたいにするのは問題ないのでしょうか? また画面ごとに別のActionListenerを追加したい場合、引数がひどいことになってしまいます。 あともしViewの値をModelの処理に利用したい場合は、helloWorldメソッドの中で、view.getTextField().getText()みたいに呼べばいいのでしょうか? これも子画面の子画面の子画面みたいなときはview.getView2().getView3().getTextField().getText()みたいになってしまい余りかっこよくないです。 ListenerとViewのクラスが分かれてなければactionPerformedメソッドの中でtextFieldの値を取得して、helloWorldの引数に渡すとか簡単なんでしょうけど
ViewListenerってのを、Controllerのannonymous innerクラスにすると、 なにかまずいの? あと、 View view = new View(viewListener); じゃなくて、 View view = new View(); view.addActionListener(viewListener); の方が良いと思う。
675 :
名無しさん :2011/02/10(木) 07:39:27
>>674 コンストラクタに渡していたのは、自分で処理させた方が綺麗かなと思っただけであまり意味はないです
確かにそれの方が渡す引数を1階層減らせていいですね
viewが複数階層ある場合は、コンストラクタに渡していかなければいけないのは、どうしようもないのですかね
676 :
デフォルトの名無しさん :2011/02/10(木) 13:52:16
>viewが複数階層ある場合は、コンストラクタに渡していかなければいけないのは、どうしようもないのですかね addViewListener()メソッドが子viewに対してもaddViewListenerすればいいのでは? 「複数階層」というのがどんなものをイメージしているのかわからないけど、 レイアウト的な意味での階層(java.awt.Container)と、 viewの階層(アプリケーションドメインの階層)は切り離して考えていいと思う。 具体的には、ViewManagerみたいな入れ物クラスを作って、 内部のレイアウト階層がどうであれ、子viewに対してフラットに(=たとえば配列で) アクセスできる仕組みをつくるとか。
677 :
デフォルトの名無しさん :2011/02/10(木) 14:08:17
通報しました
678 :
名無しさん :2011/02/10(木) 20:15:48
>>676 なるほどー 切り離しちゃってViewは1つのマネージャーで管理しちゃってもいいんですね
なんかオブジェクト指向という名前に釣られてどうしても現実とリンクさせてしまいがちです
Swingはコンポーネントの解説は調べれば出てくるんですけど、そういう構造をどうしたほうがいいみたいな資料がないので困っていたんですが助かりました!
そこで更に疑問なのですが、私が想定しているアプリならメソッドや変数はそんなに多くはならないんですけど、結構大きくなった場合はどのように分割するんですかね
Eclipseみたいな大規模なものはどういう構造になってるんだろうと思ってソース見てみましたがちんぷんかんぷんでしたw
うざい
ActionListenerがどのViewに充てられるかは、ViewよりもControllerに担わせた方がいい。 Viewの中身は、配置や大きさのようにひたすら表示に関することのみに専念するべき。 ViewのModelを取りたい場合は、PropertyChangeListenerを充てて取得する。
そこまでする必要性が感じられない
Swingに限らずMVC分離するとき、
Viewは、どのControllerやどんなModelが充てられるかは知らない。
Modelは、どんなControllerに保持されるかは知らない。
素直にやればこんなかんじになる
http://pastebin.com/BjKH9md5 Viewが増えたらViewを増やせばいいし、
Controllerが増えたらそれを増やせばいい。
ListenerはControllerだから、外部クラスにしたっていい。
>>680 addActionListenerはControllerでViewにActionListenerを渡すんではなく、ControllerでViewを取得してActionListenerをした方がいいということですか?
○
ViewManager{
private View1 view1 = new View1();
private View2 view2 = new View2(); // getter省略
}
Controller{
private ViewManager vm = new ViewManager();
public void init(){
vm.getView1().addActionListener(new View1ActionListener(this));
vm.getView2().addActionListener(new View2ActionListener(this)); } }
×
ViewManager{
private View1 view1 = new View1();
private View2 view2 = new View2();
public void addActionListener1(ActionListener actionListener){
view1.addActionListener(actionListener);
}
public void addActionListener2(ActionListener actionListener){
view2.addActionListener(actionListener);
}
}
Controller{
private ViewManager vm = new ViewManager();
public void init(){
vm.addActionListener1(new View1ActionListener(this));
vm.addActionListener2(new View2ActionListener(this));
}
}
>>683 そういうこと
×の方で書いてしまったとしても、リファクタリングすると自然と○のコードになる。
×のViewManagerは、継承クラスを作られることが(まず)無いので、
addActionListener1内の処理はメソッドである必要が無くなる
SwingXの成果物全部マージしてくれ。 JXDatePickerとかJXTaskPaneとかJXBusyLabelとかJXCollapsiblePaneとか便利すぎるだろ。 だがJXTipOfTheDay・・・てめぇは要らねぇ!!
686 :
デフォルトの名無しさん :2011/02/16(水) 08:31:01
1.6.0_23になってからサブメニューの位置が左にずれてしまった... 1.6.0_22までは問題無かったのに
Swingって最初はつっかいずれーなーと思ってたけど 慣れてくるとなかなかどーして 結構気に入った
GUIビルダ .netを先に経験してるとけったいなことこの上ない でも、SwingってGUIビルダ使うよりコードで書いた方が 気持ちいいことに気づいたら気に入った
Swingに限らず、一週間で帳票画面100枚作らなければならない人とかでない限り GUIビルダなんていらんと思うんだ
nebeansのエディタで組んでeclipseで書くのが結構いい。
>>687 挫折する人が多いのにどこが気に入ったの?
質問なんですが、 通信用の子スレッドを作って、常にListen状態にしておき、受信データをメインスレッドのGUI部品に表示させたいんですが、 子スレッドから、親スレッドの部品にアクセスするにはどうすればいいんでしょうか?
EventQueue.invokeLater
>>692 普通に考えて挫折した人の気持ちなんてわかんないだろ
スロットゲームみたいに一枚絵を上から下に決められた枠内だけに描画して それを繰り返すってのはどうすればいいですかね
>>696 Graphics#setClip
Graphics#drawImage
for文
>>692 DelphiとかC#あたりから入ったから最初にSwingさわった時は
ギャップが大きくて訳ワカメだったけど
その後AndroidいじくってるうちにJava脳が鍛えられてたんだとオモw
class Foo(object): pass f = Foo() f.bar = 'a' setattr(f, 'baz', lambda self: 'b' + self.bar) f.bar 'a' f.baz() 'ba'
>>696 スクロールバーなしのJScrollPaneに画像付きJLabel表示させて自前でスクロールさせるのがたぶん早い。
縦にJLabel二つ並べてギッコンバッタンさせれば客にはばれないだろう。
JViewportに適切な指示を出しとけば、ハードウェア支援を受けることも可能かも。
>>698 Androidって言語にjava使ってるだけであんまりjavaっぽくないぞ。
702 :
デフォルトの名無しさん :2011/03/01(火) 09:16:21.33
へぼくないアプリってたとえばどれ?
>>705 前ソースのダウンロードは無料でできて、動かしたことあるけど
ひどい出来だったぞ。
ひさしぶりにSwingを使ったプログラムを作ろうと思ったら NetBeansに「JSR-296の開発は終了しています。」って言われた。 SwingはJava SE 6で最後になっちゃったの?
何のことだろうとぐぐった すぃんぐあぷりけぃしょんふれぃむわぁくの開発が終了しただけなんでね? 7に標準搭載を目指してたけど諦めたのかな
>>709 諦めたらしい。JavaFXもあるしな。
Swingの新機能なら、SwingXもあるから、何とかなるでしょ、と。
肝心のSwingXも開発母体に資金が流れなくなったんで、今後は先細りっぽいけど…
ああ、javax.swing.*が無くなるわけではないのか。
swing frameworkはjava 8で入るって話だよ java7,8はsiwnglabsのdatepickerとからいくつか入れるから別に見捨てられてるってわけではない というか、swing-gui-mvcも理解出来る人が増えたからここいらでsynthを解説して普及させると、swing再評価とかで少しは流行るんじゃないか mvcを理解できてもweb javafx appletやhtml dom cssとどう違うかってことまで説明できる人はまだいないだろうから、まだまだかな。実際現在のguiでも区別する程複雑なことをやってるわけでもないし
css風レイアウトマネージャがあれば HTML+JavaScriptのウィジェットを輸入できそうなんだけど 難しいのかな
>>712 AppFrameworkはSwing知らない初学者にたいしてのEoDだしswing/gui/mvcの点でみればOpenSwingみいたいなFWのほうがいいと思うんだけど。
MVCでやってたらちょっとでかくなっただけでJavaだとデータバインディングやるしDBをhogehogeするのだってやるかもしれないし。
>>713 JavaFXが大コケしたから二度とそっち方面には手を出さないだろう。
ところでsynthのjavadocは平気で嘘書いてあるからソース読んだほうが早いし結局はカスタムペインタ書かなきゃいけないし
ただLnFをSkinableにしただけだから俺は最近はやりのXMLでUI定義して中身をコードで書くような新しいLnFが標準でほしいな。
715 :
デフォルトの名無しさん :2011/03/03(木) 19:29:47.08
swingでWinのペイントツールにあるようなエアブラシって作れますか? NetBeansで作ろうとしていますが、いろんなクラスがあって迷ってます
ランダムな位置に 1x1 の大きさで fillRect するんじゃだめかね
fillRectってJavadoc見ると塗りつぶしってあるのでエアブラシのような拡散して描画するって 感じにならないことありませんか??
>>717 そうならないように、1x1ずつランダムに散らして塗るんだよ
そういえば、ドット1つだけ打つメソッドってないんだっけ。 範囲を切り出してImageにして、好きなだけピクセルに色セットして、もとの場所に貼り直すという手はあるか。
>>717 BufferedImage#getRGBで、BufferedImageをint[]に変換。
自分で設計した幾何フィルタで、int[]を変換。
BufferedImage#setRGBで、int[]をBufferedImageに変換。
>>720 ありがとう
挑戦してみるよ!
しっかし、GUIは難しき
そういやJWebPaneどうなったんだ
見てごらん。 あの金色にかがやくお星様がJWebPaneだよ。
エアブラシが出来ない・・orz なんか塗りつぶされてしまう fillrectの使い方がおかしいのだろうか 1×1にしてるのに
塗る座標を乱数を交えて散らさないとペンみたいになるんじゃないか? あとは一度に沢山試行したら結果的に満遍なく分布するから疎になるように試行回数を減らすとか
ARGB
>>727 1×1にしてる…はずなんだけど…おかしい
塗りつぶされてしまう
現状のコード晒してみたら、と
1x1って普通かけないよね。 javaにputみたいな関数ないし。
>>724 java大分忘れたけど、setPixel(もしくはそれっぽいの)で良いんじゃ。。。
JOGL・Java3Dと一体化しないかな
734 :
デフォルトの名無しさん :2011/03/21(月) 13:12:14.78
JFrameとかのJCompornentって何で、 PropertyListenerじゃないの? せめてActionクラスから変更できて欲しいんだけど。 自前でモデルオブジェクトとCompornentをバインドする コードを書くのがめんどい。
とりあえず PropertyChangeListner のことだと思ってよろしいか?
yes
>>734 何を言いたいのかよく解らないがなんか勘違いしてないか?
>>737 controllerがbeanのproperty変更→beanがリスナーcompornentを更新
てな変更の伝達を行いたいわけだけど。 何か変?
まぁ、今のswingなら素直に実装出来ないから変では有るんだろうけど。
リスナーcompornent ってのはCompornentListenerのこと?
円を表す bean (radiusというプロパティを持つ) 半径を入力するための JTextField bean を見える形で描画する JPanel なんていうものがあったとき、 1. JPanel を bean に propertyChangeListener として登録。 2. 半径をテキストフィールドで入力 3. beanにsetRadius() 4. bean が PropertyChangeSupport#firePropertyChange などする 5. JPanelに反映 みたいな話だと思うので別におかしなところはないと思う。 JComponent が implements PropertyChangeListener でない理由はよく分からないけど、 意味のある使い方をするときはどうせ propertyChange メソッドを実装しなけりゃならないので、 実装してデフォルトの空実装を提供する必要はないと判断したんじゃないだろうか。 メソッド1つしかないし。
>>740 まさしくそんなかんじ。
実際には、画像の情報のbeanを用意して、
ウインドウのタイトルにbeanが持つ画像のファイル名をだしたり、
リストにbeanの持つ詳細情報を表示させるって感じ。
そんで画像の切り替えはbeanの操作だけで行うと。
しかし、よく考えると、CompornentをPropertyCangeListinerにできるとまずいね。
titleの変更を複数のbeanからできちゃう。
Actionクラスみたいな感じで操作できるといいんだけど。
>自前でモデルオブジェクトとCompornentをバインドする ああ、だからこういったのか。 java beansはたしかにMVCのMに相当するけどModelに相当することをやるための仕様じゃなくて 再利用可能なコンポーネントを定義して(主にRAD環境から)使い回すための仕様だから普通に SwingのMVCに従って「ウインドウのタイトルにbeanが持つ画像のファイル名をだしたり...」を実装したほうが良いと思うよ。 java beansのしがらみに縛られる必要性はないんでしょ?
MVCなら、swing.Actionと同じようにbeansをMとするならM-CVでなくMC-Vってことだからそれでも出来るんじゃないか。 ただswingのしくみを正確に理解してないとM-CVでもMV-Cでも難しいだろうね。
>>742 そうだね。単にbeanの資産を生かしたいってだけだったから、そこまでこだわる必要もないかもね。
>>742-743 swing流MVCってよくわかんない。
documentインターフェースとか、文字列系
Compornent全般で使えるわけじゃないところが。
個人的にいびつな感じがする。
てか、わたしのswing流MVCに対する知識が無いだけ
なのかもしれないけど。
swingでのMVCってのはこうだってのがあったら教えてよ。
上の方のレスから何を言ってるかさっぱりだから、まずは日本語から勉強したほうがいいだろう
SwingってM-VCだったりMVCだったりするよね。
guiでmvcってそもそも(ry
>>744 Guiに依存する所はswing
そうで無い所はswing色が無いか薄い
そんな印象
(違ってたらスマソ。でも触った感じ、そう思った)
>>748 サーバサイドから Java 始めた奴って MVC がサーバサイドの話と思ってるのかもな。
サーバーサイドのMVCってGUIのMVCからみたらかなり変だよな。 というか使う側がおかしいんだろうけど。 なんせモデルに対してビューが複数無い。 それどころかモデルがそもそも怪しい。
三層アーキテクチャって奴か。UI・ロジック・DBだっけ? java beansはどっちかというとアレやるための仕様だよな。適用分野が違う。
JavaBeansは再利用可能なコンポーネントだから、MVCとは関係ない。
>>753 n層データ構造はMS流MVC亜種。
MVCも好い加減流派が多すぎる。
Cocoaには少し感動したけど、あれも元のSmalltalkとは異なるって話だし。
Smalltalk知らんので、そっちは何とも言えんけど。
CocoaはNextStep→OPENSTEP→Cocoaとくる直系の血筋だぞ。買収してそのまま持ってきただけ。 んでNextStepはSmalltalkの一部に影響受けてる。ついでにjavaもOPENSTEPの影響受けてるよ。 SmalltalkはSelfになったしMVCはMorphicになった。MVCが独り歩きしてるだけ。 どっちかというと変則のMVCはOPENSTEPあたりの影響。
>>752 時間当たりの放射線量とか月当たりの売り上げみたいな経過を
グラフとテーブルで表現とか見たこと無いんだが。
この場合放射線の経過と売り上げの経過がモデルで、
グラフとテーブルがビューね。
動画サイトは動画モデルに対してサムネと動画プレイヤーというビューを
持てる筈だけどそんな実装にはなってないだろうなぁ。
店別売り上げがあった時、その中に含まれる店一覧をプルダウンメニューに、 年月をスライダーにバインドして、抽出結果をテーブル(グラフ)表示ってのはダメなのかね。
>>758 内部構造がTreeSetとHashSetぐらい全く違うモデルに取り替えても、
一切ビューの変更が無いのであればあり。
じゃないとブロードキャストの必要が無いwebでモデルを使う意味がない。
そりゃそうだw ジャバではボタンにアクション・リスナーをaddするんだからw
マカってホント情報弱者だな。
またおまえかw
apache pivotの2.0が出てたので、かじってみた。 デフォルトでは日本語フォントが出ないけど、設定すれば、表示は問題ない。 でもテキスト入力で、IMEのインライン入力(On the spot)ができない。 あとはTableViewが、JTableなみのスケーラビリティあれば、Swingの代替になるかも。
>でもテキスト入力で、IMEのインライン入力(On the spot)ができない。 javaの問題
>>764 swing出来てるじゃん。
あれは、on the spotじやなくてover the spot?
pivotはoff the spotなのよ。IMEの独立ウィンドウで入力。
swingっつかAWTはアプリケーションが変換前文字列描画する所謂on the spotには対応してるけど、 IMEに変換前文字列描かせるover the spotはサポートしてないよ。
767 :
デフォルトの名無しさん :2011/04/06(水) 01:12:53.86
今日からJavaプログラマーになりました。 早速画面を作ったのですが、 JTextField でフォントサイズ18ptと文字(半角)数N文字にぴたりと合う大きさにしたいのですが、 どうすればよいでしょうか?
768 :
デフォルトの名無しさん :2011/04/06(水) 09:10:58.99
>>767 java.awt.FontMetrics
>>767 JTextField#getPreferredSize()呼べばたぶん教えてくれるよ
大きさ調整はLayoutManagerにやらせるのが普通だけど
JAVA GUI 2巻 ちょこちょこ間違いあるが P198 lastRow=row; row++; ではなくて row++; lastrRow=row;な
3-1検索時のエラー対処もいるな
772 :
デフォルトの名無しさん :2011/04/27(水) 15:13:50.60
Swingで画面遷移ってどうやるの? JFrame1個作ってハメるJPanelを切り替えてく感じ? JFrameを作っては消し作っては消ししてく感じ?
773 :
デフォルトの名無しさん :2011/04/27(水) 16:23:04.69
CardLayoutじゃね?
774 :
デフォルトの名無しさん :2011/04/27(水) 16:49:23.63
仮に100画面くらい遷移して前の画面に戻ることもないとしたら 全画面メモリに保持する必要ないんだけど CardLayoutは適切?
JFrame1個作ってハメるJPanelを切り替えてく感じ
なんかメモリークシテ逝きそうだよな。
別々のプロセスから同じjarのJFrame起動したとき Windows7のタスクバーでアイコンまとめる方法ない? 普通のWindowsアプリなら同じプログラムならまとめてくれるんだけど Javaだとまとまらない
778 :
デフォルトの名無しさん :2011/05/02(月) 21:09:33.18
Windowsアプリの場合、最終的にはWinMainで既に同一アプリが起動してるか チェックして、起動してたらそっちに制御を渡してウィンドウだけ増やす、という動 きをさせるんじゃなかったっけ? JavaインタプリタのWinMain自体には手を入れられないから、Javaレベルで 同一アプリケーションが既に起動しているかをチェックすることになるんだろうか。
同一アプリがすでに起動してるかってJavaでチェックできるの? 前にプロセス一覧取得するのにいろいろ調べたけど 結局Runtime.exec() で、tasklistプロセス叩いてその結果から取得するって方法しかわからなかった それともプロセス間通信するクライアントとサーバ作るような感じなのか・・?
780 :
デフォルトの名無しさん :2011/05/02(月) 22:25:40.57
特定のローカルポートをlistenするように作って、 誰もlistenしてなかったらそこで要求を待ちつつウィンドウを開く。 先任者がlistenしてたらそいつに要求を投げて終了。 とかしてるのがあった、ような…
特定ファイルのロックを獲得できるかどうか、 特定ファイルをFile#createNewFile()で作成するのに成功するか失敗するか、
>>780 これが一番シンプルな方法かな
作り足すの大変だけど、同時に多いときで10個ぐらい起動したいから、やるしかないかなあ
他に方法なければw
>>781 起動してるかどうかを確認する方法は、そういうのでもいんだけどねえ・・
純粋にプロセス間通信か、ロックファイルチックなのに必要な情報書いて
そのロックファイルを1つのプロセスでタイマー監視するとかか
徹夜したけどSocket通信する方法で改良したw サンクス
JRE5でswing-workerを使用したいのですが、どこかのサイトに「swing-worker-1.1.jar」を組み込めばJRE6と同じ機能が期待できるものなのでしょうか? SwingWorkerのサンプルがJRE6ばっかりなので判断なかなか付きません。
ほー。ソケット通信の実装でのパフォーマンス低下の影響は無視できる程度?
786 :
デフォルトの名無しさん :2011/05/12(木) 20:08:01.60
起動時の1回きりだからパフォーマンスに影響するようなものではないと想う。 1つめのプログラムがリクエスト待ちスレッド1つ用意しておいて、 2つ目以降は、起動済みの1つめに対して、「このパラメータでもう1つウィンドウ 開いて」とリクエストして終了するだけだし。
10個起動される度に1つ目のプログラムの処理が停滞はしないの? swingで重たい描画してるとかネットやファイルのioで待たされたりしてる時とかもっさりしない?
なんで通信用スレッドでたかだか10程度の要求受けただけで、Swing描画に影響出ると思うの?
わかんないんです(><)
10個同じプロセス立ち上げるより 10個同じスレッド走ってたほうが軽いんじゃね ケースによるけど
linuxで透過ウィンドウってできますか? awtutilitiesがエラーでてしまいます
他の言語で通過できなきゃシステムでサポートしてない。
swing ってなんでウィンドウフレームまでルックアンドフィール変更できるの? 枠無くすためにWin32のPOPUP WINDOWでウィンドウ生成してる?
たぶん普通にWS_POPUPを使ってる、もしくは 親ウィンドウを透明にして子ウィンドウをWS_THICKFRAMEでつくってる
796 :
デフォルトの名無しさん :2011/06/02(木) 13:41:08.91
JProgressBarの動かし方がさっぱりわからない。 ↓みたいな場合にSwingUtilities.invokeLater()やらrevalidate()やらはどこに入れるべき? dlTask = new DownloadTask(progressBar); futureTask = new FutureTask(dlTask); new Thread(futureTask).start(); public class DownloadTask implements Callable { public DownloadTask(progressBar) { this.progressBar = progressBar; } /* 中略 */ public Data call() { while { //データダウンロード処理の進捗表示にprogressBarを使いたい } return data; } }
PCも高性能になって、Swingアプリもさくさく動くから、いいね。 これから、Swingで色々作ろうと思うよ。
ああ、もっとSwing普及しないかな〜? Swing!Swing!Swing!
>>796 なにかいろいろ間違っている
callのwhileはSwingWorkerで実装するべき
801 :
796 :2011/06/05(日) 14:30:58.72
サンクス で、プログレスバーを更新するには doInBackgroundの中のwhile内でpublishなりfirePropertyChangeなりsetProgress なりを呼ばないといけないと理解したんだけど できればバックグラウンドで走らせる処理はSwingWorker内に書くんじゃなくて別クラスに分離したいんだけど、 while内でsetProgress呼ばないといけないし、分離する方法ない?
そしたら、ダウンロード処理が実際にどんなコードになるかわからんが、 DownloadTaskクラスにAtomicIntegerとかでprogressみたいな名前で進捗プロパティを作って、 callのwhileが走ってるときはそのプロパティ値をいじる。 JProgressBarの更新は、このDownloadTaskの実行と進捗を監視するSwingWorkerクラスを作ってやる。 こんな感じに実装↓ class ProgressWorker extends SwingWorker<Data, Integer> { private final BoundedRangeModel model; // JProgressBar のモデル private final DownloadTask dlTask; private final ExecutorService dlExecutor = Executors.newSingleThreadExecutor(); // ダウンロード実行スレッド public ProgressWorker(BoundedRangeModel model, DownloadTask dlTask) { this.model = model; this.dlTask = dlTask; } protected Data doInBackground() { Future<Data> downloading = dlExecutor.submit(dlTask); taskExecutor.shutdown(); while(! downloading.isDone()) { publish(downloading.getProgress.intValue()) Thread.sleep(50); // 進捗は適度にチェック } return downloading.get(); }
続き protected void process(List<Integer> progress) { // ここはEDT上だからモデルを変更すればJProgressBarも更新される if (progress.size() > 0) model.setValue(progress.get(progress.size()-1)); } protected void done() { model.setValue(model.getMaximum()); Data data = get(); // dataをなんとかする処理... } } んで、こんなふうに使う↓ DownloadTask dlTask = new DownloadTask(); ProgressWorker dlWorker = new ProgressWorker(progressBar.getModel, dlTask); dlWorker.execute();
804 :
デフォルトの名無しさん :2011/06/05(日) 23:47:15.78
JEditorPaneで作ったブラウザでアプレット表示できんぞ!どうなっとんじゃー!
できません
せっかくJavaなのに
そういやSwingにWebkitを積むとかいうJWebPaneってどうなったの
JavaFXに引き取られた
810 :
デフォルトの名無しさん :2011/06/08(水) 16:02:02.61
いやいやウェブキットってオブジェクトCでしょ。糊で張り合わせた様なもの動いて嬉しいとは思わない。 どうせなら100%javaで実装してくれたほうが良かった。
IEコンポーネントの100倍うれしいけど、Mozillaのエンジンなんだっけ? ああ、Geckoだ。あれもできれば、Javaから使いたい。いや、使えるように是非してください!
くだらん Swing 使うならとことん Swing で作りきれ HTML の出る幕なし ちょっとハイパーリンクとか埋め込みたいってんなら、HTMLEditorKit があるし それでじゅうぶん
実績のあるエンジンを利用するほうが楽だし脆弱性もあっちで塞いでくれるんだからいいじゃないか それとMozillaは組み込みGeckoのサポートを廃止するから使わないほうが賢明だろうな
HotJavaとは何だったのか
どうして低速なの?
>>816 なんでもかんでも自分でやろうとして抱え込んじまうような
わがままで不器用なやつだから
昔は100%purejavaというのがjavaのセールスポイントだったからなあ。 いまはh264の縁故/デコはgpuに丸投げとか他力本願な技術が多く成ってるからなあ。 逆に言うとwebkitの穴にみんなが依存して抜けられなく成ってしまってる。もうflashの穴にみんなうんざりしてたはずなのにね。 gecko消えたあとで勝利宣言でも出すんじゃないw まあgeckoが残す価値のあるエンジンとも思えないけど。
日本語でおk
なんでもかんでも一人で抱え込むには世界は複雑になりすぎた
日本人的視点で見るとjavafxとswingはどこか違うところがあるんですか?(swingから見て)
逆に全部他にやらせるのはないの?
>>823 c言語。。。かなぁ
文法は単純で、文字を表示させるのにもライブラリが必要
(仕様にライブラリも含まれてるけど)
逆に言えば、そのお陰で色んなプラットフォームに対応出来た
(プラットフォームに合わせてライブラリを変えれば良い)
825 :
デフォルトの名無しさん :2011/06/11(土) 10:12:25.24
JFreeChartというのがなかなか良いライブラリなのですが、Swingで動くためか起動に時間がかかります。 (4年前のMacBookで10秒くらい)起動を速くする方法はありますか?
PC買い換える
>>825 OSによって層の厚みが違うからね
unix系の方が層が薄くて速いんだよ
pc買い換えるか、OS変えるしか無い
あ、exeファイルに変換する手も有ったか
マカってホント情報弱者だよな。
マクの時点でやる気無いでしょ。いまだにj2ee無いしw
みなさんはJavaFX2.0に乗り換えますか?
両方使う
javafx 2.0のapidocをみてもクラス名とかクラス階層にセンスを感じられない。 リリースまで1年以上もあって人も金も豊富なオラクルなのに未だにやっつけ設計みたいなことをやってるし、ジャバプラットフォームにはもうサンのころの「やさしさ」は残ってないなって思った。
>>790 シングルプロセスマルチスレッドのflashplayerより
マルチプロセスマルチスレッドのちょろめの方が安定してる。
大規模なメモリー空間が必要な場合、シングルプロセス
マルチスレッドは弱い。スレッドの開放 == リソースの開放にならないからね。
そこはオラクルに買収されたんだから産の頃のままにはなる訳が無い。身売りってそういうものだ。 オラクルに買収されなくてibmに買収されても、産の頃のやり方はibmのルールに改められるよ。 そのまま産とともにジャバも消えてしまって消去法でc++の復権のほうが良かった?
例えばObservableList, ObservableListとかサンのエンジニアだったらもっとセンスある設計をすると思ってた。 addAllとかコレクションに配列を混ぜようとしてるし、setAllとか関数名も最悪だし、ベータの段階でもう既にジャバのほどよいフレーバーを感じるようなプラットフォームじゃない。
836 :
デフォルトの名無しさん :2011/06/14(火) 02:01:24.21
>>829 そいつ昔から鯖そのものに張り付いてるbotだからスルーしろ。
そこは是非こうあるべきって提案して開発に参加して欲しいな。 理想的実装のヲレフレームワークで包んでしまって終わりなのかもしれないが。
javafx betaではbuilder classをたくさん用意しるみたいだけどオラクルの設計者たちは今後javafxにクラスが増えたり関数が追加されてもbuilder classをサポートしていくつもりなのかな。 オラクルって言うところはこういう泥くさい20年以上前のパラダイムのままで止まっているところだったの?
Swingのテーブルモデルとか新しいのできないかな? JTableとDBやらXMLやらテキストファイルでO/Rマッピングできたら、それはもう最高さ!
840 :
デフォルトの名無しさん :2011/06/15(水) 20:07:16.18
会社無くなってやることないんでCIAの狗になりたいんだけどどうしたらいいの?
841 :
デフォルトの名無しさん :2011/06/15(水) 20:08:02.99
ごめん誤爆
早い段階でほうれん草や牛乳とか母乳に出たのはストロンチウムのせいとしか思えない
部品にSizeやPreferredSizeを設定しても反映されたりされなかったりするのは何なの?
実際のサイズはレイアウトが設定するから
SwingアプリでJavaFX2.0のWebKitブラウザ使ってみたけど、やっぱ、もっさりしてる(;´д`)
Java中速GUIは何なの?
848 :
\ :2011/06/21(火) 03:10:18.60
849 :
\ :2011/06/21(火) 03:11:41.35
つーか、低速GUI・SWINGってかいてあるけど、 全部JavaFXでアプリ組むとSWINGの5倍遅いぞ。まじめに。 ありゃ、完全にマルチコアじゃないとあかんわ。
もうアドビしかないな
アドビはスイング以上に終わってるよ。アドビの携帯なんて無いしw
1スレ1000idユニークで1000色使って見分け就くと思うのがw
Nimbusに切り替えてからMetalに戻すとJTableのグリッドが消えちゃう;;
854 :
デフォルトの名無しさん :2011/06/27(月) 14:32:29.09
秋頃になったらJavafxの話もここでして良いもんかね?
855 :
デフォルトの名無しさん :2011/06/27(月) 15:08:10.69
JavaFX は要らんなあ もう Windows 8 のタイルベースのUI やら HTML5 やら 新しいユーザインターフェースがいよいよ主流になろうか ってときに、いま簡単に Swing ベースのアプリケーションを 記述と申されても、10年遅い
というよりswingもjavafxももう終わってるでしょ swingは万能な設計を目指した割にはなんか中途半端で使いにくいし、java以外の他のtoolkitに馴染んでる人が今度のxProperty()なんてのもgetContentPane()の時と同じで絶対受け入れないだろうね javafxなんてどうでもいいからswing frameworkとかswinglabsの成果をjava7に入れてほしい
javafx 2はjava6,java7を意識しないでベータのままにしてだらだら移植を進めて、javafx 2リリースはjava8リリース予定の2012冬まで同じく延期しておいていいよ。 ベータのドキュメントを見てもswing apiの品質にすら達していないのにあと半年で正式版リリースできるはずないでしょ。 appletの起動の遅さでflashに流れたのと同じで、早く出したい早く追いつきたいというだけでたいした目標もなく言語やapiの品質も中途半端でそんなやっつけ仕事のままでリリースすると今回も誰からも相手にされなくなるんじゃないかと思う。 肝心のswing開発者に対してjavafxはswingとまったく別物って言うメッセージすらも届いてないみたいだし、javaじゃない人にとってはhtml5,css3もそろそろ見えてくるだろうし、 そういう人たちがswing,javafxの複雑なライブラリベースのapiやsyntaxを勉強する時間はないだろう。 勉強すればそれなりにjavaの凄さが分かるんだけど、金と時間をかけて勉強してswing,javafxベースで作っても2011年現在のhtml,webベースのものとたいして変わりない。
WPFもコケ気味だから,JavaFXもむずいかも試練ね。
MSはWindows 95のころから2,3年程度でころころと主要frameworkが変わるからまったく信用してない。
860 :
デフォルトの名無しさん :2011/06/27(月) 17:19:44.46
簡単に記述ったって、もともとスクリプト言語の書きやすさにはかなわないんだから もうあきらめて、Java はIDE激しく使ってコード書いてくものと決めつけてもらっていいよw Swing は、ところどころ、まああんまりよくないなと思うとこはありつつも それでも GUI のAPIとしては優秀な部類 これは少しづつメンテナンスするだけでいい そんなのより、マルチタッチパネル向けの GUI に心機一転、ゼロからしっかりしたAPI作ってほしい
SwingとかAndroidでも動くようになってくれ Googleと仲良くしてくれ
>>859 そうだよね(´・ω・`)
おまけに、使い心地も良くないし。
QtとかSwingは10年以上つかえるもんね。
あれはあれで定期的に作り直す需要を産むからソフト業界が飯喰えてる気もw 10年前と変わらずswingがつかえるjavaを作ったサンは儲けきれずに消えてしまった訳で。 逆にアンドロイドapiでも動作するウィンドウズ用のランタイム入りのj2seを配布して欲しいかなw せっかくどこでも動く仕組みを採用してるから、グーグルアプリをどこでも動く様にして欲しいw
>10年前と変わらずswingがつかえるjavaを作ったサンは儲けきれずに消えてしまった訳で。 sunが消えた理由はそこじゃないやろ
>>864 そういうゴミ、いちいち相手にしなくていいんじゃないの?
スクリプト言語はguiが書きやすいというのは過去の都市伝説でしょ。 インジェクション・パターンが確立された現在では。
867 :
デフォルトの名無しさん :2011/06/28(火) 06:21:52.57
ゆとりってばかだな
ぶっちゃけ、スクリプト言語でも今までのSwingでもそんなに変わらないよね(;^_^ Swingでも十分だよ。
870 :
デフォルトの名無しさん :2011/06/28(火) 19:59:35.98
個人的にはSwingはswingworker使わなくてもマルチスレッドで動いて欲しいよな-なんて
なにかメリットあるか?
872 :
デフォルトの名無しさん :2011/06/28(火) 20:42:50.69
長い処理しても固まらない
普段から遅くなるから固まっても区別つかないって事か?
874 :
デフォルトの名無しさん :2011/06/29(水) 00:05:53.10
うーん、処理が長いことやらせると、クリックした時点で固まるでしょ? それをswingworkerでやればいいんだけど、なんだかね・・・
モーダルダイアログとか、ふつーにマルチスレッドで動いていると思うんだが
EDTがシングルスレッドって言いたいんじゃね? 874みたいな動機でマルチスレッドにしても 頻繁にデッドロックするようになるだけだと思うが。
そういえば、自分がJava始めたとき Swingはシングルスレッドなので…というようなことが 言い訳がましく記述されてるのをしゅっちゅう見かけたのですが、 そうじゃないGUIフレームワークなんてあるのでしょうか?(Javaに限らず) AWTはよく知らないのですが、もしかしてEDTみたいなの気にせずどのスレッドからでもアクセス可だったりしたのでしょうか?
難しいことを考えたりしないで素直にswingworkerを使ってください。
879 :
デフォルトの名無しさん :2011/06/29(水) 09:17:23.79
SwingではMVCのControllerの中心的役割をAbstractActionが担うみたいだけど、 actionPerformedの中でGUIパーツをいじりたい時って、よく無名クラスを使って button.addActionListener(new AbstractAction() { ... }); みたいな書き方するけど、 ViewとControllerのクラスを分けるべきとか気にしなくていいの? てか、View-Controller分ける主義で無名クラス使わないようにしてる人いる?
ツッコミどころが多すぎて答えられない。
なんでそう思ったの?知らないならレスしなければいいのに。
>>879 なるだけ使わないようにしてる
ごちゃごちゃしてしまって、俺みたいな馬鹿はIDEを使っても訳が分からなくなるから
リスナはいくつでも登録できるし、 リスナは所詮リスナであってController専用というわけでは無い。 押されたときだけボタンアイコンがアヘ顔になるとかいう処理は、 Viewと同じコンパイル単位にまとめたくなるかなー。
>>882-883 サンクス
Listener=Controllerじゃなくて
Viewと明確に分離できるListenerがControllerって考え方かあ
調べたらSwingってViewとControllerをUIオブジェクトって形で統一しちゃってるのね。
そんなあことはない
俺は処理をViewと纏めたく無い派。 ModelとViewとの仲介だけを行うControllerクラスを作る Viewのコンポーネントをゲッターで公開しないといけないが、コードがすっきりする
887 :
デフォルトの名無しさん :2011/06/29(水) 14:22:08.06
あんまり単純なGUIセットでMVCモデルにこだわるのはよくないと思うけどな ButtonModel とか、TableModel とか、Swing の設計ミスだと思うよ *Model 名前ついたクラスぜんぶ明らかに要らない こういう GUI の基本的なヴィジットに MVC モデル適用するのは間違い TableModel は CellDataProvider みたいな名前にして、単純に表の表示に 便利なクラスですよ みたいな感じにすればよかった
そうですね。 ではボク達ゆとり世代は次のjavafxに期待しましょうか。
889 :
デフォルトの名無しさん :2011/06/29(水) 15:28:06.47
おれはゆとりじゃないがJavafxに期待したい 秋まで待とう
単純な表の表示ってテーブルにはボタンとか付けるなって意味ですかー?
> こういう GUI の基本的なヴィジットに MVC モデル適用するのは間違い Widget
Swingのリスナ記述もクロージャーの恩恵にあずかろう、 とかいう動きはまだ出てこないの?JDK7では見送られるんだろうけど
遅いと聞いたが30FPSぐらいの2D処理なら大抵余裕だな
初動が遅くていらっとくる
ウィドゲットw
要求スペック高杉で遊べる香具師少なかったりしてなw
Androidのアダプタか。
>>894 初動が遅くないとせっかくつくったスプラッシュを出す理由がなくなるじゃないか
人それを本末転倒という
おいこんな過疎スレで即レスされると自演野郎に認定されるじゃないか
903 :
ぬるぽ :2011/07/28(木) 21:45:14.03
自演乙
確かスプラッシュって、java.lang.Objectのロードよりも先に表示されるんだよね。 スプラッシュ出したから起動が遅くなる心配はあまりしなくてよいのでわ
Javaも.Netの事前最適化バイトコードコンパイルができたらいいんだが、 おそらく只じゃださんのだろうなぁ
鯖向けや組み込み向けのjavaならAOTあるしAOTしたクラスをプリロードするVMもある。
907 :
デフォルトの名無しさん :2011/08/13(土) 09:01:15.26
JTABLEで一度描写したあとに時間の経過で行の背景色変える事ってできますか?
>>907 DefaultTableCellRenderer を継承したやつを実装して、
table.setDefaultRenderer(Object.class, render)
色変えたくなったら repaint() でもたぶんいいし、
DefaultTableModel の fireTableDataChanged やら fireTableCellUpdated やらを
実行すればよい
失敗作
910 :
デフォルトの名無しさん :2011/08/13(土) 22:56:51.91
早くJavaFX2.0でねえかな・・
912 :
デフォルトの名無しさん :2011/08/14(日) 22:19:40.01
>>911 UIが綺麗。遅いけどね・・5倍くらい。
低速GUIよりさらに遅いとか、スレ立てる時どうすればいいんだよ
915 :
デフォルトの名無しさん :2011/08/15(月) 12:29:26.88
綺麗なのは良いことだと思うけど、遅いんじゃイライラするだろ
で、結局今回のJavaFXのセールスポイントは何なの? WindowsオンリーならわざわざJavaFXなんて使うことなんて滅多にないでしょ。
FXよりもそろそろNimbusの次の新作ルックアンドフィールを・・・
918 :
デフォルトの名無しさん :2011/08/15(月) 15:14:41.09
次のスレは Java低速GUI Swing & JavaFX かね
あ
Swingも今じゃ別に低速っていうほど低速っていうわけじゃないし 次はJava GUIだけにしてやっていいんじゃね
921 :
デフォルトの名無しさん :2011/08/16(火) 10:12:22.85
次のスレは JavaGUI Swing & JavaFX だね
ちょっと待て SwingWorkerでプログレスバーを表示させただけで明らかに処理時間が遅くなるクソなのに 何の根拠があって低速を取ろうというんだ
いや もうみんなマイクロソフトの方に行ってるからジャバでグーイしようなんて奴は一人もいない
925 :
デフォルトの名無しさん :2011/08/18(木) 01:31:37.39
何気に俺もやってるよノシ
javaでGUIからC#でGUIに変えて、戻れなくなりましたが何か 言語つーか、開発環境の便利さのせいだけど
頭の悪さもあるだろうね
訳:他人の意見が俺と違うのはそいつが頭が悪いからだ。
昔はウインドウズでデータベースをグーイすることがパショコンの一つの目的だったのに、ブラウザとフラッシュが普及したせいでいつのまにかウェブることこそがグーイだと思っちゃってる平成生まれが多くなったね
ぶっちゃけ、サーブレットでアプリケーションサーバ建てて、 ユーザのセッションとかでメモリ不足食うより、 SwingでUI組んでユーザ側にデータ蓄えさせといて、 一気にDBにデータぶち込んだ方がパフォーマンスいいだろ?
934 :
デフォルトの名無しさん :2011/08/19(金) 22:55:24.84
モバイルはともかく、普通のPCはスペックアップ&マニア向け&業務特化になっていく可能性もあるから 将来も含めれば蔵側の負担を大きくしていく方向性もバカにしたもんじゃないけどな。
>>935 馬鹿だなー。今時クラサバ構成なんて。
DBコネクションが膨大になるし、APの入れ替え面倒だし…
10年以上前に捨てられたのは伊達じゃない。
さらに近年はセキュリティ絡みでPCをシンクラにする方向だから
尚更、間にAP鯖が入る。
APってなに?
^^;
>>938 CS構成でも、Webアプリ構成でもDB接続数はかわらんだろ・・
>>938 アプリケーション(AP)サーバー(鯖)のこと
DBサーバーに入れる前に処理するアプリを積んでるやつ。要するに、サーブレットやらJSP
やらのプログラム(アプリケーション)が動いてるのをAPサーバーという。
>>937 の問題を解決するってことで一時期リッチクライアントが
流行りかけたけどすっかり消えちまったね。
コンシューマむけではAjaxとかでいいと思うけど、業務システム系では
もっと流行ってほしかったな
>>829 そうなのか…一時期モバイルMacで開発するの流行ってたけど
あれにはJavaEEプログラマは含まれてなかったのか。
OpenJDKはマクで使えないの?
おい!会社でAPサーバーって何?ってクイズだしたら 「一人がアパッチでしょ」って答えやがったぞ。
あとはミラ・ローズとスンスンか
正直NCSA HTTPdが止まったときwwwは衰退するかと思ったがApacheグループが頑張った。
かと思ったがApache乙wwwwwwwww
48時間以上余裕で経ったけどパッチは出たの?
>>931 イントラで完結するならそれもアリ。
DBMSとSwingアプリが直接コネクション張って通信するのは避けた方が良いけれど
それくらいならAS立てるまでもない。
Swingでウィンドウ枠にコントロール置けるようにならんかなぁ。
修飾抜きWindowでどうにかするしかないんじゃね?
そうするとウィンドウ境界の描画・移動リサイズ・最大化最小化閉じるボタンも自前か。 javaでウィンドウマネージャもどき作らなきゃいけないとは。ついでに非クライアント領域を半透明にしてリッチと言い張るか。 SwingXがほしいな・・・SwingX RendererとPainters APIを標準に組み込んでくれ。
そして出来上がる、浮いた見た目の使いにくいウインドウ枠
javax ← ジャバエックスっていうの?俺は、ジャバックスって呼んでた。
ジャバ糞が正解
>>913 さすがに5倍は言い過ぎだろ。
…だよね?
prism無効になってるんだろ。無効の場合はJava2Dだから単に描画量の違い。
1.xはもう死んでるから
963 :
877 :2011/09/07(水) 13:26:06.57
どっかで最近読んだけど、Swingは当初マルチスレッド化を目指してたんですね。
それが駄目になったから
>>877 みたいにシングルスレッドが強調されてたわけか。
>>923 そりゃまあ描画処理が加わる分、全く同じ速度でってわけには行かないだろうけど、
明らか、というほど体感できたことはないなあ。
スレッド違うし。
んで、そろそろ次スレたてる時期だけど、 スレタイどうすんのよ?
今のままでいいよー
Java低能GUI Swing 10
968 :
デフォルトの名無しさん :2011/09/09(金) 05:22:34.66
すみません質問です。 JListにフォーカスがあるときに、 例えばiキーを押すとiで始まる行に移動しますが、 これを禁止するにはどうすればいいでしょうか。 ググったのですが出てきませんでした。 よろしくお願いします。
970 :
デフォルトの名無しさん :2011/09/12(月) 00:01:07.69
971 :
968 :2011/09/14(水) 10:21:44.23
>>969 過去ログまで参照していただいて、大変恐縮です。
非常に参考になりました。
どうもありがとうございました。
本当にありがとうございます。
お礼が遅れてすみません。
eclipseのGUIエディタでオススメプラグインはなんですか?
Windows Builderが標準でついておろーが
あ、Window Builderか。
>>975 3.7使ってんならJFrameを拡張した.javaファイルを右クリックしてみ
自分が使ってる環境を標準って言うのをやめて下さい
”大抵”ね。www
980 :
デフォルトの名無しさん :2011/09/20(火) 14:13:41.83
Windows Builderはいいね。Netbeansから乗り換えた
既存の.java読んでくれるのはNetBeansに対する大きなアドバンテージだけど、
自動生成されるコードはNetBeansと比べるとちょっと…なのが残念。
NetBeansは自動生成コードは自分で触ることが無い(のが前提)だけど、
WindowBuilderの方は生成後のコードも触れる分余計に気になるんだよね…
>>975 リリースされてからもう3ヶ月経ってますがな。
次スレたのむ
983 :
デフォルトの名無しさん :2011/09/20(火) 23:07:54.84
(人`∀´)タノム
_,,,,,ィ=ー-、_ / /. : : : : : : : : : : .ヽ / ィ /. : /: : : : : : : : : : : : .\ / ┼ /. : /: : : : ハ: : :}斗、ヽ: : .| ノ |. : /_: 斗〒\八」 ∨リリ _,_ 乂レl;W弋ノ };l_> | | `` ∠___l;人 , ─ァ ノ'ノ |: :从ハ`┼一ィ刋:::\ r┴, |: : : : : : :};Y/ハ{;;;;;;;;ノ / ヽ-‐ァ‐ァ';|l/\∧イ \ / /\/;;|l' ̄ハ } \ / |;;メ二ニ| | ャ、__/l;lゝ ト‐| / `/|_,_|;|,_,_,_,_,_ト′ / / |==|;|=====| ∠、,,ィ〜' └r幵─‐r七 {Ξ} 匕}
うめときます
ume
>>918 のこと? Java低速GUI Swing & JavaFX
>>921 名前:デフォルトの名無しさん 投稿日:2011/08/16(火) 10:12:22.85
次のスレは
JavaGUI Swing & JavaFX
だね
>>922 名前:デフォルトの名無しさん 投稿日:2011/08/16(火) 15:56:33.61
>>921 JavaFXは低速なんだよ(´ω`)
Swingですら認知されてないのにFXとかどうでもいいよ
>>991 別に認知度でスレタイ決める訳じゃないから。
そんなにFXが好きなら 自分で新しくスレ立てた方が いいんじゃないか? つーかこんな過疎スレで これ以上荒らすのは勘弁な
>>991 のレベルに合わせるとこの板の大半のスレは不要になるなw
996 :
994 :2011/09/21(水) 18:43:03.94
すまん。。よく見ずに建てちゃった。。このまま放置してください。(
>>994 のスレは)
u
mmm
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。