質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

Q&A

解決済

2回答

6333閲覧

エラー解消相談: ExamGMousePressAndReleaseはabstractでなく、MouseMotionListener内のabstractメソッドmouseMoved(MouseEven

umintyu00

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0グッド

0クリップ

投稿2019/03/10 09:51

前提・実現したいこと

javaのappletviewerでマウスドラッグの最初の位置から現在の位置を対角線とする矩形を書こうとしています。
コンパイル時にエラーが出ますが理解できず解消ができません。

MousePressedでP1、public void MouseDraggedでP2にポイントの座標を取り込み、paintの内部で処理を行い矩形を描くつもりです。

発生している問題・エラーメッセージ

.\ExamGMousePressAndRelease.java:6: エラー: ExamGMousePressAndReleaseはabstractでなく、MouseMotionListener内のabstractメソッドmouseMoved(MouseEvent)をオーバーライドしません public class ExamGMousePressAndRelease extends Applet implements MouseMotionListener {

該当のソースコード

java

1import java.awt.*; 2import java.awt.geom.*; 3import java.awt.event.*; 4import java.applet.*; 5 6public class ExamGMousePressAndRelease extends Applet implements MouseMotionListener { 7Point p1;//マウスドラッグ1 8Point p2;//マウスドラッグ2 9 10 public void init(){ 11 addMouseMotionListener(this); 12 } 13 public void paint(Graphics g){ 14 super.paint(g); 15 int x; 16 int y; 17 int l; 18 int w; 19 20 if(p1.x>=p2.x){ 21 x=p1.x; 22 } 23 if(p1.x<p2.x){ 24 x=p2.x; 25 } 26 if(p1.y>=p2.y){ 27 y=p1.y; 28 } 29 if(p1.y<p2.y){ 30 y=p2.y; 31 } 32 w=Math.abs(p1.x-p2.x); 33 l=Math.abs(p1.y-p2.y); 34 35 g.drawRect(x,y,l,w); 36 } 37 38 public void MousePressed(MouseEvent e){ 39 p1 = e.getPoint(); 40 repaint(); 41 } 42 public void MouseDragged(MouseEvent e) { 43 p2 = e.getPoint(); 44 repaint(); 45 } 46 47} 48

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

MouseMotionListenerはInterfaceであり、そのInterface内で定義されたメソッドがオーバーライドされていないとコンパイルエラーが起こります。

MouseMotionListenerには

Java

1void mouseMoved(MouseEvent event); 2void mouseDragged(MouseEvent event);

この2つのメソッドが定義されています。

しかし、ExamGMousePressAndRelease内ではどちらもオーバーライドされていません。(両方の頭文字が大文字になっている)
これらのメソッドの頭文字を小文字にすれはエラーは無くなりますが、まずはメソッドのオーバーライド時に@Overrideアノテーションを付けるようにしましょう。
ミスも減りますし、間違いにも気付きやすくなります。

投稿2019/03/10 10:19

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umintyu00

2019/03/10 13:54

回答ありがとうございます。オーバーライドというのは'ExamGMousePressAndRelease'内で'MouseMotionListener'Interfaceを適用させるという解釈であっているでしょうか。 またおっしゃる通りに編集したところ'''.\ExamGMousePick.java:7: エラー: ExamGMousePickはabstractでなく、MouseListener内のabstractメソッドmouseExited(MouseEvent)をオーバーライドしません''' とエラーになってしまいました。 javaの知識が足りておらず回答を理解できずすいません。
退会済みユーザー

退会済みユーザー

2019/03/10 15:25

「適応」という曖昧な表現では、あなたがオーバーライドのことを理解されているかどうかは判断できません。 理解できていないことを前提に説明すると、「本来のメソッドの役割を上書きすること」です。 さらにInterfaceのメソッドには中身が元々無いので、実質的に動作の定義をしているのと同じです。 今回の場合は、「マウスが動いたらどうするか」を定義しています。 エラーに関してですが、 「編集したら別のエラーが出た」のではなく 「元々ダメだったがコンパイラは見てもいなかった」ということです。 コンパイラがExamGMousePressAndReleaseのエラーを見つけた時点で、それ以上コードを見る意味がなくなっていたのです。 そしてExamGMousePickのエラーですが、質問にあるエラーと全く同じです。この場合はMouseMotionListenerではなくMouseListenerなので、 void mouseClicked(MouseEvent event) void mousePressed(MouseEvent event) void mouseReleased(MouseEvent event) void mouseEntered(MouseEvent event) void mouseExited(MouseEvent event) の5つの定義があります。 エラーメッセージではmouseExitedがオーバーライドできていないと言われていますが、先述のようにコンパイラはエラーを見つけた時点で終了します。たまたま最初にmouseExitedが無いことに気づいただけの可能性もあるので、ご自分でソースコードを確認してください。実際のコードがないためこれ以上わかることはありません。
umintyu00

2019/03/11 00:56

わかりやすく説明してくれてありがとうございます。Interface内のメソッドをExamGMousePick内ですべて動作の定義をしオーバーライドしなければならないのですね。 「○○はオーバーライドしません」というエラーが「○○オーバーライドしてないからしろ」というエラーメッセージだったということの理解であっていますか? Interfaceを複数継承することも初めてで継承の部分にも間違いを見つけました。また、MouseListener内のすべてのメソッドをオーバーライドし、ほかにもいくつか修正したところ、無事完成させることができましたため、解決方法にソースを張らせていただきます。 大変ありがとうございました。
退会済みユーザー

退会済みユーザー

2019/03/11 05:40

エラーメッセージの解釈は合っています。おそらくEclipseを使っているのだと思いますが、日本語で使っているとエラーメッセージも変な日本語で出てしまいます。プログラミング全般に言えることですが、IDE等のエディタ類は日本語で使用しないことを推奨します。(あくまでも私の主張です)
guest

0

・Interfaceを複数用いるときはメソッドの定義が抜けないようにすべて行うこと
・InterfaceをAとBを用いるときimplements A,Bで継承
osaru2002729さんありがとうございました。

以下ソースコードとなります。

// <APPLET CODE = ExamGMousePick.class WIDTH=300 HEIGHT=300> import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import java.applet.*; public class ExamGMousePick extends Applet implements MouseMotionListener,MouseListener{ //MouseMotionListener,MouseListenerの二つを継承するとき ,(コンマ) で並べる Point p,p1,p2; int r,flag; int x1,x2,xx,y1,y2,yy; int xa,ya; public void init() { addMouseMotionListener(this); addMouseListener(this); r = 50; //円半径 xx = 150; //初期中心 yy = 150; //初期中心 } public void paint(Graphics g){ g.drawString("programmed by kaito abe",10,10); g.setColor(Color.black); g.fillOval(xx-r, yy-r, 2*r, 2*r); //初期円描画 if(flag==1){ xx=x2; //円の中心座標更新 yy=y2; flag=1; } g.drawString("flag="+flag,10,20); } //g.fillOval(xx-r, yy-r, 2*r, 2*r); @Override public void mousePressed(MouseEvent e){ p1 = e.getPoint(); x1 = p1.x; y1 = p1.y; if(((x1-xx)*(x1-xx))+(((y1-yy))*(y1-yy)) <r*r){ flag=1; //円の外に押されると円の座標を更新するようにする } else flag=0; repaint(); } @Override public void mouseDragged(MouseEvent e){ p2 = e.getPoint(); x2 = p2.x; y2 = p2.y; repaint(); } @Override public void mouseMoved(MouseEvent e){ } @Override public void mouseExited(MouseEvent e){} @Override public void mouseEntered(MouseEvent e){} @Override public void mouseReleased(MouseEvent e){} @Override public void mouseClicked(MouseEvent e){} }

投稿2019/03/11 01:08

umintyu00

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問