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

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

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

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

Q&A

解決済

1回答

3551閲覧

java:”シンボルを見つけられません”というエラーで困っています。

M_KEN

総合スコア2

Java

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

0グッド

0クリップ

投稿2020/06/05 15:43

編集2020/06/05 15:46

前提・実現したいこと

javaを最近学び始めたものです。
javaでドローエディタをつくっていたところ、以下のエラーメッセージが発生しました。

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

DrawFrame.java:93:エラー: シンボルを見つけられません
f.draw(g);
^
シンボル: メソッド draw(Graphics)
場所: タイプFigureの変数 f

該当のソースコード

java

1import javax.swing.*; 2import java.awt.*; 3import java.awt.event.*; 4import java.util.*; 5 6class Figure{ 7 protected int x, y, width, height; 8 protected Color color; 9 10 public Figure(int x, int y, int w, int h, Color c){ 11 this.x = x; this.y = y; 12 width = w; height = h; 13 color = c; 14 } 15 16 public void setSize(int w, int h){ 17 width = w; height = h; 18 } 19 public void setLocation(int x, int y){ 20 this.x = x; this.y = y; 21 } 22 public void reshape(int x1, int y1, int x2, int y2){ 23 int newx = Math.min(x1, x2); 24 int newy = Math.min(y1, y2); 25 int neww = Math.abs(x1 - x2); 26 int newh = Math.abs(y1 - y2); 27 setLocation(newx,newy); 28 setSize(neww, newh); 29 } 30} 31 32class RectangleFigure extends Figure{ 33 public RectangleFigure(int x, int y, int w, int h, Color c){ 34 super(x, y, w, h, c); 35 } 36 public void draw(Graphics g){ 37 g.setColor(color); 38 g.drawRect(x, y, width, height); 39 } 40} 41 42class DrawModel extends Observable{ 43 protected ArrayList<Figure> fig; 44 protected Figure drawingFigure; 45 protected Color currentColor; 46 47 public DrawModel(){ 48 fig = new ArrayList<Figure>(); 49 drawingFigure = null; 50 currentColor = Color.red; 51 } 52 53 public ArrayList<Figure> getFigures(){ 54 return fig; 55 } 56 57 public Figure getFigure(int idx){ 58 return fig.get(idx); 59 } 60 61 public void createFigure(int x,int y){ 62 Figure f = new RectangleFigure(x, y, 0, 0, currentColor); 63 fig.add(f); 64 drawingFigure = f; 65 setChanged(); 66 notifyObservers(); 67 } 68 69 public void reshapeFigure(int x1, int y1, int x2, int y2){ 70 if(drawingFigure != null){ 71 drawingFigure.reshape(x1,y1,x2,y2); 72 setChanged(); 73 notifyObservers(); 74 } 75 } 76} 77 78class ViewPanel extends JPanel implements Observer{ 79 protected DrawModel model; 80 public ViewPanel(DrawModel m, DrawController c){ 81 this.setBackground(Color.white); 82 this.addMouseListener(c); 83 this.addMouseMotionListener(c); 84 model = m; 85 model.addObserver(this); 86 } 87 88 public void paintComponent(Graphics g){ 89 super.paintComponent(g); 90 ArrayList<Figure> fig = model.getFigures(); 91 for(int i = 0; i < fig.size(); i++){ 92 Figure f = fig.get(i); 93 f.draw(g); 94 } 95 } 96 public void update(Observable o, Object arg){ 97 repaint(); 98 } 99} 100 101class DrawController implements MouseListener, MouseMotionListener{ 102 protected DrawModel model; 103 protected int dragStartX,dragStartY; 104 public DrawController(DrawModel a){ 105 model = a; 106 } 107 public void mouseClicked(MouseEvent e){} 108 public void mousePressed(MouseEvent e){ 109 dragStartX = e.getX();dragStartY = e.getY(); 110 model.createFigure(dragStartX, dragStartY); 111 } 112 public void mouseDragged(MouseEvent e){ 113 model.reshapeFigure(dragStartX, dragStartY, e.getX(), e.getY()); 114 } 115 public void mouseReleased(MouseEvent e){} 116 public void mouseEntered(MouseEvent e){} 117 public void mouseExited(MouseEvent e){} 118 public void mouseMoved(MouseEvent e){} 119} 120 121class DrawFrame extends JFrame{ 122 DrawModel model; 123 ViewPanel view; 124 DrawController cont; 125 public DrawFrame(){ 126 model = new DrawModel(); 127 cont = new DrawController(model); 128 view = new ViewPanel(model, cont); 129 this.setBackground(Color.black); 130 this.setTitle("Draw Editor"); 131 this.setSize(500,500); 132 this.add(view); 133 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 134 this.setVisible(true); 135 } 136 public static void main(String[] args){ 137 new DrawFrame(); 138 } 139} 140

試したこと

シンボルを見つけられませんというエラーが過去に出た時はその箇所のタイプミスが原因だったのでそのような箇所がないか探したのですが、エラー周辺にタイプミスはないように思います。
もしタイプミスを私が見落としているだけでしたらお恥ずかしいのですが、もし他の原因があるようでしたら教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Figureクラスにdrawメソッドが定義されていないから。

投稿2020/06/05 16:11

javahack

総合スコア1088

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

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

M_KEN

2020/06/05 16:22

class RectangleFigure extends Figureの中での定義ではだめということでしょうか? Figureクラスを継承して利用できるかと思ったのですが… この辺の理解がまだ薄いので、教えていただきたいです。
javahack

2020/06/05 16:30

変数fをFigureとして宣言しているので、中身が実際にはRectangleFigureのインスタンスであろうとFigureクラスで定義されたメソッドしか使えません。
M_KEN

2020/06/05 16:51

Figureクラスの中にpublic void draw(Graphics g){}と記述したら通りました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問