如何解决从主类中的 Rectangle 类调用方法
我试图从主类中的矩形类中检索一个方法,但它不起作用。目标是用户单击矩形按钮,然后出现一个矩形。但是,矩形不得再次消失。此外,用户应该能够更改属性(如大小和位置)。
我不确定是否应该尝试回调函数?我非常感谢您的帮助!
非常感谢!
import controlP5.*;
import de.bezier.data.sql.*;
Rectangle rect;
Button rc;
int posX = 50;
int posY = 60;
int w = 100;
int h = 150;
//Rectangle r = new Rectangle(posX,posY,w,h);
public void drawButton() {
fill(230,230,255);
stroke(0);
rect(50,60,100,150);
}
public boolean isMouseInsideRectangleButton() {
return mouseX > posX && mouseX < posX + w
&& mouseY > posY && mouseY < posY + h;
}
ControlP5 cp5;
SQLite db;
void setup(){
size(1000,1000);
//background(255);
PFont font = createFont("Calibri",15);
rect = new Rectangle(250,500,100);
cp5 = new ControlP5(this);
cp5.addButton("Save").
setPosition(770,20).
setSize(100,30).
setFont(font).
setColorBackground(color(52,55,76));
cp5.addButton("erase").
setPosition(890,76));
cp5.addButton("Upload").
setPosition(650,76));
rc = cp5.addButton("Rectangle").
setPosition(5,4).
setSize(100,20).
setFont(font).
setColorBackground(color(52,76));
rc.onRelease(new CallbackListener() {
public void controlEvent(CallbackEvent theEvent)
{
rect.draw();
}
}
);
}
//cp5.addButton("Triangle").
//setPosition(5,42).
//setSize(100,20).
//setFont(font).
//setColorBackground(color(52,76));
//cp5.addButton("Ellipse").
//setPosition(165,4).
//setSize(100,76));
//cp5.addButton("circle").
//setPosition(165,76));
void draw(){
background(255);
fill(246,246,246);
stroke(246,246);
rect(0,1000,80);
//public void mousePressed() {
// if (isMouseInsideRectangleButton()) {
// //r.setDrawColorful(!r.getDrawColorful());
// r.draw();
// }
}
public class Rectangle
{
private int posX,h;
private boolean drawColorful = false;
//constructor
public Rectangle(int posX,int posY,int w,int h) {
this.posX = posX;
this.posY = posY;
this.w = w;
this.h = h;
}
public boolean getDrawColoful(){
return this.drawColorful;
}
public void setDrawColorful(boolean flag) {
this.drawColorful = flag;
}
public void setPosX(int posX){
this.posX = posX;
}
public int getPosX(){
return posX;
}
public void setPosY(int posY){
this.posY = posY;
}
public int getPosY(){
return posY;
}
public void setW(int w){
this.w = w;
}
public int getW() {
return w;
}
public void setH(int h) {
this.h = h;
}
public int getH() {
return h;
}
public void draw() {
if (this.drawColorful) {
fill(255,255,0);
stroke(0,255);
} else {
fill(255,255);
stroke(0,0);
}
rect(posX,h) ;
}
}
解决方法
它实际上是有效的(当您单击按钮时会触发 rect.draw()
函数)。您可以通过在回调函数中放置打印语句来验证这一点:
rc.onRelease(new CallbackListener() {
public void controlEvent(CallbackEvent theEvent)
{
println("rect.draw() fired!");
rect.draw();
}
});
您的问题是矩形仅在单击按钮时绘制。您的主 draw()
循环不断循环,无需调用 rect.draw()
,因此您再也看不到它了。
您可以通过多种方式重构代码以将矩形保留在屏幕上。一种选择是在单击按钮之前不实例化矩形。
然后,在主绘制循环中,您可以检查矩形是否存在,如果存在,则将其绘制到屏幕上。由于每次循环都会发生这种情况,因此您将始终在屏幕上看到它(创建后),并且您可以更新矩形的尺寸并在屏幕上看到它更新。
这里有一个简短的例子来说明我的意思(Rectangle
类未显示):
import controlP5.*;
Rectangle rect; // rect begins as null
Button rc;
ControlP5 cp5;
void setup(){
size(1000,1000);
PFont font = createFont("Calibri",15);
// don't create the rectangle here!
//rect = new Rectangle(250,500,100,100);
cp5 = new ControlP5(this);
// ... setup other controls here
rc = cp5.addButton("Rectangle").
setPosition(5,4).
setSize(100,20).
setFont(font).
setColorBackground(color(52,55,76));
rc.onRelease(new CallbackListener() {
public void controlEvent(CallbackEvent theEvent)
{
// only create the rectangle when the button is clicked
rect = new Rectangle(250,100);
}
});
}
void draw(){
background(255);
fill(246,246,246);
stroke(246,246);
rect(0,1000,80);
// if the rect exists,draw it on the screen
if(rect != null) {
rect.draw();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。