我的问题涉及颜色网格 teechart。我正在尝试编写代码,以便当用户触摸网格上的一个框时,只有那个框的颜色会改变。我发现使用 chart.getHeight() 和 chart.getWidth() 给出了图表的整个区域,而不仅仅是颜色网格尺寸。所以现在,我正在估计网格的长度和宽度(以像素为单位)来估计用户触摸的框。有什么方法可以计算出颜色网格长度和高度的确切像素数量?此外,我注意到 Color Grid api 中有一个“点击”方法。是否有任何内置功能可以让我找到用户触摸/单击的框?谢谢!
问问题
133 次
1 回答
1
我制作了一个使用 seriesClicked 事件的简单示例。但是,它似乎给出了正确的索引,但有颜色的单元格似乎在相反的行中:
oldIndex = -1;
tChart1.getAspect().setView3D(false);
tChart1.getLegend().setVisible(false);
ColorGrid col1 = new ColorGrid(tChart1.getChart());
col1.setColorEach(true);
for (int x=0; x<10; x++)
for (int z=0; z<10; z++)
col1.add(x, 1, z, Color.random());
col1.addSeriesMouseListener(new SeriesMouseAdapter() {
@Override
public void seriesClicked(SeriesMouseEvent e) {
ColorGrid myGrid = (ColorGrid)tChart1.getSeries(0);
int valueIndex = myGrid.clicked(e.getPoint().x, e.getPoint().y);
if (valueIndex > -1) {
if (oldIndex > -1) {
myGrid.getColors().setColor(oldIndex, oldColor);
}
oldIndex = valueIndex;
oldColor = myGrid.getValueColor(valueIndex);
myGrid.getColors().setColor(valueIndex, Color.red);
tChart1.getHeader().setText(String.valueOf(valueIndex));
tChart1.getSeries(0).repaint();
}
}
});
我将在缺陷列表中添加需要修改 ColorGrid 的单击功能 (TJ71016603)
同时,一种解决方法可能是修改给定的 valueIndex 如下:
if (valueIndex > -1) {
valueIndex = valueIndex / myGrid.getNumZValues() * myGrid.getNumZValues() + (myGrid.getNumZValues()-1 - (valueIndex % myGrid.getNumZValues()));
if (oldIndex > -1) {
//...
}
于 2013-06-14T09:31:30.597 回答