studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones java random geometry draw

reales - Java: dibuja un triángulo



libro de android studio en español pdf (2)

Hay al menos dos formas básicas de lograr esto, en función de sus necesidades.

Podría usar Polygon o podría usar la API Shape Graphics 2D

Lo que puede elegir se reduce a sus requisitos. Polygon requiere que conozcas de antemano la posición de los puntos dentro del espacio 3D, donde Shape API te brinda más libertad para definir la forma sin preocuparte por la posición con anticipación.

Esto hace que Shape API sea más flexible, ya que puede definir la forma una vez y simplemente traducir el contexto de Graphics según sea necesario y volver a pintarlo.

Por ejemplo...

El rojo es un Polygon , el verde es una Shape , que se traduce en posición ...

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.geom.Path2D; import java.awt.geom.Point2D; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class TriangleTest { public static void main(String[] args) { new TriangleTest(); } public TriangleTest() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new TestPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class TestPane extends JPanel { private TriangleShape triangleShape; private Polygon poly; public TestPane() { triangleShape = new TriangleShape( new Point2D.Double(50, 0), new Point2D.Double(100, 100), new Point2D.Double(0, 100) ); poly = new Polygon( new int[]{50, 100, 0}, new int[]{0, 100, 100}, 3); } @Override public Dimension getPreferredSize() { return new Dimension(200, 200); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.setColor(Color.RED); g2d.fill(poly); g2d.setColor(Color.GREEN); g2d.translate(50, 100); g2d.fill(triangleShape); g2d.dispose(); } } public class TriangleShape extends Path2D.Double { public TriangleShape(Point2D... points) { moveTo(points[0].getX(), points[0].getY()); lineTo(points[1].getX(), points[1].getY()); lineTo(points[2].getX(), points[2].getY()); closePath(); } } }

Esta pregunta ya tiene una respuesta aquí:

Hola, sé que es simple dibujar un óvalo / rectángulo y llenarlo usando

g.fillOval(30, 40, 20, 20);

pero, ¿cómo dibujar un triángulo? Sería lo mejor si tuviera coordenadas al azar.


Usando la clase de Graphics heredada, esto se haría utilizando el método heredado
drawPolygon(int[] x, int[] y, int pointCount) .

La nueva clase Graphics2D admite una implementación mucho más agradable con Path2D s. Necesitarás el método de draw(Shape) o fill(Shape) . Dado el hecho de que en casi todos los lugares de Java, un objeto Graphics es en realidad un objeto Graphics2D , puede lanzarlo de esa manera, ese es el camino a seguir, en mi humilde opinión.

Graphics g = ...; Graphics2D g2d = (Graphics2D) g; Path2D.Double triangle = new Path2D.Double(); triangle.moveTo(x1, y1); triangle.pathTo(x2, y2); triangle.pathTo(x3, y3); triangle.closePath(); g2d.fill(triangle);