人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javaプログラムの質問です。以下のプログラムを作成したいのですが、よく分からないので誰かお願いします。

赤い球を3つまで画面に描画するJavaアプレットを作成する。描画領域は400x200とする。
なお、以下の仕様を満たすこと。
(1) Ballと書かれたボタンを押すとx座標、y座標、半径がランダムに決定さ
れた球が表示される。
(2) 描画領域をクリック(ボタン押下して同じ位置で離す)するとマウス
カーソルの座標にランダムな半径を持つ球が表示される。
(3) 描画領域でボタン押下したままマウスカーソルを移動させて離すと、
ボタン押下した座標に、カーソルが移動した距離の半径を持つ球が表
示される。

●質問者: happy1987
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Java アプレット カーソル クリック プログラム
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● lunlumo
●60ポイント

こんな感じでしょうか。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;

public class DrawCircle extends JApplet implements ActionListener, MouseListener, MouseMotionListener {

private static final int CIRCLE_MAX = 3;
private static final int CIRCLE_COLOR = 0xff0000;
private static final int PANEL_WIDTH = 400;
private static final int PANEL_HEIGHT = 200;
private static final String DRAW_BUTTON_LABEL = "Ball";
private static final int RADIUS_MAX = 100;

private boolean isDragging;
private int startX;
private int startY;

private CirclePanel drawPanel;
private JButton drawButton;

private ArrayList<CircleInfo> circles;

public void init(){

Container contentPane = getContentPane();

drawPanel = new CirclePanel(true);
drawButton = new JButton(DRAW_BUTTON_LABEL);

drawPanel.setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));

drawPanel.addMouseListener(this);
drawPanel.addMouseMotionListener(this);
drawButton.addActionListener(this);

setLayout(new BorderLayout());
add(BorderLayout.CENTER,drawPanel);
add(BorderLayout.SOUTH,drawButton);

isDragging = false;
}

public void start() { }

public void update(Graphics g) {

paint(g);
}

private void addCircle(int x, int y, int radius) {

if (drawPanel.circleSize() < CIRCLE_MAX) {

drawPanel.addCircle(new CircleInfo(x,y,radius));

repaint();
}
}

private void addCircle(int x, int y) {

int radius;

radius = (int)Math.round(Math.random() * RADIUS_MAX);

addCircle(x,y,radius);
}

private void addCircle() {

int x;
int y;

x = (int)Math.round(Math.random() * drawPanel.getWidth());
y = (int)Math.round(Math.random() * drawPanel.getHeight());

addCircle(x,y);
}

public void mouseReleased(MouseEvent e) {

int x = e.getX();
int y = e.getY();

if (isDragging &amp;&amp; e.getButton() == MouseEvent.BUTTON1) {

addCircle(startX, startY, (int)Math.round(Math.sqrt(Math.pow(x - startX,2) + Math.pow(y - startY,2))));

isDragging = false;
}
}

public void mouseClicked(MouseEvent e) {

if (e.getButton() == MouseEvent.BUTTON1) {

addCircle(e.getX(),e.getY());
}
}

public void mousePressed(MouseEvent e) {

if (e.getButton() == MouseEvent.BUTTON1) {

startX = e.getX();
startY = e.getY();
}
}

public void mouseEntered(MouseEvent e) { }

public void mouseExited(MouseEvent e) { }

public void mouseDragged(MouseEvent e) {

if ((e.getModifiersEx() &amp; MouseEvent.BUTTON1_DOWN_MASK) != 0) {

isDragging = true;
}
}

public void mouseMoved(MouseEvent e) { }

public void actionPerformed(ActionEvent e) {

addCircle();
}

private class CirclePanel extends JPanel {

ArrayList<CircleInfo> circles;

CirclePanel() {

this(true);
}

CirclePanel(boolean isDoubleBuffered) {

super(isDoubleBuffered);

circles = new ArrayList<CircleInfo>();
}

public void addCircle(CircleInfo c) {

circles.add(c);
}

public int circleSize() {

return circles.size();
}

private void drawCircle(Graphics g, CircleInfo c) {

int x = c.getX();
int y = c.getY();
int radius = c.getRadius();
Color currentColor = g.getColor();

g.setColor(new Color(CIRCLE_COLOR));

g.fillOval(x - radius, y - radius, 2 * radius, 2 * radius);

g.setColor(currentColor);
}

public void paint(Graphics g) {

super.paint(g);

if (!circles.isEmpty()) {

Iterator<CircleInfo> i = circles.iterator();

while (i.hasNext()) {

drawCircle(g,i.next());
}
}
}
}

private class CircleInfo {

private int x;
private int y;
private int radius;

CircleInfo() {

this(0,0,0);
}

CircleInfo(int x, int y, int radius) {

setX(x);
setY(y);
setRadius(radius);
}

public void setX(int value) { x = value; }
public int getX() { return x; }
public void setY(int value) { y = value; }
public int getY() { return y; }
public void setRadius(int value) { radius = value; }
public int getRadius() { return radius; }

}
}
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ