Processing + ControlP5库-构造函数未更新



我有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;
 }
}

请注意,我注释了分组部分,因为它很难发文本。

您不仅没有发布易于运行的代码来复制问题,而且看起来也相当混乱。如果你继续以这种风格向草图中添加代码,你最终会遇到更多的问题。

最新更新