Java Tutorial/2D Graphics/Ellipse

Материал из Java эксперт
Перейти к: навигация, поиск

Compares two ellipses and returns true if they are equal or both null.

import java.awt.geom.Ellipse2D;
public class Main {

  /**
   * Compares two ellipses and returns <code>true</code> if they are equal or
   * both <code>null</code>.
   *
   * @param e1  the first ellipse (<code>null</code> permitted).
   * @param e2  the second ellipse (<code>null</code> permitted).
   *
   * @return A boolean.
   */
  public static boolean equal(final Ellipse2D e1, final Ellipse2D e2) {
      if (e1 == null) {
          return (e2 == null);
      }
      if (e2 == null) {
          return false;
      }
      if (!e1.getFrame().equals(e2.getFrame())) {
          return false;
      }
      return true;
  }
}





Create an complex shape by rotating an ellipse.

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class RotateTransformed extends JPanel {
  public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    Ellipse2D e = new Ellipse2D.Double(0, 0, 80, 130);
    for (double i = 0; i < 360; i += 5) {
      AffineTransform at = AffineTransform.getTranslateInstance(400 / 2, 400 / 2);
      at.rotate(Math.toRadians(i));
      g2.draw(at.createTransformedShape(e));
    }
  }
  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.add(new RotateTransformed());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    frame.setVisible(true);
  }
}





Create an ellipse, and then draws it several times at different rotations

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class RotateStrokeEllipse extends JFrame {
  public static void main(String[] args) {
    new RotateStrokeEllipse();
  }
  public RotateStrokeEllipse() {
    this.setSize(300, 300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.add(new PaintSurface(), BorderLayout.CENTER);
    this.setVisible(true);
  }
  private class PaintSurface extends JComponent {
    public PaintSurface() {
    }
    public void paint(Graphics g) {
      Graphics2D g2 = (Graphics2D) g;
      int x = 50;
      int y = 75;
      int width = 200;
      int height = 100;
      Shape r1 = new Ellipse2D.Float(x, y, width, height);
      for (int angle = 0; angle <= 360; angle += 45) {
        g2.rotate(Math.toRadians(angle), x + width / 2, y + height / 2);
        g2.setPaint(Color.YELLOW);
        g2.fill(r1);
        g2.setStroke(new BasicStroke(4));
        g2.setPaint(Color.BLACK);
        g2.draw(r1);
      }
    }
  }
}





Draw Ellipse2D.Float

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainClass extends JFrame {
  public MainClass() {
    getContentPane().add(new DrawingCanvas());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(500, 500);
    setVisible(true);
  }
  public static void main(String arg[]) {
    new MainClass();
  }
}
class DrawingCanvas extends JPanel {
  DrawingCanvas() {
    setSize(300, 300);
    setBackground(Color.white);
  }
  public void paint(Graphics g) {
    Graphics2D g2D = (Graphics2D) g;
    Graphics2D g2 = (Graphics2D) g;
    int w = getSize().width;
    int h = getSize().height;
    Ellipse2D e = new Ellipse2D.Float(w / 4.0f, h / 4.0f, w / 2.0f, h / 2.0f);
    g2.setClip(e);
    g2.setColor(Color.red);
    g2.fillRect(0, 0, w, h);
  }
}