我有下面的代码,该代码从MySQL调用数据并在JPanel上返回XYPlot(JFreeChart)。根据我的JTable的行索引,有不同的数据集。问题是当我选择一行时,图表看起来不错,但是当我选择另一行时,出现了XYplot,但是当我单击(拖动,第二次单击鼠标等)时,图表返回到第一个。实际上,每次我选择另一个图并用鼠标进行缩放(缩放等)时,它都会返回到主要/第一个xyplot选择。
我尝试了JPanel.validate();但仍然无法正常工作,也repaint();方法。而且,使用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
时添加一个新组件。如果您的ChartPanel
是PanelWithChart
上的唯一组件,请尝试删除上一个图表:PanelWithChart.setLayout(new BorderLayout());
PanelWithChart.removeAll();
PanelWithChart.add(CP, BorderLayout.CENTER);
如果面板上还有其他组件,则此方法将无法正常工作,如果是这种情况,则需要使用
PanelWithChart.remove(Component comp)
,但是由于您没有参考上一张图表,因此更加困难。请不要以为这可能不是使用图表的最佳方法,您是否考虑过一次创建图表并将
dataset
用作属性?然后,您可以在PrimaryTableMouseClicked
中使用此代码来达到很大的效果。dataset.removeAllSeries();
XYSeries newSeries = new XYSeries("New Data");
dataset.addSeries(newSeries);
关于java - JFreeChart数据集不适用于JPanel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13185921/