- ベストアンサー
アクションリスナー(初心者です)
JAVAでボタンが押されたらすでに描かれている線に さらに線が加わって描かれるというプログラムを作ろうとしているのですが、アクションリスナーを受け取ったメソッドの中身をどうしたらいいのか行き詰まりました・・・作りかけのプログラムを載せてみますので アドバイスいただければと思います よろしくお願いします import java.applet.Applet; import java.awt.Graphics.*; import java.awt.event.*; import java.awt.*; public class file928 extends Applet implements ActionListener { Button botan; public void init() { botan=new Button("選択"); add(botan); botan.addActionListener(this); } public void paint(Graphics g) { g.drawString("L.A.Airport",100,300); ~中略~ g.drawLine(405,420,655,240); } public void actionPerformed(ActionEvent x) { ーここをどうしたらいいかわかりません・・・ー } }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>交差することをして加えたいとおもっています 交差するということは、元になるものが必要ですが、2回目にボタンを押したときは、最初の線と2本目の線のどちらに対して交差しますか? なんか、いじめてるみたいに感じるかもしれませんが、プログラムを作るというのは、仕様がはっきりしていないと出来ないものなのです。 「なんだか、よくわからないけど作りたい」では、「何を作るの?」となってしまうのは当然のことです。
その他の回答 (3)
- asahina02
- ベストアンサー率47% (95/202)
以下のような感じにしてはどうですか? private Vector m_items = new Vector(); public void paint(Graphics g) { Enumeration e = m_items.elements(); Object item; while( e.hasMoreElements() ) { item = e.nextElement(); //描画処理 //例えばitemが線だったらg.drawLine(xx,xx,xx,xx)など // //itemを描画オブジェクトクラスとして別に定義しておいて //それにどのような描画属性なのかを保持させる //ここれはその属性に応じた描画処理を行わせる // //あるいは描画オブジェクトクラスのスーパークラスとして //関数Drawを用意し、ここではそのDrawのみを呼ばせるようにする } } public void actionPerformed(ActionEvent x) { //押された時の状況に合わせてm_itemsに描画オブジェクトクラスを追加する m_items.add( item ); repaint(); }
お礼
回答ありがとうございます asahina02さまの回答も一つとして考えてみたいと思います。ありがとうございました
- ngsvx
- ベストアンサー率49% (157/315)
>後ボタンが押されたら加えられる直線は、 >ある特定の線で常に一定と考えていただければと思います つまり、 g.drawLine(405,420,655,240); で描いた線に加えるということでよろしいでしょうか? この線にどのように加えるのかが未だ不明です。 例 ・延長する ・交差する ・触れていれば何でもいい ・触れていなくてもいい 「加える」と言ってもいろいろ考えられます
補足
何度ももうしわけありません&有難う御座います 文字数の関係で省略していますが、もっと沢山線をかいているのですが、NGSVX樣が書かれている例を全て出来ればいいなと考えているのですが、もしひとつだけと言われれば 交差することをして加えたいとおもっています。
- ngsvx
- ベストアンサー率49% (157/315)
>ボタンが押されたら >されたらすでに描かれている線にさらに線が加わって描かれる 少なくても、これらの意味が不明瞭です。 これでは誰も正確な回答はできません。 回答があったとしても、それは推測にすぎないのであっている保証はありません。 まずボタンですが、カーソルの位置やボタンの種類は何でもいのでしょうか? 「何でもいいからとにかくボタンが押されたら」という意味なのでしょうか? 次に「加わって」ですが、これも加わればどんな加わり方でもいいのでしょうか? もう一つ、ソースを見ると、 g.drawLine(405,420,655,240); とありますが、これに線を加えるのでしょうか? 加えられる線は、常に一定なのでしょうか? など、不明な点が多すぎます。
補足
足りない部分が多くて申し訳ありません 補足させていただきます まずカーソルの位置やボタンの種類に関しては 特に指定しません 後ボタンが押されたら加えられる直線は、 ある特定の線で常に一定と考えていただければと思います
お礼
ngsvxさま 何度も回答ありがとうございます>< もう少し自分で勉強してみてからもう一度質問すことにしようと考えました。 ありがとうございました