MySQL からデータを呼び出し、JPanel の XYPlot (JFreeChart) で返す次のコードがあります。JTable の行インデックスに応じて、さまざまなデータセットがあります。問題は、行を選択するとグラフが適切に見えるのですが、別の行を選択すると XYplot が表示されますが、クリック (ドラッグ、マウスの 2 回目のクリックなど) を行うと、グラフが最初のグラフに戻ります。 . ほとんどの場合、別のプロットを選択してマウスで何かを作成すると (ズームなど)、プライマリ/最初の xyplot 選択に戻ります。JPanel.validate(); を試しました。それでも機能しません。また、repaint(); 方法。さらに、JFrame では非常にうまく機能しており、問題はありません (そうです、特定の XYPlot で毎回 1 つのフレームが開くためです)。問題はJPanelにあると思います。ヘルプ/アドバイスはありますか?お願いします!
更新: XYPlot を使用した JPanel は、JSplitPanel にカプセル化されています。分割線を移動すると (JPanel を XYPlot で拡大)、2 つの XYPlot があり、最初の 1 つ (最初のクリックで取得) と 2 つ目 (別の行/データセットに 2 回クリックした場合 -> XYPlot) です。問題はクエリからのものであり、以前のXYPlotを再描画します。
private void PrimaryTableMouseClicked(java.awt.event.MouseEvent evt) {
int row = PrimaryTable.getSelectedRow();
int realIndex = PrimaryTable.convertRowIndexToModel(row);
String Table_click = (PrimaryTable.getModel().getValueAt(realIndex, 0).toString());
try {
String query = "select wavenumber,spectrum FROM test where id_test ='" + Table_click + "'";
pst = conn.prepareStatement(query);
rs = pst.executeQuery();
if (rs.next()) {
JDBCXYDataset dataset = new JDBCXYDataset(ConnecrDb(), query);
JFreeChart chart = ChartFactory.createXYLineChart(
"title",
"cm",
"in",
dataset,
PlotOrientation.VERTICAL,
false, //legend
true, //tooltip
false); //urls
XYPlot plot = (XYPlot) chart.getPlot();
ChartPanel CP = new ChartPanel(chart);
PanelWithChart.setLayout(new BorderLayout());
PanelWithChart.add(CP, BorderLayout.CENTER);
PanelWithChart.repaint();
}
rs.close();
pst.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}