Еще один вопрос В апплете что ниже, рисовать фигуру можно только в двух направлениях (слева на право и сверху в низ). Подскажыте пожплуйста как реализовать возможность рисовать во всех направлениях. | Код | import java.awt.*; import javax.swing.*; import java.awt.geom.*; import java.awt.event.*; import java.util.*;
/** * @author Sadness */ public class DrawApp extends JApplet {
public void init() { DrawPanel pDraw = new DrawPanel(); this.add(pDraw); } }
class DrawPanel extends JPanel {
public DrawPanel () {
shapes = new ArrayList<Ellipse2D>(); addMouseListener(new CoordinateListener()); addMouseMotionListener(new ChangeCoordinateListener()); }
public void add ( double x, double y, double w, double h) { this.x = x; this.y = y; this.w = w; this.h = h;
ellipse = new Ellipse2D.Double (x, y, (w - x), (h -y)); shapes.add(ellipse);
repaint(); }
public void paintComponent(Graphics g) {
super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; for (int ix = 0; ix < shapes.size(); ix++) { g2.fill(shapes.get(ix)); } }
private class CoordinateListener extends MouseAdapter {
public void mousePressed(MouseEvent event) { x = event.getX(); y = event.getY(); }
public void mouseReleased(MouseEvent event) {
w = tempX; h = tempY; add(x, y, w, h); repaint(); } }
private class ChangeCoordinateListener extends MouseMotionAdapter {
public void mouseDragged(MouseEvent event) {
tempX = event.getX(); tempY = event.getY();
// тут делаю передосмотр раземра фигуры Graphics g = getGraphics(); Graphics2D g2 = (Graphics2D)g; el = new Ellipse2D.Double(x, y, (tempX - x), (tempY - y)); g2.setStroke(new BasicStroke(3)); g2.draw(el);
repaint();
} }
private double x, y, w, h; // координаты private double tempX, tempY; // для хранения измен. координат private ArrayList<Ellipse2D> shapes; // массив фигур private Ellipse2D ellipse; private Ellipse2D el; }
|
|