我正在使用Processing 3为伺服控制器制作GUI而不是使用预制库。它基于一个打包类组织几个子类,这些子类使用registerMethod鼠标事件来操作(而不是在主草图中更简单地使用mousePressed())。我要挂起的是每个类的PApplet命名/术语,以确保它们可以在子类内部以及从main调用时自行运行。在我的示例中,包只是一个按钮,以及用于比较的直接按钮调用。我知道大多数Java用户认为Applet使用过时,但由于我只是使用Processing IDE,我想更好地理解这个概念,并尽量避免使用更复杂的东西(但可能不那么混乱)就像一个接口。
PackServ tryMe;
Butt bOne;
void setup() {
size(200, 150);
tryMe = new PackServ(this);
bOne = new Butt(this);
}
void draw() {
background (250);
tryMe.Add(20, 10, 50);
line(100,10,100,100);
fill(130,255,170);
rect(120,10,50,60,5);
bOne.Add("B2", 145,35,25);
stroke(20); textSize(14); fill(25);
text("single", 130,100);
text("package", 20,100);
}
public class PackServ extends PApplet {
PApplet SerApp;
Butt Butt1, Butt2;
String theName;
int pkX, pkY, pkW;
PackServ(PApplet pa) {
this.SerApp = pa;
theName = "The Slider";
pkX = 20;
pkY = 20;
pkW = 100;
}
void Add(int _x, int _y, int _w) {
pkX = _x; pkY = _y; pkW = _w;
Butt1 = new Butt (this);
drawIt();
}
void drawIt() {
SerApp.fill(200);
SerApp.strokeWeight(1);
SerApp.rect(pkX, pkY, pkW, 60, 5);
Butt1.Add("B1", pkX+25, pkY+25, 25);
}
}
public class Butt
{
PApplet butApp;
int theX, theY, theW, theH, bRad;
boolean pressed = false;
color n;
color h = color(240, 210, 10);
color f = color (40, 90, 190);
color a = color (240, 20, 20);
int oBb, li;
String theLabel;
Butt (PApplet butApplet) {
this.butApp = butApplet;
butApp.registerMethod("mouseEvent",this);
n = f;
}
void Add(String _myName, int x, int y, int siz) {
theLabel = _myName;
theX = x;
theY = y;
bRad = siz;
fill(75);
textSize(9);
buttonLook();
}
boolean overB(int mx, int my) {
if (dist (mx, my, theX, theY) <= bRad) {
return true;
} else {
return false;
}
}
void buttonLook() {
if (overB(mouseX, mouseY) && pressed) {
n = a;
oBb = 3; li = 100;
} else if (overB(mouseX, mouseY)) {
text(theLabel, theX-10, theY+25);
n = h;
} else {
n = f; oBb=1; li=25;
}
strokeWeight(oBb);
stroke(li);
fill(n);
ellipse(theX, theY, bRad, bRad);
}
void mouseEvent(MouseEvent e) {
pressed = false;
int mx = e.getX(), my = e.getY();
switch (e.getAction()) {
case MouseEvent.PRESS:
pressed = overB(mx, my);
break;
}
}
}
答案 0 :(得分:-1)
我不完全确定你在问什么,所以让我试着回答你似乎有些困惑的一些不同的事情。
我知道大多数Java用户认为Applet使用过时的
请注意,除了名称之外,PApplet
与applet无关。从历史上看,PApplet
是一个小程序,但从处理3开始,情况就不再如此。 PApplet
是它自己的东西,与applet无关。
让我们仔细看看这段代码:
public class PackServ extends PApplet {
PApplet SerApp;
PackServ(PApplet pa) {
this.SerApp = pa;
...
扩展PApplet
并将PApplet
参数放入构造函数中没有多大意义。这意味着您现在有两个PApplet
实例,这几乎不是您想要做的。
相反,我的猜测是你可能想要摆脱extends PApplet
部分,只使用你的serApp
变量使用Processing的类。
我认为这是你困惑的关键:PApplet
类提供了许多方便的函数,如draw()
和ellipse()
,基本上是Processing参考中的大多数变量和函数。因此,您确实需要PApplet
的实例,但在使用Processing编辑器时会为您创建该实例。您无需通过扩展PApplet
类来创建自己的实例。