我有3个类,每个类都有一个创建Textfield,Button或Textlabel的方法。我已经设置了我的程序,以便Textfield提示您输入名称,然后将其存储在name1 String变量中。我也使用了一个包含setText(name1)的Textlabel,但是当我运行它时,它就是说NullPointer。我做了很多测试,发现问题出在构造函数中,因为我相信构造函数在开头就做了它的事情,即使变量name1发生了变化,它也不会“更新”或重新构造。我该怎么做呢?
班级:
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,然后是controlEvent,用于将Textfield中的文本存储到name1中。问题是构造函数做了它的事情,所以即使我在setup()中做createTextLabel(0);或者我等到用户输入文本,然后创建它,它仍然没有更新,我在声明name1时测试它,给它一个值,它总是显示值。
任何帮助表示赞赏! 谢谢!
答案 0 :(得分:0)
我仍然不确定你的问题究竟是什么,但其中一个是你创建了一个名为Textlabel
的类,而controlP5有一个两个,这会产生一个模糊的引用冲突。除非您想将TextLabel
类重命名为其他类,否则在声明变量时需要明确使用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;
}
}
请注意,我对分组部分进行了评论,因为它很难发短信。
您不仅没有发布易于运行的代码来复制问题,而且它看起来也非常混乱。如果您要继续以这种方式向草图添加代码,那么从长远来看,最终会遇到更多问题。