- 1 名前:デフォルトの名無しさん [2008/03/01(土) 18:16:51 ]
- プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド112【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1202467704/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝のう存じます。 次スレは>>980あたりで。
- 2 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:17:32 ]
- **** 関連スレッド案内 ****
■ AWT と Swing は -- Java低速GUI Swing 7 pc11.2ch.net/test/read.cgi/tech/1204155623/ ■ SWT は -- Java 高速GUI SWT 3 ttp://pc11.2ch.net/test/read.cgi/tech/1164877399/l50 ■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は -- iモード携帯電話用Java(iアプリ) Part16 ttp://pc11.2ch.net/test/read.cgi/tech/1198816379/l50 ■ DoCoMo 以外は -- CLDC+MIDP+携帯電話用Javaスレッド part 7 ttp://pc11.2ch.net/test/read.cgi/tech/1180010672/l50 ■ 課題・宿題は -- ★★ Java の宿題ここで答えます Part 64 ★★ ttp://pc11.2ch.net/test/read.cgi/tech/1196543694/l50
- 3 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:18:25 ]
- **** 開発環境が必要の場合は ****
■ J2SE 1.4.0 ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/index.html ■ J2SE 5.0 (1.5.0) ttp://java.sun.com/j2se/1.5.0/ja/ ■ Java SE 6 ttp://java.sun.com/javase/ja/6/ **** 実行環境だけが必要の場合は **** ■ Java ソフトウェアのダウンロード ttp://www.java.com/ja/
- 4 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:30:45 ]
- おっおっおっ
- 5 名前:デフォルトの名無しさん [2008/03/01(土) 20:10:49 ]
- JavaでInternetからファイルダウンロードを行うプログラムを書こうとしています。
634.ayumu-baby.com/javawork/downloader.html に書かれているような実装を行ったところ、 ダウンロード速度がかなり遅く、改善したいのですが どのような方法があるでしょうか?
- 6 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:42:25 ]
- 並行処理
- 7 名前:5 [2008/03/01(土) 21:02:39 ]
- >>6
コネクションを張りまくる方法でしょうか? そこまで頑張る必要は無くて、ブラウザのダウンロード速度と同程度であれば良いのですが、 現状だと、20MBのファイルをダウンロードするのに、 ブラウザ(キャッシュクリアした状態で):数秒〜十数秒程度 Javaプログラム:数十分 と大きな差が出てしまっています。
- 8 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:32:41 ]
- >>5
read()で1バイトずつ読み込んでたら遅くなるのは当然 read(byte[])で一度にたくさん読み書きするといいよ
- 9 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:33:32 ]
- 1byteづつ読んで、1byteづつ書き込んでるからとかじゃねーの
バッファサイズ指定して読み込んで、書き込みも最後に一気にやるように修正汁 (read() じゃなくて read(byte[] b) のほうを使う)
- 10 名前:9 mailto:sage [2008/03/01(土) 21:34:15 ]
- スーパー被った
- 11 名前:5 [2008/03/01(土) 22:10:53 ]
- >>8>>9
色々書き忘れすみません、>>5のコードそのままではなくて while ((i = in.read(buffer)) != -1) { out.write(buffer,0,i); } のような形でバッファを利用するように変更していまして、その結果が>>7です。 バッファのサイズはとりあえず1024*32でテストしていますが、 1回の読み込みは1414〜5656バイトくらいのようですので バッファサイズが小さすぎるということも無さそうです。 例えばブラウザで download.netbeans.org/netbeans/6.0/final/bundles/netbeans-6.0.1-ml-javase-windows.exe をダウンロードすると200〜300KB/secは出ていますが、 Javaのプログラムからだと十数KB/sec程度と、1桁変わってきてしまっています。
- 12 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 22:26:52 ]
- 初歩的な質問すみません
System.Math.Powを使用したらコンパイルできません シンボルを見つけられません。 シンボル: 変数 Math 場所 : java.lang.System の クラス MouseListenerを使用したらコンパイルできません abstract でなく、java.awt.event.MouseListener 内の abstract メソッド mouseExited(java.awt.event.MouseEvent) をオーバーライドしません。 ネットで調べたらどちらも同じ階層内に存在するということだったので 普段使用しているフォルダ以外のフォルダに保存してみたけど無意味でした。 どうすればいいのでしょうか
- 13 名前:9 mailto:sage [2008/03/01(土) 22:44:58 ]
- >>11
俺の環境で試したら、ブラウザもプログラムも差無かったけど。 コード晒してみたら?
- 14 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 22:54:36 ]
- >>12
どういう状況なのかよくわからん。わかりやすく書いてくれ。 Math.pow() を使いたいなら、System. は不要 (System.Math は、 java.lang.System クラスの Math というフィールド という意味になってしまう)
- 15 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:02:02 ]
- すいません そのまま載せてみます。
import java.lang.*; class Sample { public static void main (String args[]) { double x; x = Math.pow(2,16); System.out.println(x/2); } } をコンパイル Sample.java:7: シンボルを見つけられません。 シンボル: 変数 Math 場所 : java.lang.System の クラス x = System.Math.Pow(2,16); ^ エラー 1 個
- 16 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:03:55 ]
- すいません Math 解決されました。
>>14さんの言うとおりです。System不要でした。 さらに別の箇所に上書きをしていましたorz
- 17 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:08:57 ]
- もう一箇所不明な点 質問させてください
Planet1.java:6: Planet1 は abstract でなく、java.awt.event.MouseListener 内の ab stract メソッド mouseExited(java.awt.event.MouseEvent) をオーバーライドしません 。 public class Planet1 extends Applet implements Runnable,MouseListener ^ 注:Planet1.java は推奨されない API を使用またはオーバーライドしています。 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてくださ い。 エラー 1 個 サンプルプログラムをそのまま打ち込んだだけなのになぜかコンパイルできません。
- 18 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:12:05 ]
- mouseExitedを実装してやれ。空実装でいいから。
- 19 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:12:53 ]
- あと、java.lang.*はimportいらない
- 20 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:15:04 ]
- >>17
どこのサンプルか知らんが、エラーメッセージどおり mouseExited をオーバーライドする必要がある クラスの中に public void mouseExited(MouseEvent e) { } って書いとけばおk ところで、何書いてるのか理解せずにサンプルを見たまま打ち込むだけってのは、あまり勉強にならないよ
- 21 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:26:49 ]
- どうもすみません。
サンプルを打ちながら書式を学習していたところなのです。 public void mouseExisted(MouseEvent e){} でも問題ないですか?すでに書き込んでありますが不可でした。
- 22 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:30:46 ]
- 解決しました 入力ミスでしたorz
Existed -> Exited で解決
- 23 名前:デフォルトの名無しさん [2008/03/02(日) 00:57:42 ]
- 一番効率の悪いソートってなんですか?
- 24 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:58:55 ]
- ソートする気がないソート
- 25 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:00:27 ]
- ランダムに並び替えて上手い順番に並ぶのを待つソート
- 26 名前:デフォルトの名無しさん [2008/03/02(日) 01:01:30 ]
- ボゴソートだっけ?
- 27 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:08:02 ]
- これな。
ja.wikipedia.org/wiki/ボゴソート
- 28 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:12:37 ]
- 望む順番に並ばないように並び替えるソート
- 29 名前:デフォルトの名無しさん [2008/03/02(日) 01:13:57 ]
- >>28
それはえーじゃんw 一瞬で終わるぞwww
- 30 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:16:40 ]
- 途中で何故かyield()が入り他のスレッドにソートを任せようとするソート
- 31 名前:デフォルトの名無しさん [2008/03/02(日) 01:21:08 ]
- >>23
ソースコードはこれ ttp://d.hatena.ne.jp/shawshank99/20080228
- 32 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:21:14 ]
- >>29
ソートは望む順番にするのが目的なんだから目的を達成できない限り永遠に終らないぞ
- 33 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:31:34 ]
- ソートアルゴリズムを名乗るなら、
最低でもソートされる可能性がないとインチキだと思う。
- 34 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:35:27 ]
- 「アルゴリズム」だからな。
その手順で確実に問題が解決される保障がないと。
- 35 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:39:12 ]
- 効率の悪いアルゴリズム、って普段はあまり考えないなw
ランダムに探索する手法が一般的に一番効率悪くなるんだろーか
- 36 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:43:00 ]
- 真面目にやると実時間内に終わらない場合、
ある程度の不確実性を許容する事で ランダムなアルゴリズムが効力を発揮することはある。 遺伝的アルゴリズムとか。
- 37 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:44:36 ]
- それはアルゴリズムじゃなくてヒューリスティックなロジック。
- 38 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:46:30 ]
- ソートであってソートアルゴリズムを名乗っていなければok
- 39 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:48:22 ]
- 遺伝的アルゴリズムは別にランダムじゃないしな
ルーレット選択とか突然変異とかは局所最適解に陥るのを防いでるだけだろー
- 40 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 04:13:21 ]
- 全スレ>>998様 すみませんもう少しお付き合いを。
>インスタンスメソッドの synchronized 修飾子は synchronized(this){ } でメソッド内全てを囲ったのと等しい。 >クラスメソッドの synchronized 修飾子は synchronized(Queue.class){ } と等しい。 そうなるとサンプルwww.techscore.com/tech/J2SE/Thread/5-2.html Consumerのqueue.get()呼び出しが先に実行されたらget()内部でwait()してしまい、 Producerのqueue.put()呼び出しはsynchronized(this)のブロックにより、メソッド内に進入できなくてnotifyAll()を実行できずにデッドロックしてしまうように思えるのですが? まだ理解が足りないですか?
- 41 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 04:34:35 ]
- サイトのソースコードしか目に入ってませんでした。その下にしっかり解説がありました。orz
>wait()メソッドは獲得しているロックを解放するため、他のスレッドがsynchronizedメソッドであるput()やget()を実行できるようになります。
- 42 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 08:56:20 ]
- >>35
アルゴリズムに問題が解けるなんて定義は無いと思うけど? もともと、計算不可能論から出発しているのだし。
- 43 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 08:59:46 ]
- >42
そんなことはねーぞw 「問題を解決するための手順」なんだから、効率はともかく、解決しないのはアルゴリズムと呼ばない。
- 44 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 09:07:57 ]
- >40
根本的な部分で理解がおかしい >Consumerのqueue.get()呼び出しが先に実行されたらget()内部でwait()してしまい wait() によって、その実行しているスレッドの実行が止まるだけ。 つまり、別のスレッドはget() にも put() も実行できる状態になる。 get() が実行されたら、状況は変わらないから、そのスレッドもwait() で停止 put() が実行されたら、notifyAll() で他の停止しているスレッドに実行を通知。 すると、先に止まっていたスレッドのどれか1つが動き始める 思うにマルチスレッドの話なのに、頭の中シングルスレッドだろ?
- 45 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 09:27:10 ]
- >>43
関心のある者全員が飽きるまで解決してないことにするアルゴリズムが一番効率の悪いアルゴリズム
- 46 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 09:32:58 ]
- スレ違いもいい加減にしてアルゴリズムスレでやれ
- 47 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 09:57:16 ]
- J2EEについて質問させてください。
Front Controllerとなるサーブレットを自分で作っていたのですが、Filterという技術があることを知りました。 FilterはFront Controllerに完全にとって代われるものなんでしょうか? それともあくまでFront Controllerは自分で作りFilterはそれを修飾するだけのものですか? 普通はどのように使われているのでしょうか
- 48 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:15:15 ]
-
Javaラインタイムパラメータ(例えば、-Xmsや-Xmx)の設定は、 レジストリとかファイルとかに保存されてるのでしょうか?(WindowsXP、JRE1.05) OS側で、コンパネが制限されてしまっていて、Javaアイコンが触れないのです。(;´Д`)
- 49 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:55:29 ]
- >>47
あんたの作ったFrontControllerってのが何をしているのかは知らんけど、認証の前処理だとかエンコードとかその類だったら全部Filterでやるのが普通 >>48 Jarをダブルクリックした時に立ち上がるようなパラメータはレジストリとかだと思う どうしてもパラメータを渡したければ、コマンドプロンプトからjavaコマンドで起動したら?
- 50 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:56:57 ]
- >>39
結局ランダムじゃないか。
- 51 名前:47 mailto:sage [2008/03/02(日) 11:13:19 ]
- >>49
返答ありがとうございます。 自分がやっているのは、各サーブレットで重複するようなロジックをFront Cotrollerに書いてます。 認証やエンコードなどだけではなくシステム固有のロジックをFilterにずらずらと書いてもいいのか疑問に思いました。
- 52 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:19:26 ]
- >>49
まりがとう。(JRE1.05ではなく、JRE1.5.0_06ですた) JVM Optionとかっていうレジストリかと思ったら、JRE1.5.0_06では、無くなってて。 コマンドプロンプトかぁ...
- 53 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:27:19 ]
- 3から100までの素数を表示するプログラムを作成したのですが
コマンドプロンプトで実行すると縦にガーっと表示されます。 これを横列スペース区切りで表示するにはどうすれば良いでしょうか? ex) 3 5 7 11 … また、表示したものをクリアしてその上に表示することはできますか? アプレットを使用しないと無理でしょうか?
- 54 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:32:24 ]
- System.out.println じゃなくて System.out.print を使え
>また、表示したものをクリアしてその上に表示することはできますか? 無理
- 55 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:39:04 ]
- ¥r で行頭に戻ることは出来たんだが、
¥f をprintしたら1画面送りしてくれるかと思ったらしてくれなかった。
- 56 名前:前スレの975です [2008/03/02(日) 12:44:47 ]
- >>前スレ987
返事遅れてすいません。 送り手側は全てのデータを書き込んだ後 (Whileを抜けた後)にChannelを閉じる処理をしています。
- 57 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:25:17 ]
- >>55
javaの標準APIはコンソール画面制御には不向きというか機能があまりない。 java向けのcursesライブラリを使ってみるとかしてみては?
- 58 名前:デフォルトの名無しさん [2008/03/02(日) 15:33:49 ]
- >>50
ランダムって何?再現性が有るか無いか?
- 59 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:36:49 ]
- >>58
乱数に依存している部分がある。
- 60 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 20:25:40 ]
- こんばんわ。
今、考えてるソフトは、 まず、JFrameにJPanelをpackします。 そのJPanel上には点が書いてあります。 その点をdrag and dropのように マウスをpressした状態で移動させると、 マウスにそって点が移動する。 (そしてその点の持つJPanelへの相対座標x,yは変化する) という仕様のものを考えています。 Javaについていろいろ仕様を見ましたが、 swingやawtはライブラリが巨大すぎてどうすればいいか検討もつきません。 この仕様を満足するようにするには、 どのようなクラスやメソッドを使って設計すればいいのでしょうか?
- 61 名前:デフォルトの名無しさん [2008/03/02(日) 20:35:23 ]
- iアプリでgif画像を保存したいのですがどうすればできるでしょうか?
今までやったこと: com.nttdocomo.ui.ImageEncoderではJPEGでしか保存できない。 javax.imageio.ImageIO.write()を使えばできるらしいがiアプリでは呼べない。 どなたか詳しい方よろしくおねがいします。
- 62 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:02:03 ]
- >>60
点を何で描くつもりかしらんけど、 そのコンポーネントにaddMouseListenerとaddMouseMotionListenerでリスナをセットする マウスを押したりドラッグするとそのリスナのメソッドが呼ばれるから、 マウスの位置を見ながら点の位置を動かす
- 63 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:03:01 ]
- >>61
gifの仕様書を見ながら自分でエンコーダを書く・・・とか?
- 64 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:19:06 ]
- >>62
例えば MyPointというクラスを作って public static final int SIZE = 10; private int x, y; drawPoint(Graphics g) g.fillOval(x, y, SIZE, SIZE) という感じで描きたいと思っています。 JPanelにはこのMyPointをコンポジッションしたいと思っています。 どこにリスナを登録すればいいですか?
- 65 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:25:43 ]
- >>64
JPanelに
- 66 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:27:14 ]
- >>64
public class MyPanel extends JPanel implements MouseListener, MouseMotionListener{...}
- 67 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:39:34 ]
- リスナでマウスポインタの位置を知る事が出来ますが、
そのマウスポインタが円の中にない場合は 何もアクションを起こしたくありません。 また、円を拾ったあと、「マウスポインタに沿って」同時に動かしたい つまり連続的に描写したいです。 これはどうすればいいですか?
- 68 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:48:58 ]
- if文で円の中にあるときだけ処理すれば?
押したままマウスポインタを動かすとmouseDraggedが連続的に呼ばれるから、 新しいマウスポインタの位置にあわせて点だか円だかを描きなおせばいい
- 69 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:50:53 ]
- 出来そうな気がしてきました。
明日コーディングしてみて、分からなかったらまた質問します。 ありがとうございました。
- 70 名前:デフォルトの名無しさん [2008/03/02(日) 21:58:02 ]
- >>63
お答えありがとうございます。 でもエンコーダ自作以外の方法ないですかね・・・? (ありがちですがそれをすると軽く予定時間オーバーしちゃいますので・・・ どこかにプリミティブなエンコードライブラリとか落ちてないですかね・・・ (javaじゃ無くても良いので)
- 71 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:08:23 ]
- 入門書って何冊くらい読めばいいの?
- 72 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:10:36 ]
- >>71
気が済むまで。
- 73 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:12:17 ]
- >>71
自分が入門レベルを卒業できるまで
- 74 名前:正志 [2008/03/03(月) 00:01:33 ]
- ヒントがほしいんですが、
data 1 data 2 data3 data 4 ... data 112 という行があって、 lastIndexOf("data")で 最後のdata位置を入手した後、 最後のIntをとりたいんだけど、(112) どうしたらいいですか?
- 75 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:02:58 ]
- >>74
ヒントか substring と Integer.parseInt
- 76 名前:正志 [2008/03/03(月) 00:03:49 ]
- わーい
- 77 名前:正志 [2008/03/03(月) 00:08:53 ]
- ふざけんな
- 78 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:11:29 ]
- "data"でsplitしたらどうだろう。
- 79 名前:正志 [2008/03/03(月) 00:13:07 ]
- String posx=ss.substring(ss.lastIndexOF("?")+1);
で出来た ttp://www.youtube.com/watch?v=-T1UkPligYo
- 80 名前:60 mailto:sage [2008/03/03(月) 00:18:51 ]
- さきほど点を移動させる質問をしたものです。
たくさん点を置くことを考えた場合、 MyPoint自体にリスナを持たせた方がいいと思うのですが、 MyPointをJPanelから継承させて、 リスナを持たせて、位置は java.sun.com/j2se/1.3/ja/docs/ja/api/java/awt/Component.html#getLocation() Component#getLocation() で取得するという方法では、 マウスで点をドラッグして動かすというのは無理でしょうか?
- 81 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:27:59 ]
- MouseEvent の .getPoint() で、MyPoint 上のマウスの位置を取得
mouseDragged() の中で、呼び出されるごとに前回との差分を計算して移動させるようにしては?
- 82 名前:60 mailto:sage [2008/03/03(月) 00:35:41 ]
- sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/awt/event/MouseEvent.html#getPoint()
MyPointオブジェクトがドラッグされます。 その瞬間にMouseEvent eが発行されます。 これはどこから発生させればいいですか? 一応、 MyPanel < JPanel has MyPoint という設計を考えています。MyPointはx,yという座標を持っています。 もしMyPointをリスナ登録させた場合、e.getPoint()は・・ あぁ www.javadrive.jp/applet/event/index3.html ですか。 これって、 e.getPoint().xというのは、e.getX()と等価ではないですか? そのコンポーネント上で、「マウスがクリックされた」座標を取得出来るだけですよね? もし、MyPointでイベントを取得して、かつ、そのイベントのMyPanelでの相対位置を知ることが出来ればいいと思うのですが。
- 83 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:02:33 ]
- 何が言いたいのかよくわからんが、
private Point prePoint; public void mouseDragged(MouseEvent me){ Point nowPoint = me.getPoint(); this.setX(this.getX() + (nowPoint.x - pre.x)); this.setY(this.getY() + (nowPoint.y - pre.y)); pre = me.getPoint(); } こんな雰囲気でいけると思うんだが
- 84 名前:60 mailto:sage [2008/03/03(月) 01:09:47 ]
- >>83
MyPoint extends JPanel implemens MouseMotionListener, MouseListener という設定でですか? private Point prePoint というのはなんですか? どこにも使われてないのですが。 おそらく、 MyPointのサイズ内で マウスポインタの相対位置の変化を 点の移動距離としようという発想でしょうが、 問題提起として、 もし、マウスを思いっきり早く動かした場合、 つまりコンピュータがMouseEventを発行するより先に MyPointの領域からはみ出た場合はどうするのでしょう?
- 85 名前:正志 [2008/03/03(月) 01:10:47 ]
- さきほど取ったdataのpositionですが、
文字列を整数に出来ない、 int sss3=Integer.valueOf(posx); なんで
- 86 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:11:23 ]
- >>82
イベントがどのコンポーネントで発生したか e.getComponent() で知ることができる それでなんとかなるだろ
- 87 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:14:45 ]
- >>84
>MyPointの領域からはみ出た場合はどうするのでしょう? ドラッグ中は、ボタンを押した場所のコンポーネントにマウスイベントが送られ続ける ボタン離すまでずっと はみ出ても問題なし ただし座標はマイナスとかになるから、そのへんさえ考慮してあればおk
- 88 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:15:19 ]
- >>60
prePoint は pre のミスだ。空気嫁。 >MyPointの領域からはみ出た場合はどうするのでしょう? mouseExited() つかえ
- 89 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:29:18 ]
- >>85
Integer.parseInt するまえに、posXを表示させて確認しろ "data" とか空白とか混じってるんだろ、どうせ
- 90 名前:デフォルトの名無しさん [2008/03/03(月) 01:31:53 ]
- >>80
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/221.java こんな感じじゃダメなの?
- 91 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:47:49 ]
- >>85
>>88じゃないけど補足。 空白入ってたらtrimしてやればよし
- 92 名前:60 mailto:sage [2008/03/03(月) 09:25:11 ]
- >>90
これは簡単な実装ですね。 おれがやりたいのは、PointもJPanelから継承させて リスナをつける。 Pointの方でイベントを制御したいというものです。 外からやればそれは簡単でしょうが、 mousePointのところでものすごい手間がかかります。 例えば点が1万コあったら、いちいちこんな計算をするのは無駄すぎます。 それとこれは直接には関係ありませんが、 おれの主義で、コレクションは使わない事にしてます。 プリミティブ型と参照型の変換があんまりうまく行かないので非常に手間です。 もしArrayList<int>とかけるようになった暁には使おうかと思います。
- 93 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:37:37 ]
- >>92
>例えば点が1万コあったら、いちいちこんな計算をするのは無駄すぎます 自分で計算するのは無駄で、Swingに同じ計算をやらせるのは無駄でないと?
- 94 名前:60 mailto:sage [2008/03/03(月) 09:39:06 ]
- いや、自分で計算しないでしょ。
いちいちそのポインタがどのPointに含まれてるのか特定 するのが工学的に考えてすごく無駄。 自分で計算する部分なんかあるわけがないと思いますが。 プログラミングなんだから。
- 95 名前:デフォルトの名無しさん [2008/03/03(月) 10:44:55 ]
- JAVAでヒャードキュメントを書く方法を教えてください。
String s = <<END_OF_DATA; あいうえお かきくけこ END_OF_DATA
- 96 名前:60 mailto:sage [2008/03/03(月) 10:45:59 ]
- 自分でっていうのは、自前で計算して点を特定してっていう意味か。
swingも内部でオブジェクトの特定に計算してるわけね。 でも、MyPointの挙動をMyPanelが請け負うのはどうなの? もし他のコンポーネントに対してもdraggedイベントを発動させたい時に 場合わけが必要になる。 それって例えばdraggedイベントが10種類あるとした場合に、 めちゃくちゃな事になるから MyPointにイベントを処理してもらう方がいいと思った。 それに、点の位置をpublicで外から変更出来るっていうのも不自然。
- 97 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:10:08 ]
- >>95
ない
- 98 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:41:10 ]
- >>96
そのへんはどっちでもいいと思う たぶん好みの問題だし 1万個の点の判定を高速化したいって趣旨だったら、R-TreeやQuad treeを作るといいんじゃないかな en.wikipedia.org/wiki/R-tree en.wikipedia.org/wiki/Quadtree
- 99 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:41:54 ]
- >>93
無知と非常識に基づく信念の持ち主の相手なんかしなくていいよ。無駄だから。
- 100 名前:60 mailto:sage [2008/03/03(月) 13:34:16 ]
- >>98
例えば、 paintComponent(Graphics g) を使う時に、委譲を使ったりしますよね。 それと同様に、 MyPointクラスでも MyPoint#public void moveByMouseMove(MouseEvent e) とかいうのを作って、 MyPanel#public void mouseDragged(MouseEvent e) (MyPoint)p.moveByMouseMove(e); とするのはどうでしょうか? 最悪、MyPanel上でコンポーネントを計算で拾うにしても 実装の部分はMyPointクラスで書いた方がいいと思うのですが。
|

|