19

JavaFXで折れ線グラフを作成中です。現在のところすべて問題なく、データベース ストアド プロシージャから必要なデータを使用してチャートを正常に作成できます。とにかく、可能であれば、LineChart のすべてのデータ ポイントに、特定のポイントの背後にある値を示すマウス ホバー イベント (£150,000 など) を設定する必要があります。ホバー時に % 値を表示する PieCharts でこれが行われた例を見たことがありますが、LineCharts の例はどこにも見つかりません。これを行うことはできますか?

可能であれば、誰かが私を正しい方向に向けることができますか?

これまでのコード:

private static final String MINIMIZED = "MINIMIZED";
private static final String MAXIMIZED = "MAXIMIZED";
private static String chartState = MINIMIZED;
// 12 Month Sales Chart
XYChart.Series<String, Number> series = new XYChart.Series<>();
XYChart.Series<String, Number> series2 = new XYChart.Series<>();

public void getDeltaData() {

    try {
        Connection con = DriverManager.getConnection(connectionUrl);
        //Get all records from table
        String SQL = "";
        Statement stmt = con.createStatement();

        //Create the result set from query execution.
        ResultSet rs = stmt.executeQuery(SQL);

        while (rs.next()) {

            series.getData().add(new XYChart.Data<String, Number>(rs.getString(1),
                    Double.parseDouble(rs.getString(7))));
            series2.getData().add(new XYChart.Data<String, Number>(rs.getString(1),
                    Double.parseDouble(rs.getString(8))));

        }
        rs.close();
        stmt.close();

    } catch (Exception e) {
    }
    yearChart = createChart();
}

    protected LineChart<String, Number> createChart() {
    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();

    // setup chart
    series.setName("Target");
    series2.setName("Actual");
    xAxis.setLabel("Period");
    yAxis.setLabel("£");

    yearChart.getData().add(series);
    yearChart.getData().add(series2);

    yearChart.setCreateSymbols(false);

    return yearChart;
}

jewelsea が提供する回答は、この問題に対する完璧な解決策です。

ありがとう、ジュエルシー。

4

2 に答える 2

36

XYChart.Data.setNode(hoverPane)を使用して、各データ ポイントのカスタム ノードを表示します。hoverNode をStackPaneのようなコンテナーにします。マウスがノードに出入りするタイミングがわかるように、マウス イベント リスナーを追加します。入力時に、値のラベルを hoverPane 内に配置します。終了時に、hoverPane からラベルを削除します。

この手法を示すサンプル コードがいくつかあります。

サンプル コードの出力は、カーソルが 22 ノードの上に置かれた状態で表示されます。

ホバーしたノード

于 2013-01-31T10:21:53.457 に答える