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

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

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

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

解決済

Javaでドローエディタを作成したい.

pirika
pirika

総合スコア1

Java

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

1回答

-4評価

1クリップ

216閲覧

投稿2022/06/30 05:48

このサイト(https://fclout.hateblo.jp/entry/20110528/1306553657)を参考にして,図形3つから色を3色選べるドローエディタを作成したところ,色は選べるものの,図形が四角形(rect)しか選べない状態となっています.

どのような改良が必要か教えていただけますでしょうか.

java

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; class Figure { protected int x, y, width, height; protected Color color; public Figure(int x, int y, int w, int h, Color c) { this.x = x; this.y = y; width = w; height = h; color = c; } public void setSize(int w, int h) { width = w; height = h; } public void setLocation(int x, int y) { this.x = x; this.y = y; } public void reshape(int x1, int y1, int x2, int y2) { } public void draw(Graphics g) { } } class CircleFigure extends Figure { public CircleFigure(int x, int y, int w, int h, Color c) { super(x, y, w, h, c); } public void reshape(int x1, int y1, int x2, int y2) { int newx = Math.min(x1, x2); int newy = Math.min(y1, y2); int neww = Math.abs(x1 - x2); int newh = Math.abs(y1 - y2); setLocation(newx, newy); setSize(neww, newh); } public void paint(Graphics g) { g.setColor(color); g.drawOval(x, y, width, height); } } class LineFigure extends Figure { public LineFigure(int x, int y, int w, int h, Color c) { super(x, y, w, h, c); } public void reshape(int x1, int y1, int x2, int y2) { setLocation(x1, y1); setSize(x2, y2); } public void paint(Graphics g) { g.setColor(color); g.drawLine(x, y, width, height); } } class RectangleFigure extends Figure { public RectangleFigure(int x, int y, int w, int h, Color c) { super(x, y, w, h, c); } public void reshape(int x1, int y1, int x2, int y2) { int newx = Math.min(x1, x2); int newy = Math.min(y1, y2); int neww = Math.abs(x1 - x2); int newh = Math.abs(y1 - y2); setLocation(newx, newy); setSize(neww, newh); } public void draw(Graphics g) { g.setColor(color); g.drawRect(x, y, width, height); } } class DrawModel extends Observable { protected ArrayList<Figure> fig; protected String figurelabel; protected Figure drawingFigure; protected Color currentColor; protected ViewPanel viewPanel; public DrawModel() { fig = new ArrayList<Figure>(); drawingFigure = null; currentColor = Color.red; } public void setViewPanel(ViewPanel c) { viewPanel = c; } public ArrayList<Figure> getFigures() { return fig; } public Figure getFigure(int idx) { return fig.get(idx); } public void createFigure(int x, int y) { Figure f = null; ; if (figurelabel == "rect") f = new RectangleFigure(x, y, 0, 0, currentColor); else if (figurelabel == "circ") f = new CircleFigure(x, y, 0, 0, currentColor); else if (figurelabel == "line") f = new LineFigure(x, y, x, y, currentColor); fig.add(f); drawingFigure = f; viewPanel.repaint(); setChanged(); notifyObservers(); } public void reshapeFigure(int x1, int y1, int x2, int y2) { if (drawingFigure != null) { drawingFigure.reshape(x1, y1, x2, y2); viewPanel.repaint(); setChanged(); notifyObservers(); } } public void changecolor(Color col) { currentColor = col; } public void changefigure(String fi) { figurelabel = fi; } } class ViewPanel extends JPanel implements Observer { protected DrawModel model; public ViewPanel(DrawModel m) { this.setBackground(Color.white); model = m; model.addObserver(this); } public void paintComponent(Graphics g) { super.paintComponent(g); ArrayList<Figure> fig = model.getFigures(); for (int i = 0; i < fig.size(); i++) { Figure f = fig.get(i); f.draw(g); } } public void update(Observable o, Object arg) { repaint(); } } class Select implements ActionListener { DrawModel a; Select(DrawModel ap) { a = ap; } public void actionPerformed(ActionEvent e) { String es = e.getActionCommand(); if (es.equals("red")) a.changecolor(Color.red); if (es.equals("green")) a.changecolor(Color.green); if (es.equals("blue")) a.changecolor(Color.blue); if (es.equals("rect")) a.changefigure("rect"); if (es.equals("circ")) a.changefigure("circ"); if (es.equals("line")) a.changefigure("line"); } } class DrawFrame extends JFrame { DrawModel model; ViewPanel view; DrawController cont; public static void main(String[] args) { JFrame f = new JFrame("Draw"); JPanel pc = new JPanel(); JPanel pf = new JPanel(); pc.setLayout(new GridLayout(1, 3)); pf.setLayout(new GridLayout(1, 3)); JButton r = new JButton("red"); JButton g = new JButton("green"); JButton b = new JButton("blue"); JButton rect = new JButton("rect"); JButton circ = new JButton("circ"); JButton line = new JButton("line"); r.setActionCommand("red"); g.setActionCommand("green"); b.setActionCommand("blue"); rect.setActionCommand("rect"); circ.setActionCommand("circ"); line.setActionCommand("line"); DrawModel a = new DrawModel(); ViewPanel dp = new ViewPanel(a); a.setViewPanel(dp); DrawController ml = new DrawController(a); dp.addMouseListener(ml); dp.addMouseMotionListener(ml); pc.add(r); pc.add(g); pc.add(b); pf.add(rect); pf.add(circ); pf.add(line); b.addActionListener(new Select(a)); g.addActionListener(new Select(a)); r.addActionListener(new Select(a)); circ.addActionListener(new Select(a)); rect.addActionListener(new Select(a)); line.addActionListener(new Select(a)); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(dp, BorderLayout.CENTER); f.getContentPane().add(pc, BorderLayout.SOUTH); f.getContentPane().add(pf, BorderLayout.NORTH); f.setSize(400, 300); f.setVisible(true); } } class DrawController implements MouseListener, MouseMotionListener { protected DrawModel model; protected int dragStartX, dragStartY; public DrawController(DrawModel a) { model = a; } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { dragStartX = e.getX(); dragStartY = e.getY(); model.createFigure(dragStartX, dragStartY); } public void mouseDragged(MouseEvent e) { model.reshapeFigure(dragStartX, dragStartY, e.getX(), e.getY()); } public void mouseReleased(MouseEvent e) { model.reshapeFigure(dragStartX, dragStartY, e.getX(), e.getY()); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } }

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

jimbe

2022/06/30 09:31

> ドローエディタを作成したい > どのような改良が必要か教えていただけますでしょうか ご自身の作品なのですから、どのようにでもなさって良いのではないでしょうか。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java

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