Java 图形未显示,但jfreechart中的值发生变化?
朋友们,在我的应用程序中,我使用swingworker为服务器计数器生成jfreechart。因此,值在X、Y轴上变化,但图形不显示。我的代码有问题吗?请朋友们检查一下 在“x,y”轴中,它显示浮点值,但hashmap的实际检索值为int。如果我使用 Plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits())强> 意味着,在Y轴上,只显示当前值,而不显示其附近的值。朋友们,请解决这两个问题。我的图形编码是Java 图形未显示,但jfreechart中的值发生变化?,java,jfreechart,swingworker,Java,Jfreechart,Swingworker,朋友们,在我的应用程序中,我使用swingworker为服务器计数器生成jfreechart。因此,值在X、Y轴上变化,但图形不显示。我的代码有问题吗?请朋友们检查一下 在“x,y”轴中,它显示浮点值,但hashmap的实际检索值为int。如果我使用 Plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits()) 意味着,在Y轴上,只显示当前值,而不显示其附近的值。朋友们,请解决这两个问题。我的图形编码是
try
{
System.out.println("Graph Occur");
MySQLClass.GraphLock=false;
Panel1.removeAll();
XYDataset Dataset;
TimeSeries Series = new TimeSeries("Random Data");
Second sec = new Second();
ChartPanel CPanel;
if(Operation_Combo.getSelectedItem().toString().equals("MySQL"))
{
if(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+"").equals(null))
{
Value = 0;
}
else
{
Value = Integer.parseInt(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+""));
}
System.out.println(Value);
}
if(Operation_Combo.getSelectedItem().toString().equals("SQL Server"))
{
if(SqlServerClass.Map_SQLServer.get(""+MainWindow.SelectedNode+"").equals(null))
{
Value = 0;
}
else
{
Value = Integer.parseInt(SqlServerClass.Map_SQLServer.get(""+MainWindow.SelectedNode+""));
}
System.out.println(Value);
}
String CounterName = MainWindow.SelectedNode.toString();
Series.add(sec, Value);
Dataset = new TimeSeriesCollection(Series);
Chart = ChartFactory.createTimeSeriesChart(CounterName, "Time", "Range", Dataset, true, false, false);
XYPlot Plot = (XYPlot)Chart.getPlot();
// Plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits());
CPanel = new ChartPanel(Chart);
Panel1.revalidate();
Panel1.add(CPanel);
Panel1.setBackground(Color.white);
System.out.println("Chart Added");
Panel1.validate();
Thread.sleep(MainWindow.Intervel * 1000);
System.out.println("Sleep="+(MainWindow.Intervel * 1000));
CPanel.repaint();
System.gc();
if(Operation_Combo.getSelectedItem().toString().equals("MySQL"))
{
MySQLClass.SQLLock=true;
new MySQLClass().execute();
}
if(Operation_Combo.getSelectedItem().toString().endsWith("SQL Server"))
{
SqlServerClass.SQLServerLock=true;
new SqlServerClass().execute();
}
}
结果是
提前感谢。您已使用单个数据项创建了一个数据集。如果设置渲染器在每个数据点显示形状,则会在图表中间看到一个单独的项目。没有线,因为您至少需要两个数据点来连接
也许您在某个循环中调用此代码,并期望看到多个项。。。但是在这种情况下,你不应该每次都创建一个新的数据集和一个新的图表。你已经发布了相同的片段,并且没有尝试遵循建议的方法:不要在EDT上睡觉;你看,我刚用那个荡秋千找到了解决办法。问题是为什么图表不在这里显示,但X、Y轴的值在每次迭代中都会发生变化。我想知道我的代码中的缺陷是什么。无论是更新此问题还是选择提出新问题,请包含一个显示您描述的问题和所采取的方法的。在我的应用程序中,我只是从树中选择一个节点。对于该节点,我只是在每次迭代时从hashmap中检索数据并将其放入dataset中。实际上我只有一个值。我应该怎么做才能在这里显示jfreechart@david Gilbert如果您只有一个数据项,那么我将使用ChartFactory.createXYBarChart(…)创建图表。请注意,还有一个附加参数,用于指示x轴和y轴是要使用DateAxis还是NumberAxis,因为只有一个值,JFreeChart很难知道y轴上显示的范围。因此,您应该手动设置它,或者调用axis.setAutoRangeMimimumSize(2)…使用您想要的最小大小。噢,谢谢@david gilbert