我有3个类,每个类都有一个方法来创建一个Textfield, Button或Textlabel。我已经设置了我的程序,以便一个Textfield提示您输入名称,然后将其存储在name1 String变量中。我还使用一个Textlabel,它有它的setText(name1),但当我运行它,它说NullPointer。我做了大量的测试,发现问题在于构造函数,因为我相信构造函数在开始时做它的事情,即使变量名称1改变,它也不会"更新"或重建。我该怎么做呢?
类:
public class Textlabel {
int x;
int y;
String name;
String text;
int txtColor;
int txtSize;
String group;
Textlabel(int _x, int _y, String _name, String _text, int _txtColor, int _txtSize, String _group) {
x = _x;
y = _y;
name = _name;
text = _text;
txtColor = _txtColor;
txtSize = _txtSize;
group = _group;
}
}
实际绘制Textlabel的对应函数:
void createTextLabel(int num) {
cp5.addTextlabel(tl[num].name)
.setFont(createFont("TradeGothic-Bold", tl[num].txtSize))
.setColor(tl[num].txtColor)
.setText(tl[num].text)
.setPosition(tl[num].x, tl[num].y)
.setGroup(tl[num].group);
}
构造函数:
String name1;
Textlabel tl[] = {
new Textlabel(255, 271, "Contact 1 Text", name1, #ffffff, 37, "g4"),
};
另一部分代码用于Textfield和controllevent,用于将Textfield中的文本存储到name1中。问题是构造函数做它的事情,所以即使我在setup()中做createTextLabel(0);或者我等到用户输入文本,然后创建它,它仍然没有更新,我测试了它,当我声明name1,给它一个值,它总是显示值。
任何帮助都是感激的!谢谢!
我仍然不确定您的问题到底是什么,但其中一个问题是您创建了一个名为Textlabel
的类,而controlP5有一个两个,这创建了一个模糊的引用冲突。除非您想将TextLabel
类重命名为另一个,否则在声明变量时需要显式地使用use control5.TextLabel
。
你没有张贴一个最小的例子,很容易运行/测试,所以根据你粘贴的,这是我如何设法运行你的代码:
import controlP5.*;
ControlP5 cp5;
String name1 = "name1";//this was null in your code sample
Textlabel tl[] = {new Textlabel(255, 271, "Contact 1 Text", name1, #ffffff, 37, "g4") };
void setup(){
size(400,400);
cp5 = new ControlP5(this);
//a dummy text based on the ControlP5textlabel sample just fo test.
controlP5.Textlabel myTextlabelA = cp5.addTextlabel("label")
.setText("A single ControlP5 textlabel, in yellow.")
.setPosition(100,50)
.setColorValue(0xffffff00)
.setFont(createFont("Georgia",20))
;
createTextLabel(0);
}
void draw(){
background(127);
cp5.draw();
}
void createTextLabel(int num) {
if(tl[num] != null){
println(tl[num]);//print the data to console
cp5.addTextlabel(tl[num].name)
.setFont(createFont("TradeGothic-Bold", tl[num].txtSize))
.setColor(tl[num].txtColor)
.setText(tl[num].text)
.setPosition(tl[num].x, tl[num].y)
// .setGroup(tl[num].group) //g4 needs to be added as a group to controlP5
;
}else System.err.println(num+" is invalid, use indices from 0 to " + (tl.length-1));
}
public class Textlabel {
int x;
int y;
String name;
String text;
int txtColor;
int txtSize;
String group;
Textlabel(int _x, int _y, String _name, String _text, int _txtColor, int _txtSize, String _group) {
x = _x;
y = _y;
name = _name;
text = _text;
txtColor = _txtColor;
txtSize = _txtSize;
group = _group;
}
public String toString(){
return "x:"+x+",y:"+y+",name:"+name+",text:"+text+",txtColor:"+txtColor+",txtSize:"+txtSize+",group:"+group;
}
}
请注意,我注释了分组部分,因为它很难发文本。
您不仅没有发布易于运行的代码来复制问题,而且看起来也相当混乱。如果你继续以这种风格向草图中添加代码,你最终会遇到更多的问题。