Java PropertyAccess:是否有一种动态创建访问函数的方法?

Java PropertyAccess:是否有一种动态创建访问函数的方法?,java,gwt,extjs,Java,Gwt,Extjs,事情是这样的。。我想画一些线到一些图表为一个网站。 这些图表有时会有一两行。。但有时还有一些,其中每一个都是由一个任意的数学函数定义的 就目前而言,我只知道画三条线的可能性: public class ArbitraryFunctionData { private double x1; private double x2; private double x3; private double y; public ArbitraryFunctionData(double x1

事情是这样的。。我想画一些线到一些图表为一个网站。 这些图表有时会有一两行。。但有时还有一些,其中每一个都是由一个任意的数学函数定义的

就目前而言,我只知道画三条线的可能性:

public class ArbitraryFunctionData {

  private double x1;
  private double x2;
  private double x3;
  private double y;

  public ArbitraryFunctionData(double x1, doouble x2, double x3, double y) {
    this.x1 = x1;
    this.x2 = x2;
    this.x3 = x3;
    this.y = y;
  }

  public double getX1() {
    return x1;
  }

  public double getX2() {
    return x2;
  }

  public double getX3() {
    return x3;
  }

  public double getY() {
    return y;
  }

  public void setX1(double x1) {
    this.x1 = x1;
  }

  public void setX2(double x2) {
    this.x2 = x2;
  }

  public void setX3(double x3) {
    this.x3 = x3;
  }

  public void setY(double y) {
    this.y = y;
  }
}
在某些地方需要定义此接口:

  public interface ArbitraryFunctionAccess extends
      PropertyAccess<ArbitraryFunctionData> {

    ValueProvider<ArbitraryFunctionData, Double> x1();
    ValueProvider<ArbitraryFunctionData, Double> x2();
    ValueProvider<ArbitraryFunctionData, Double> x3();

    @Path("x")
    ModelKeyProvider<ArbitraryFunctionData> xKey();
  }

这是一种非常不舒服的创建图表的方法。有没有更好的办法?
ArbiraryFunctionData
需要预定义,并且需要手动添加每个访问方法。我宁愿做这样的事:

ArbitraryFunction f1 = new ArbitraryFunction(0, 5, 0, 5) {

  @Override
  public double f(double x) {
    return x+1;
  }

};

ArbitraryFunction f2 = new ArbitraryFunction(0, 5, 0, 5) {

  @Override
  public double f(double x) {
    return x+2;
  }

};

store.add(0, f1.getData()); // a line
store.add(1, f2.getData()); // another line
其中,需要覆盖任意函数函数
public double f(double x)
,并且
arbiryfunction.getData()
定义为
public List getData()
。这将为整个过程增加更多的动态性,但问题是,我无法将字段添加到图表中,因为它们需要在
公共界面任意功能访问中预定义


我希望我恰当地描述了我的需求。有人知道这个问题的可能解决方案吗?

PropertyAccess
不是重点-
ValueProvider
是重点。
PropertyAccess
类型只是一种很好的方法,可以自动生成一系列非常枯燥的
ValueProvider
/
ModelKeyProvider
/
LabelProvider
类型,您可以轻松地手动生成这些类型。你的时间很宝贵,所以我们不会让你手工完成

这意味着您可以手工实现
ValueProvider
,做任何您想做的事情。我不太清楚
0,5,0,5
是什么意思,也不清楚f1.getData()打算返回/执行什么操作,但可以将f1定义为可以在该列表中查找对象的ValueProvider类型

public class AribtraryDataVP implements 
        ValueProvider<ArbitraryFunctionData, Double>() {
  private final int index;
  public AribtraryDataVP(int index) {
    this.index = index;
  }
  public Double getValue(ArbitraryFunctionData object) {
    return object.getData().get(index);
  }
  public void setValue(ArbtraryFunctionData object, Double value) {
    object.getData().set(index, object);
  }
  public String getPath() {
    return "data[" + index + "]";
  }
}

PropertyAccess
不是重点-
ValueProvider
是重点。
PropertyAccess
类型只是一种很好的方法,可以自动生成一系列非常枯燥的
ValueProvider
/
ModelKeyProvider
/
LabelProvider
类型,您可以轻松地手动生成这些类型。你的时间很宝贵,所以我们不会让你手工完成

这意味着您可以手工实现
ValueProvider
,做任何您想做的事情。我不太清楚
0,5,0,5
是什么意思,也不清楚f1.getData()打算返回/执行什么操作,但可以将f1定义为可以在该列表中查找对象的ValueProvider类型

public class AribtraryDataVP implements 
        ValueProvider<ArbitraryFunctionData, Double>() {
  private final int index;
  public AribtraryDataVP(int index) {
    this.index = index;
  }
  public Double getValue(ArbitraryFunctionData object) {
    return object.getData().get(index);
  }
  public void setValue(ArbtraryFunctionData object, Double value) {
    object.getData().set(index, object);
  }
  public String getPath() {
    return "data[" + index + "]";
  }
}

我看了一下,这似乎把我引向了正确的方向,但似乎我无法真正解决
@Path(“x”)ModelKeyProvider xKey()东西。。ArricryFunction现在定义为
公共抽象类ArricryFunction实现ValueProvider
,但现在我不知道如何管理ModelKeyProvider。我所要做的就是在图表中动态添加多行。你需要重新表述你的问题,而不是什么做不到的,从你想要实现的开始,然后继续你已经尝试过的。但重申一下,PropertyAccess不能为动态属性集做任何事情。删除ArbiraryFunction idea-ValueProvider已经是该函数了。您可以查看这篇博文的ValueProvider部分:图表如何区分线条?我知道那个问题听起来很愚蠢,但是。。我只是不明白这一切的意图,为什么仅仅在图表中添加几行就显得如此棘手……好吧,这对我来说很有效。谢谢你的帮助!我可以补充另一个问题吗:如何在垂直轴上显示十进制值?请使用
axis.setLabelProvider(myLabelProvider)
NumericAxis
RoundNumberProvider
)的默认值舍入到最接近的整数。我看了一下,这似乎指引了我正确的方向,但似乎我无法真正解决这个
@Path(“x”)ModelKeyProvider xKey()东西。。ArricryFunction现在定义为
公共抽象类ArricryFunction实现ValueProvider
,但现在我不知道如何管理ModelKeyProvider。我所要做的就是在图表中动态添加多行。你需要重新表述你的问题,而不是什么做不到的,从你想要实现的开始,然后继续你已经尝试过的。但重申一下,PropertyAccess不能为动态属性集做任何事情。删除ArbiraryFunction idea-ValueProvider已经是该函数了。您可以查看这篇博文的ValueProvider部分:图表如何区分线条?我知道那个问题听起来很愚蠢,但是。。我只是不明白这一切的意图,为什么仅仅在图表中添加几行就显得如此棘手……好吧,这对我来说很有效。谢谢你的帮助!我可以补充另一个问题吗:如何在垂直轴上显示十进制值?请使用
axis.setLabelProvider(myLabelProvider)
NumericAxis
RoundNumberProvider
)的默认值舍入到最接近的整数。
//f1, f2
axis.addField(new AribtraryDataVP(1));
axis.addField(new AribtraryDataVP(2));