java - ArrayList 中的图形

标签 java swing graphics arraylist jpanel

我正在尝试创建一个打印 10 个随机图形(椭圆形、矩形等)的代码。 我希望通过在 ArrayList 中添加随机椭圆等来实现此目的,然后让 Java 从此 ArrayList 中随机选择一个形状 10 次并打印这些选择的项目。

现在我不知道这是否可能以及我将如何去做。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class Cara extends JPanel implements ActionListener {
    Random random = new Random();
    //...s

    public Cara() {
        setPreferredSize(new Dimension(400,300)); // make panel 400 by 300 pixels.
        // ... 
        this.setBackground(Color.WHITE);
    }

    protected class RandomShapesComponent extends JComponent{
    @Override

    protected void paintComponent(Graphics g) { 

        super.paintComponent(g);     // clears the background
        // ...
    }
    }

    /**
     * redraws the Cara JPanel, when the button is pressed. *
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        regenerate();
        repaint();
    }

    private void regenerate() {
        // clear the shapes list
        //...

        // create random shapes 
        // ... 
    }


    public static void main(String[] arg) {
        final Cara cara = new Cara();    
        // create the GUI on the event thread.
        // this is better than 
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                final JFrame frame = new JFrame("Computer Assisted Random Artist");
                frame.add(cara, BorderLayout.CENTER);
                JButton button = new JButton("redraw");
                button.addActionListener(cara);
                frame.add(button, BorderLayout.SOUTH);
                frame.pack();
                cara.regenerate(); // can be done here if cara has a size!
                frame.setVisible(true);                
            }
        });
    }
}

下面是我绘制三角形的一种方法(这是我想放入数组并随机选取的形状之一):

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Tri extends Cara{
 public void paintComponent (Graphics g){
// create random variables for collor and shape of triangle
int x;
int y;
int x2;
int y2;

x = (int) Math.random()*100;
y = (int) Math.random()*100;
x2 = (int) Math.random()*100; 
y2 = (int) Math.random()*100;

int r1;
int g1;
int b1;
r1 = (int) Math.random()*255;
g1 = (int) Math.random()*255;
b1 = (int) Math.random()*255;
 Color color = new Color(r1,g1,b1);
 //draw triangle

 g.setColor(color);
 g.drawLine(x,y,y2,y);
 g.setColor(color);
 g.drawLine(x,y,y2,y2);
 g.setColor(color);
 g.drawLine(y2,y,y2,y2);


} 


}

最佳答案

这绝对是可能的。这是一个想法:

  • 有一个名为“Shape”的抽象基类,它有一个名为“draw()”的方法,该方法具有图形上下文的参数
  • 拥有三角形、圆形等形状的子类,并相应地填充每个的draw()方法
  • FruitPanel 中有一个 ArrayList 实例变量
  • 在 FruitPanel 构造函数中用 10 个 Shape 子类对象初始化 ArrayList
  • 从 FruitPanel 中的 PaintComponent() 方法中,对 ArrayList 中的每个内容调用 draw(g)

你可以自己计算出随机化等......这是一个基本结构。祝你好运!

关于java - ArrayList 中的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19222138/

相关文章:

java线程对静态类的影响

java - JTextField 在 BoxLayout 中垂直扩展

java - 在 Java Swing 中打印发票和类似文档的工具是什么?

Java:Swing JComboBox - 是否可以隐藏项目?

c# - 如何在 C# 中将 Graphics 对象保存为图像?

java - ASM 如何通知我有关强制转换和构造函数调用的类型注释

java - 我的老师指示不要编辑的 while 循环返回我的 for 循环的值,但使其运行两次

java - JLayeredPane 中未显示图形(java swing)

java - 尽管参数不同,方法还是递归调用?

Java,为什么我的图形超出了它们应该在的框架/范围?