我得到了一个JFrame,在这个框架中有一个JPanel,JPanel中有一个JFreeChart(chart从一个方法中获取数据集),这个图表被添加到JPanel中创建的ChartPanel,然后ChartPanel被添加到JPanel中。此外,我在JPanel中获得了JComboBox,如果我更改了JComboBox中的选项,ActionListener将更新DataSet的值。返回dataset的方法从JComboBox中获取一个字符串(dataset的数据依赖于JComboBox的输出)。因此,如果我在JComboBox中更改选项,我将希望用新的数据集更新JFreeChart,并将其显示在屏幕上。我知道我需要在ActionListener中添加代码,但我不知道我应该在那里添加什么,有什么方法更新已经创建的JFreeChart吗?
private class PanelChart extends JPanel { {
this.setLayout(new BorderLayout());
// Create Dataset
//method GUIImplementation.GetDataForChart takes as an input value of combobox
CategoryDataset dataset = GUIImplementation.GetDataForChart(comboBoxCrimeTypeChart.getSelectedItem().toString());
//Create chart
JFreeChart crimeNumberBarChart = ChartFactory.createBarChart(
"Number of crimes by type", //Chart Title
"Fallen within", // Category axis
"Number of crimes", // Value axis
dataset,
PlotOrientation.VERTICAL,
true,true,false
);
ChartPanel panelCrimeNumberBarChart = new ChartPanel(crimeNumberBarChart);
this.add(panelCrimeNumberBarChart, BorderLayout.CENTER);
PanelChartSouth panelChartSouth = new PanelChartSouth(); //there is a combobox
this.add(panelChartSouth, BorderLayout.SOUTH);
}}
private class ChartButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == backChart) {
SizeAndTitleSetter(0);
SwapPanelChart(0);
} else if(e.getSource() == comboBoxCrimeTypeChart) { //comboBoxCrimeTypeChart is a JComboBox from PanelChartSouth
String crimeType = comboBoxCrimeTypeChart.getSelectedItem().toString();
System.out.println(crimeType);
dataset = GUIImplementation.GetDataForChart(crimeType); // dataset updated
}
}
}
到目前为止,我只是设法通过从JFrame中删除PanelChart来更新该图表,然后创建新的PanelChart并将其添加到JFrame,并使用repaint和Revalidate。如果我在JComboBox中更改一次选项,它就有效了,第二次更改后,屏幕上的一切都开始刹车,旧的图表不想消失,新的图表在它下面,如果我调整屏幕大小,我可以看到它。
您可以更新现有图表的数据集,如以下示例所示;当您更新模型(数据集)时,监听情节(视图)将相应地更新自己;categoryDataSet
的具体实现通常提供合适的变异器。
DefaultCategoryDataset model = …
…
@Override
public void actionPerformed(ActionEvent e) {
model.setValue(…);
}
可以使用相关图的setDataSet()
方法替换现有图表的数据集。
CategoryPlot plot = (CategoryPlot) chart.getPlot();
…
@Override
public void actionPerformed(ActionEvent e) {
plot.setDataset(…);
}
虽然在技术上可以像这里所建议的那样替换封闭视图组件,但通常更好的做法是像这里所建议的那样更新或替换模型。
问题内容: 我想循环更改条形图数据,但我不知道该怎么做。我的代码: 问题答案: 更新 模型 ,随后将显示侦听 视图 。动画更新,而不会阻塞事件调度线程,使用; 根据需要调用。 经测试:
主要内容:什么是JFreeChart 条形图,JFreeChart 条形图的示例什么是JFreeChart 条形图 条形图是用矩形表示分组数据的图表。条形的高度或长度是代表条形的值的命题。 下图显示了 JFreeChart 库中包含的一些条形图的演示版本: JFreeChart 条形图的示例 让我们以人口数量作为样本数据。 年份 美国(百万) 中国(百万) 印度(百万) 2005年 10 15 20 2010年 15 20 25 2015年 20 25 30 以下代码根据上述
我使用chart.js在我的网页上有一个BarChart。 我在其中添加了两个数据点 现在我想要更新那些条A和B,而不是删除它们并再次添加它们(我已经想好了如何做到这一点)。我想让它们垂直移动以适应它们的新值,但我无法找到如何访问图表中已经存在的数据。 没有什么比得上 其中第一个值将是存储数据的索引(F.E.)。 我该怎么做呢?
我有一个抛物线图,抛物线方程的系数存储在数组中。在(mousemotionlistener)中,抛物线的系数被更改,我想用新的系数实时更新抛物线图。我怎么才能让这一切发生?
问题内容: 我正在尝试创建一个条形图,该条形图从for循环内生成一个数据集。 数据是。现在,当数据经过所有这些操作并生成图形时,仅显示值5的条。值10的分隔条在哪里?有人知道我在做什么错吗?任何帮助表示赞赏。谢谢 编辑:这是条形图的代码: 问题答案: 我猜你在犯一个小错误,那就是。因此,每次将每个项目添加到一个单独的对象中,并使用具有最后一个值的最终实例来创建图表时,这就是在图表中仅获得最后一个值
我已经在网上搜索了足够多的东西,但没有运气。 我已经创建了一个堆叠的3D条形图,其中我无法更改默认颜色。我试了所有提供的建议。 EvenI使用了,但它不起作用。与图表、情节和渲染器中的创作顺序有关吗? 当我打印行和列时,我得到以下信息: