Java 注释位置不会随着系列滚动而更新

Java 注释位置不会随着系列滚动而更新,java,teechart,Java,Teechart,我正在使用Annotation和AnnotationCallout在序列上创建标签。但我的问题是,随着新数据添加到图表中,他们的位置没有更新。系列将滚动,但注释/注释标注将保留在同一位置 我使用以下代码设置注释和注释标注: Anno.setLeft(aSeries.calcXPos(iIndex)-51); Anno.setTop(aSeries.calcYPos(iIndex)+100); Callout.setXPosition(aSeries.calcXPos(iIndex)); Cal

我正在使用Annotation和AnnotationCallout在序列上创建标签。但我的问题是,随着新数据添加到图表中,他们的位置没有更新。系列将滚动,但注释/注释标注将保留在同一位置

我使用以下代码设置注释和注释标注:

Anno.setLeft(aSeries.calcXPos(iIndex)-51);
Anno.setTop(aSeries.calcYPos(iIndex)+100);

Callout.setXPosition(aSeries.calcXPos(iIndex));
Callout.setYPosition(aSeries.calcYPos(iIndex));

是否有方法将注释附加到序列上的点,或者我使用的作业工具错误?

注释位于图表上的像素位置或相对位置,具体取决于您如何定义
缩放属性

这就是
Annotation
的工作原理。因此,一旦定义了注释的位置,它就会粘贴在那里

如果要在点上粘贴标签,请查看
Series.Marks

向序列添加点时,可以添加标签文本,如:

AddXY(xpo,yPos,'Hello',clGreen)

设置
Series.Marks.Visible:=True
以显示标记标签。要动态自定义标签文本,请查看事件
TChartSeries.OnGetMarkText

浏览所有
系列。标记
属性以根据您的喜好自定义外观

更新:

为了隐藏序列数据上的一些标记,请在
OnGetMarkText
事件期间将标签文本设置为空字符串

如何使用
OnGetMarkText
的示例:

...
Series1.OnGetMarkText := Self.Series1GetMarkText;  // Define the OnGetMarkText event
...

procedure TMyForm.Series1GetMarkText(Sender: TChartSeries;
  ValueIndex: Integer; var MarkText: string);
begin
  if ValueIndex=3 then  // Just an example how to set the selection criteria 
    MarkText := 'Hello'
  else
    MarkText := '';
end;

注释定位在图表上的像素位置或相对位置上,具体取决于您如何定义
缩放
属性

这就是
Annotation
的工作原理。因此,一旦定义了注释的位置,它就会粘贴在那里

如果要在点上粘贴标签,请查看
Series.Marks

向序列添加点时,可以添加标签文本,如:

AddXY(xpo,yPos,'Hello',clGreen)

设置
Series.Marks.Visible:=True
以显示标记标签。要动态自定义标签文本,请查看事件
TChartSeries.OnGetMarkText

浏览所有
系列。标记
属性以根据您的喜好自定义外观

更新:

为了隐藏序列数据上的一些标记,请在
OnGetMarkText
事件期间将标签文本设置为空字符串

如何使用
OnGetMarkText
的示例:

...
Series1.OnGetMarkText := Self.Series1GetMarkText;  // Define the OnGetMarkText event
...

procedure TMyForm.Series1GetMarkText(Sender: TChartSeries;
  ValueIndex: Integer; var MarkText: string);
begin
  if ValueIndex=3 then  // Just an example how to set the selection criteria 
    MarkText := 'Hello'
  else
    MarkText := '';
end;

非常感谢。SeriesMarks是我要找的。除了序列上的所有点都有带有y值的标记外,它可以正常工作。如何防止此情况发生?如果我将所有标记设置为“”,则y值仍会出现。这是我的代码:SeriesMarks\u Chart1\u Line2=新的SeriesMarks(Chart1\u Line2);sMarks_Chart1_Line2.设置可见(真);sMarks_Chart1_Line2.getPen().setColor(Color.RED);图1\u线2.设置标记(sMarks\u图1\u线2);Chart1_Line2.getMarks().setVisible(true);Chart1_Line2.add(new com.steema.teechart.DateTime(new DateTime(tsDateTime.getMillis()),dStart_value,“”;嗯,试着激活
OnGetMarkText
。TeeChart(XE2)的最新文档说:“此事件通知用户必须提供标记文本字符串。MarkText字符串包含默认文本表示形式。您可以更改序列的MarkText以绘制自定义标记,或将其设置为空以隐藏特定标记。”@user1254689您可能需要设置Marks.Style,例如:Series1.Marks.Style:=smsLabelHello,请在此处查找MarkTextResolver用法示例:谢谢。SeriesMarks是我要找的。除了序列上的所有点都有带有y值的标记外,它可以正常工作。如何防止此情况发生?如果我将所有标记设置为“”,则y值仍会出现。这是我的代码:SeriesMarks\u Chart1\u Line2=新的SeriesMarks(Chart1\u Line2);sMarks_Chart1_Line2.设置可见(真);sMarks_Chart1_Line2.getPen().setColor(Color.RED);图1\u线2.设置标记(sMarks\u图1\u线2);Chart1_Line2.getMarks().setVisible(true);Chart1_Line2.add(new com.steema.teechart.DateTime(new DateTime(tsDateTime.getMillis()),dStart_value,“”;嗯,试着激活
OnGetMarkText
。TeeChart(XE2)的最新文档说:“此事件通知用户必须提供标记文本字符串。MarkText字符串包含默认文本表示形式。您可以更改序列的MarkText以绘制自定义标记,或将其设置为空以隐藏特定标记。”@user1254689您可能需要设置Marks.Style,例如:Series1.Marks.Style:=smsLabelHello,请在此处查找MarkTextResolver用法的示例: