【问题标题】:Adding random graphical squares to ArrayList (JAVA)向 ArrayList (JAVA) 添加随机图形方块
【发布时间】:2016-09-14 01:10:36
【问题描述】:

我想学习在java中使用ArrayList和图形元素。

我有一个类可以创建具有随机 x 和随机 y 位置的正方形:

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

public class Square extends Canvas {

    public int x, y;

    Random r = new Random();


    public void paint(Graphics g) {

        x = r.nextInt(640);
        y = r.nextInt(480);


        g.setColor(Color.BLACK);
        g.fillRect(x, y, 30, 30);


    }

}

我有一个类可以创建 JFrame 并将方形元素添加到 ArrayList。但我无法弄清楚。我认为解决方案可能简单且技术性强,我只需要稍微推动一下即可。

import java.util.ArrayList;

import javax.swing.JFrame;

public class Frame {

    public int width, height;
    public String title;

    public JFrame jframe;

    ArrayList<Square> squares  = new ArrayList<Square>();

    public Frame(String title, int width, int height) {

        this.width = width;
        this.height = height;
        this.title = title;



        display();
    }

    public void display() {

        jframe = new JFrame();

        jframe.setTitle(title);
        jframe.setSize(width, height);
        jframe.setResizable(false);
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setVisible(true);
        jframe.setLocationRelativeTo(null);

        for(int i = 0; i < 20; i++) {
            squares.add(new Square());
        }
        jframe.add(squares);

    }



}

【问题讨论】:

  • 您的问题需要更多信息。想不通怎么办?您是否收到编译时或运行时错误?如果是这样,是什么?您是否遇到意外行为?如果是这样,您期望会发生什么?究竟发生了什么?等等
  • 到底是什么问题?这是否编译(怀疑 - 鉴于没有 JFrame.add(List) 方法)?此外,建议使用lightweight components,例如JPanel,而不是Canvas。

标签: java swing


【解决方案1】:

摆脱 Square 类并重新启动。

  • 不要让它扩展 Canvas -- 你不想不必要地混合 AWT 和 Swing
  • 您的 Square 类应该是一个逻辑类,而不是 GUI 类,这意味着它不应该扩展任何 GUI 组件。
  • 不要在绘画方法中随机化。
  • 给你的 Square 类 x 和 y int 字段
  • 给它一个 public void draw(Graphics g) 方法,它使用传入的 Graphics 对象绘制自己。
  • 创建另一个类,一个扩展 JPanel 的类,并给它一个 ArrayList&lt;Square&gt;。
  • 覆盖此 JPanel 的 paintComponent 方法。
  • 在覆盖中一定要调用super的方法。
  • 在覆盖中,遍历数组列表,调用每个 Square 的 draw 方法。
  • 将此 JPanel 放入您的 JFrame。

【讨论】:

  • 非常感谢您的帮助!
【解决方案2】:

从我看到的你正在做的事情来看,你正在将多个画布添加到将彼此重叠的框架中。

而是创建一个画布,其中包含一个正方形(x 和 y 整数)列表,它在其绘图中绘制,然后将一个画布添加到框架中。

我也不确定 JFrame.add() 是否会添加整个画布并调整其大小。而是使用 layoutManager 添加您的组件,例如 FlowLayout。 Layout managers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多