Java问题:尝试创建和绘制随机数目的对象
我是一名Java新手,正在上初级编程课,我正在努力完成我的家庭作业(明天就要交了!),我一直在拼命想弄清楚我做错了什么 以下是基本任务:Java问题:尝试创建和绘制随机数目的对象,java,Java,我是一名Java新手,正在上初级编程课,我正在努力完成我的家庭作业(明天就要交了!),我一直在拼命想弄清楚我做错了什么 以下是基本任务: 创建一个Building类,该类接受x和y位置的参数-这一点我做得没有问题 使用Panel类绘制随机数目的建筑物-这就是我遇到的问题所在 我已经在Actionscript和Javascript中做过很多次类似的事情,但由于某些原因,我无法让它在Java中工作 我的策略是: 创建一个随机数r(完成) 将“for”循环设置为从0运行到r 调用新建筑的构造函数 将该
public class CityPanel extends JPanel
{
private Bldg bldg
ArrayList<Bldg> bs = new ArrayList<Bldg>();
//------------------------------------------------------------------------
//Constructor; Creates five building objects
//------------------------------------------------------------------------
public CityPanel()
{
setPreferredSize (new Dimension(430, 400));
setBackground (new Color(0x46, 0x82, 0xb4));
}
//------------------------------------------------------------------------
//Draws this panel by requesting each object draw itself.
//------------------------------------------------------------------------
public void paintComponent (Graphics page)
{
int b = (int) Math.floor(Math.random() * 10);
for( int i = 0; i < b; i++ ) {
intArr[i] = new Integer( i );
bldg = new Bldg(100*i, 300);
bs.add(bldg);
super.paintComponent(page);
bldg.draw(page);
System.out.print(bs.get(i).toString());
}
}
公共类CityPanel扩展了JPanel
{
私人楼宇
ArrayList bs=新的ArrayList();
//------------------------------------------------------------------------
//构造函数;创建五个建筑对象
//------------------------------------------------------------------------
公共城市面板()
{
setPreferredSize(新尺寸(430400));
立根背景(新颜色(0x46、0x82、0xb4));
}
//------------------------------------------------------------------------
//通过请求每个对象绘制自身来绘制此面板。
//------------------------------------------------------------------------
公共组件(图形页)
{
intb=(int)Math.floor(Math.random()*10);
对于(int i=0;i
当我运行主程序(一个绘制面板等的城市类)时,我得到一个空框架
如果我只是在没有“for”循环的情况下输入一个构造函数,我就得到了要绘制的建筑,所以问题就出在我的“for”循环中的某个地方,以及我试图创建和/或存储对象的方式
当我在谷歌上搜索“java创建多个对象”或“随机”或诸如此类的东西时,我得到了很多结果,但没有任何相关信息
抱歉发了这么长的帖子-我不知道该怎么问这个问题
提前谢谢。
b在建筑中建造你的建筑
int b = (int) Math.floor(Math.random() * 10);
for( int i = 0; i < b; i++ ) {
bldg = new Bldg(100*i, 300);
bs.add(bldg);
}
试试看。你应该只调用super.paintComponent一次,在构造函数中创建你的建筑
int b = (int) Math.floor(Math.random() * 10);
for( int i = 0; i < b; i++ ) {
bldg = new Bldg(100*i, 300);
bs.add(bldg);
}
试试看。你应该只调用super.paintComponent一次你真的需要正确格式化源代码,否则没有人会费心去读它。我会创建一次建筑,然后只在
paintComponent
中绘制它们。这个方法可能会被调用很多次,并且在调整win的大小时,你会得到不同的建筑陶氏或(在旧系统上)在上面移动另一个窗口。另外,你正在创建的建筑比你想要的多得多,因为你从来没有清除过ArrayList
。为什么要将页面绘制b次?你真的需要正确设置源代码的格式,否则没人会读它。我会创建一次建筑,并且只在paintComponent
中绘制它们。这就是方法可能会被调用多次,当您调整窗口大小或(在较旧的系统上)在其上移动另一个窗口时,您将得到不同的建筑物。此外,您创建的建筑物比您想要的多得多,因为您从未清除ArrayList
。为什么要绘制页面b次?+1,因为paint()被系统多次调用,并且因为super.paintComponent()将用背景色填充所有内容并擦除您的建筑物。是的-没错,就是这样!感谢你们的帮助!这件事很简单,让我松了一口气。我用这件事在桌子上敲了几个小时的头。@Jesper-你真的应该让你的批评有建设性,否则没人会读它。+1,因为paint()被系统多次调用,并且因为super.paintComponent()将用背景色填充所有内容并删除您的建筑物。是的,没错,就是这样!感谢你们的帮助!这件事很简单,让我松了一口气。我用这件事在桌子上敲了好几个小时。@Jesper-你真的应该让你的批评具有建设性,否则没人会读它。