gpt4 book ai didi

java - JFreeChart 数据集不适用于 JPanel

转载 作者:行者123 更新时间:2023-11-29 14:12:51 24 4
gpt4 key购买 nike

我有以下代码,它从 MySQL 调用数据并在 JPanel 上以 XYPlot (JFreeChart) 形式返回。有不同的数据集,具体取决于我的 JTable 的行索引。问题是当我选择一行时,图表似乎很好,但是当我选择另一行时,会出现 XYplot,但是当我单击(拖动、第二次单击鼠标等)时,图表会返回到第一行。实际上,每次当我选择另一个图并用鼠标进行操作(缩放等)时,它都会返回到主要/第一个 xyplot 选择。我尝试了 JPanel.validate();但仍然不起作用,还重绘();方法。此外,使用 JFrame 它工作得非常好,没有问题(是的!正确的,因为每次都会使用特定的 XYPlot 打开一帧)。我认为问题出在 JPanel 上。有什么帮助/建议吗?请!

更新:带有 XYPlot 的 JPanel 封装在 JSplitPanel 中。当我移动分隔线(用 XYPlot 放大 JPanel)时,有两个 XYPlot,第一个(在第一次单击时获得,第二个(如果第二次单击到另一行/数据集 -> 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);
}

}

最佳答案

我认为这可能是你的问题

PanelWithChart.setLayout(new BorderLayout());
PanelWithChart.add(CP, BorderLayout.CENTER);

通过调用 JPanel#add(),您每次调用 PrimaryTableMouseClicked 时都会添加一个新组件。如果您的 ChartPanelPanelWithChart 上的唯一组件,请尝试删除以前的图表:

PanelWithChart.setLayout(new BorderLayout());
PanelWithChart.removeAll();
PanelWithChart.add(CP, BorderLayout.CENTER);

如果面板上有其他组件,这将不起作用,如果是这种情况,那么您将需要使用 PanelWithChart.remove(Component comp) 但这更难,因为您没有引用上一张图表。

请注意,这可能不是使用图表的最佳方式,您是否考虑过创建一次图表并将数据集作为属性?然后,您可以在 PrimaryTableMouseClicked 中使用此代码来实现很多效果。

dataset.removeAllSeries();
XYSeries newSeries = new XYSeries("New Data");
dataset.addSeries(newSeries);

关于java - JFreeChart 数据集不适用于 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13185921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com