如何生成多种类型的形状,如星形,三角形等。我运行代码并编译并运行,只显示一颗星。 (我想大约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
答案 0 :(得分:3)
您的代码只生成一个形状。如果你想要多个形状,那么你需要创建多个形状。所以:
不要在paintComponent()方法中生成形状。相反,你可能有addStar(...),addTriangel()等方法。
然后创建一个ArrayList来保存形状。因此,上面的方法将创建形状,然后将其添加到ArrayList。
然后paintComponent()方法将遍历ArrayList并绘制每个Shape。
查看Playing With Shapes以了解使用上述方法的基本代码。该链接还将为您提供实用程序类,以便轻松创建“星形”和其他有趣的形状。
for (int count = 1; count <= 20; count++) {
g2d.rotate(Math.PI / 10.0);
}
上面的代码什么也没做。它循环20次并改变旋转但没有画任何东西,因此只会使用最后一次旋转。
不要在绘画方法中使用random(...)方法。你无法控制Swing何时会调用绘画方法,所以你的形状会随意改变颜色。