在Java中生成多个形状......?

时间:2015-09-13 18:08:15

标签: java swing

如何生成多种类型的形状,如星形,三角形等。我运行代码并编译并运行,只显示一颗星。 (我想大约10)我用什么函数在图形用户界面中生成多个形状。?

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Shapes2JPanel extends JPanel {

    // draw general paths
    public void paintComponent(Graphics g) {
        super.paintComponent(g); // call superclass's paintComponent
        Random random = new Random(); // get random number generator
        Graphics2D g2d = (Graphics2D) g;
        int[] xPoints = {55, 67, 109, 73, 83, 55, 27, 37, 1, 43};
        int[] yPoints = {0, 36, 36, 54, 96, 72, 96, 54, 36, 36};
        GeneralPath star = new GeneralPath();
        star.moveTo(xPoints[0], yPoints[0]);
        for (int count = 1; count < xPoints.length; count++) {
            star.lineTo(xPoints[count], yPoints[count]);
        }
        star.closePath();
        g2d.translate(150, 150);
        for (int count = 1; count <= 20; count++) {
            g2d.rotate(Math.PI / 10.0);
        }
        g2d.setColor(new Color(random.nextInt(256),
                random.nextInt(256), random.nextInt(256)));
        g2d.fill(star);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Drawing 2D Shapes");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Shapes2JPanel shapes2JPanel = new Shapes2JPanel();
        frame.add(shapes2JPanel); // add shapes2JPanel to frame
        frame.setBackground(Color.WHITE); // set frame background color
        frame.setSize(315, 330); // set frame size
        frame.setVisible(true); // display frame
    } // end main
} // end class Shapes2

1 个答案:

答案 0 :(得分:3)

您的代码只生成一个形状。如果你想要多个形状,那么你需要创建多个形状。所以:

  1. 不要在paintComponent()方法中生成形状。相反,你可能有addStar(...),addTriangel()等方法。

  2. 然后创建一个ArrayList来保存形状。因此,上面的方法将创建形状,然后将其添加到ArrayList。

  3. 然后paintComponent()方法将遍历ArrayList并绘制每个Shape。

  4. 查看Playing With Shapes以了解使用上述方法的基本代码。该链接还将为您提供实用程序类,以便轻松创建“星形”和其他有趣的形状。

        for (int count = 1; count <= 20; count++) {
            g2d.rotate(Math.PI / 10.0);
        }
    

    上面的代码什么也没做。它循环20次并改变旋转但没有画任何东西,因此只会使用最后一次旋转。

    不要在绘画方法中使用random(...)方法。你无法控制Swing何时会调用绘画方法,所以你的形状会随意改变颜色。