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));