Java新手求助:如何实现鼠标点击才生成并保留site对象
解决启动自动生成site对象的问题
嘿,Lilly!刚看到你的问题,这事儿其实很好解决——问题出在你的代码里启动阶段就自动执行了一次site对象的创建逻辑,咱们把它改掉就行😎
问题根源
你当前的代码里,肯定在程序初始化的地方(比如构造函数、setup()方法,或者初始化代码块)调用了生成site对象的代码,所以程序一启动就会自动创建一个。而你需要把这个创建逻辑完全移到鼠标点击的事件处理里,只在点击时触发。
具体修改步骤
找到并移除初始化时的创建代码
先检查你的代码,找到类似site = new Site()或者创建site实例的语句,把它从程序启动时就执行的代码块里删掉(比如Processing的setup()、Java Swing的构造函数/初始化块)。确保创建逻辑只在鼠标点击时触发
把生成site对象的代码,放到鼠标点击的事件处理方法里。如果需要保留每次点击生成的所有site,建议用集合(比如ArrayList)来存储,避免覆盖之前的实例。
示例代码(以Processing为例,适配你的场景)
假设你之前的代码是这样的(启动时自动创建site):
// 全局变量 Site site; void setup() { size(800, 600); site = new Site(); // 这里就是启动自动创建的元凶! } void draw() { background(255); if (site != null) { site.display(); } } void mousePressed() { site = new Site(); // 点击时覆盖原有对象,但启动已经有一个了 }
修改后的代码(仅点击生成,保留所有site):
// 用集合存储所有生成的site ArrayList<Site> sites = new ArrayList<Site>(); void setup() { size(800, 600); // 这里不要写任何创建site的代码! } void draw() { background(255); // 遍历所有site并显示 for (Site s : sites) { s.display(); } } void mousePressed() { // 点击时新增一个site,传入鼠标位置让它生成在点击处 sites.add(new Site(mouseX, mouseY)); }
关键提醒
- 如果是Java Swing项目,逻辑是一样的:把创建site的代码移到
MouseListener的mouseClicked()方法里,用集合存储所有实例,并重绘界面显示它们。 - 别忘了给Site类的构造函数添加参数(比如x、y坐标),这样可以让新生成的site出现在鼠标点击的位置,体验更友好~
内容的提问来源于stack exchange,提问作者Lilly
相关产品推荐
相关产品推荐

