在Eclipse中使用字符串代替ObjectName处理调用方法
我试图将我拥有的多个草图组合在一起,将它们作为类放在一个草图中,然后按键浏览它们 我不确定我是否遵循了正确的方法,但我基本上通过使用布尔值来打开和关闭它们。我有点像:在Eclipse中使用字符串代替ObjectName处理调用方法,eclipse,string,methods,processing,Eclipse,String,Methods,Processing,我试图将我拥有的多个草图组合在一起,将它们作为类放在一个草图中,然后按键浏览它们 我不确定我是否遵循了正确的方法,但我基本上通过使用布尔值来打开和关闭它们。我有点像: package combiner; public class Combiner extends PApplet { //... ClassNameOne s1; ClassNameTwo s2; //... ClassNameNine s9; // AllSketches //
package combiner;
public class Combiner extends PApplet {
//...
ClassNameOne s1;
ClassNameTwo s2;
//...
ClassNameNine s9;
// AllSketches //
boolean[] sketches;
int totalSketches = 9;
String str_ts = String.valueOf(totalSketches);
char char_ts = str_ts.charAt(0);
public void setup() {
size(1920, 1080);
sketches = new boolean[totalSketches];
for (int i = 0; i < sketches.length; i++) {
sketches[i] = false;
}
s1 = new ClassNameOne(this);
s2 = new ClassNameTwo(this);
//...
s9 = new ClassNameNine(this);
}
public void draw() {
//drawingEachSketchIfItsBoolean==True
if (sketches[0] == true) {
s1.run();
} else if (sketches[1] == true) {
s2.run();
//....
}
}
public void keyPressed() {
if (key >= '1' && key <= char_ts) {
String str_key = Character.toString(key);
int KEY = Integer.parseInt(str_key);
for (int i = 0; i < sketches.length; i++) {
sketches[i] = false;
}
sketches[KEY - 1] = true;
//initializingEachClassIfKeyPressed
if (KEY == 0) {
s1.init();
} else if (KEY == 1) {
s2.init();
}
//....
}
}
for(int i=0;i<sketches.length;i++){
if(sketches[i]==true){
String str = String.valueOf(i+1);
str="s"+str; //str becomes the Object's name
??? str.run(); ???
}
}
组合器;
公共类合并器扩展PApplet{
//...
类名一s1;
类名2 s2;
//...
类名九s9;
//所有草图//
布尔[]草图;
整数=9;
String str_ts=String.valueOf(totalSketches);
char char_ts=str_ts.charAt(0);
公共作废设置(){
规模(19201080);
草图=新布尔值[TotalSketchs];
对于(int i=0;i if(key>='1'&&key我不确定在新草图中将不同草图表示为类的整个想法是否真的那么好,但无论如何,在Java中似乎有可能从字符串中获取类!查找class.forName()
,如下所述:
请记住,您将从中获得一个类,而不是一个实例!最干净的解决方案是创建一个接口草图,该草图必须在草图类中实现,然后:
Sketch[] sketches;
int activeSketch = 0;
void setup(){
sketches = new Sketch[2];
sketches[0] = new SketchRed();
sketches[1] = new SketchGreen();
sketches[activeSketch].init();
}
void draw(){
sketches[activeSketch].draw();
}
interface Sketch{
void init();
void draw();
}
class SketchRed implements Sketch{
void init(){}
void draw(){
fill(255, 0, 0);
ellipse(width/2, height/2, 30, 30);
}
}
class SketchGreen implements Sketch{
void init(){}
void draw(){
fill(0, 255, 0);
ellipse(width/2, height/2, 30, 30);
}
}
void keyPressed(){
activeSketch++;
if(activeSketch >= sketches.length){
activeSketch = 0;
}
sketches[activeSketch].init();
}
好的,谢谢,我已经试着实现了,但还没有弄清楚是怎么实现的。关于表示不同草图的想法,我在两周内有一个vjing活动,我发现不使用其他软件就可以轻松地从一个草图跳到另一个草图。如果这是您遇到的问题,请编辑问题以反映这一点!如果您有pr获取class.forName()
所需的完全限定类名(类似于'abc.xyz.ClassName')的问题,请使用例如s1.getClass()
获取它。如果这不是您遇到的问题,那么请解释您还需要帮助的地方!如果您查看我希望在draw方法中使用的最后一个for循环,您将看到我要做的是通过9个(或更多)布尔循环,找到一个为真的,然后仅运行该特定对象。如果布尔草图[4]==真,则s4.run();因此,我的问题不是获取s4实例的类,而是因为我知道该实例的名称是字符串(str=“s”+str),所以从这里开始运行它的方法“run”。希望我更清楚。你看过“母”库了吗??