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

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

ただいまの
回答率

88.58%

java 簡易的ペイントソフトでの文字入力

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,091

uTenMakr

score 13

 前提・実現したいこと

現在学校の課題でペイントソフトを作っています。
今目指しているのは、図形を描写しつつ、文字も打てるようにする所までです。
ターミナルでの文字の出力はできているのですが、文字がウィンドウに現れません。

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

エラーメッセージ

 該当のソースコード

ソースコード

import java.util.*;
import java.awt.*;
import java.awt.event.*;
class Paint2 extends Frame implements MouseListener, MouseMotionListener,KeyListener {
  int x, y;
  String key = "";
  public static int a;
  ArrayList < Figure > objList;
  Figure obj;


  public static void main(String args[]) {
    Paint2 f = new Paint2();
    f.setSize(640, 480);
    f.setTitle("Paint Sample");
    f.addWindowListener(new WindowAdapter() {
      @Override public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    f.setVisible(true);
  }

  Paint2() {
    objList = new ArrayList < Figure > ();
    addMouseListener(this);
    addMouseMotionListener(this);
    addKeyListener(this);
    requestFocus();
  }
  @Override public void paint(Graphics g) {
    Figure f;
    for (int i = 0; i < objList.size(); i++) {
      f = objList.get(i);
      f.paint(g);
    }
    if (obj != null) obj.paint(g);
  }
  //////////////////////////////////////////////////////////////////////////////
  public void KeyExit(Graphics g) {
    g.drawString(""+ key, 20,100);
    }
  public void keyTyped(KeyEvent e) {
        System.out.println("Typed '"+e.getKeyChar()+"'");
    key = key + e.getKeyChar();
    repaint();
    }
    public void keyPressed(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
 ///////////////////////////////////////////////////////////////////////////////

    public void mousePressed(MouseEvent e) {
    x = e.getX();
    y = e.getY();
    obj = new Circle();
    obj.moveto(x, y);
    objList.add(0, obj);
    repaint();
  }
  public void mouseReleased(MouseEvent e) {
    x = e.getX();
    y = e.getY();
    obj = new Circle();
    obj.moveto(x, y);
    objList.add(0, obj);
    repaint();
  }
  public void mouseClicked(MouseEvent e) {}
  public void mouseEntered(MouseEvent e) {
  a++;
  }
  public void mouseExited(MouseEvent e) {}
  public void mouseDragged(MouseEvent e) {
    x = e.getX();
    y = e.getY();
    obj = new Circle();
    obj.moveto(x, y);
    objList.add(0, obj);
    repaint();
  }
  public void mouseMoved(MouseEvent e) {}
}

class MyWindowAdapter extends WindowAdapter {
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}
class KeyEventTest {
    public static void main(String[] args) {
    KeyEventFrame f = new KeyEventFrame();
    f.setVisible(true);
    }
}

class Coord {
  int x, y;
  Coord() {
    x = y = 0;
  }
  public void move(int dx, int dy) {
    x += dx;
    y += dy;
  }
  public void moveto(int x, int y) {
    this.x = x;
    this.y = y;
  }
}
class Figure extends Coord {
  int color;
  Figure() {
    color = 0;
  }
  public void paint(Graphics g) {}
}
class Circle extends Figure {
  int size;
  public static int count=1;
  Circle() { 
    System.out.println(count);
    count++;
    if(count%9==0){
    size=10;
    }else{
    size=50;
  }
  }

  @Override public void paint(Graphics g) {
  if(Paint2.a%3==0)
  {
    g.setColor(Color.green);
    }
    if(Paint2.a%3==1)
    {
    g.setColor(Color.red);
    }
    if(Paint2.a%3==2)
    {
    g.setColor(Color.blue);
    }
    if(size==10){
    g.drawOval(x - size / 2, y - size / 2, size, size);
    }else{
    g.drawRect(x - size / 2, y - size / 2, size, size);
  }
  }
}

 試したこと

ここに問題に対して試したことを記載してください。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2018/12/02 22:20

    (質問文は編集できます)質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、質問タグが「JavaScript」になっていますが、内容が「JAVA」です。

    キャンセル

  • uTenMakr

    2018/12/02 22:46

    初めてなもので、すみません、ありがとうございます!

    キャンセル

回答 1

checkベストアンサー

+1

AWTでの文字列表示はpaintメソッド内でGraphics#drawStringを使用する必要があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/03 16:09

    解決しました!ありがとうございました!

    キャンセル

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

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る