0

私の質問は、カラー グリッドのティーチャートに関するものです。ユーザーがグリッド上のボックスに触れると、そのボックスの色だけが変わるようにコードを書こうとしています。chart.getHeight() と chart.getWidth() を使用すると、カラー グリッドの寸法だけでなく、チャートの領域全体が得られることがわかりました。そのため、現在、グリッドの長さと幅をピクセル単位で推定して、ユーザーが触れたボックスを推定しています。カラーグリッドの長さと高さだけのピクセルの正確な量を把握する方法はありますか? さらに、Color Grid API に「クリック」メソッドがあることに気付きました。ユーザーがタッチ/クリックしたボックスを見つけることができるようにするものは既に組み込まれていますか? ありがとう!

4

1 に答える 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 に答える