JFreeChart用add加到panel上后没有显示出图来的解决

	        BotPanel = new JPanel();
	  	BotPanel.setBounds(10, 300, 330, 250);
	  	BotPanel.setLayout(null);
	  	BotPanel.setBorder(BorderFactory.createTitledBorder("使用情况"));
	  	BotPanel.add(new ChartTest().getChartPanel());  
		this.add(BotPanel);

一开始从网上找了个JFreeChart的样例,想先直接把图显示在自己的JPanel里看看效果,怎么都显示不出来,代码如上,后来发现是因为这种写法没有设置大小,导致没法很好地显示,于是先定义了个变量接收这个ChartPanel,然后用setBounds函数设置一下就可以了,修改后代码如下:

                BotPanel = new JPanel();
	  	BotPanel.setBounds(10, 300, 330, 250);
	  	BotPanel.setLayout(null);
	  	BotPanel.setBorder(BorderFactory.createTitledBorder("使用情况"));
	  	ChartPanel cp = new ChartTest().getChartPanel();
	  	cp.setBounds(50, 20, 200, 200);	 
	  	BotPanel.add(cp); 	  
		this.add(BotPanel);

JFreeChart相关jar包下载传送门:(这只是其中一个,其他的在这个网页上也能找到,比较好找,就不一一附上了)

点击打开链接

JFreeChart是一个Java类库,用于创建各种类型的图表,包括折线图,柱状图,饼图等等。在JFreeChart中,创建动态折线图可以通过以下步骤完成: 1. 导入JFreeChart类库。 2. 创建一个XYSeries对象,用于存储折线图的数据。 3. 创建一个XYSeriesCollection对象,用于管理XYSeries对象并将其添加到折线图中。 4. 创建一个ChartPanel对象,用于显示折线图。 5. 创建一个JFreeChart对象,用于设置折线图的标题、坐标轴等属性。 6. 使用ScheduledExecutorService定时更新折线图的数据。 下面是一个示例代码,演示如何创建一个简单的动态折线图: ``` import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.swing.JFrame; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.data.time.Millisecond; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; public class DynamicLineChart extends JFrame { private static final long serialVersionUID = 1L; private TimeSeries series; private ScheduledExecutorService executor; public DynamicLineChart() { super("Dynamic Line Chart"); setDefaultCloseOperation(EXIT_ON_CLOSE); // create dataset TimeSeriesCollection dataset = new TimeSeriesCollection(); series = new TimeSeries("Random Data"); dataset.addSeries(series); // create chart JFreeChart chart = ChartFactory.createTimeSeriesChart( "Dynamic Line Chart", "Time", "Value", dataset, true, true, false ); // customize chart XYPlot plot = chart.getXYPlot(); plot.setBackgroundPaint(Color.WHITE); plot.setDomainGridlinePaint(Color.BLACK); plot.setRangeGridlinePaint(Color.BLACK); NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setAutoRange(true); // create chart panel ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(640, 480)); add(chartPanel, BorderLayout.CENTER); // create executor to update chart data executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(this::updateData, 0, 50, TimeUnit.MILLISECONDS); } private void updateData() { double value = Math.random() * 100; series.add(new Millisecond(), value); } public static void main(String[] args) { DynamicLineChart chart = new DynamicLineChart(); chart.pack(); chart.setVisible(true); } } ``` 在上面的代码中,我们创建了一个继承自JFrame的DynamicLineChart类,并在其构造函数中完成了以下操作: 1. 创建一个TimeSeries对象,用于存储折线图的数据。 2. 创建一个TimeSeriesCollection对象,用于管理TimeSeries对象并将其添加到折线图中。 3. 创建一个JFreeChart对象,用于设置折线图的标题、坐标轴等属性。 4. 创建一个ChartPanel对象,用于显示折线图。 5. 使用ScheduledExecutorService定时更新折线图的数据。 在updateData()方法中,我们生成随机数据并将其添加到TimeSeries对象中。通过ScheduledExecutorService定时调用updateData()方法,我们可以实现动态更新折线图的效果。 最后,在main()方法中,我们创建一个DynamicLineChart对象,并设置其可见性。运行程序后,我们可以看到生成的动态折线图。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值