使用JPanel将ChartPanel添加到JTabbedPane

我想将JFreeChart添加到JPanel ,然后将JPanel添加到JTabbedPane 。 我设法在JFrame上显示JFreeChart ,但我想添加JFreeChart作为JTabbedPane的第4个选项卡。

代码显示图表:

 public class Chart extends javax.swing.JPanel { private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { JPanel jPanel1 = new JPanel(); DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setValue(60, "Marks", "Student 1"); dataset.setValue(40, "Marks", "Student 2"); dataset.setValue(90, "Marks", "Student 3"); dataset.setValue(50, "Marks", "Student 4"); dataset.setValue(70, "Marks", "Student 5"); dataset.setValue(30, "Marks", "Student 6"); JFreeChart chart = ChartFactory.createBarChart( "Student Marks", "Student Name", "Marks", dataset, PlotOrientation.VERTICAL, false, true, false); CategoryPlot p = chart.getCategoryPlot(); p.setRangeGridlinePaint(Color.BLACK); ChartPanel panel = new ChartPanel(chart); panel.setDomainZoomable(true); jPanel1.add(panel, BorderLayout.CENTER); panel.setPreferredSize(new java.awt.Dimension(500, 270)); } 

要添加到TabbedPane的代码:

 tabStoreTrans.add("chart", new Chart()); 

如“ 如何使用选项卡式窗格”所示 ,您可以将组件添加到选项卡式窗格中。 ChartPanelJPanel一个子类,就是这样一个组件。 除了这些例子 ,您可以使用下面的例子来试验其他function。

由于您是新手,因此应限制使用NetBeans GUI编辑器,这意味着您的问题,但是继续使用NetBeans IDE。

标签图表

 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.Timer; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; /** * @see https://stackoverflow.com/a/15715096/230513 * @see https://stackoverflow.com/a/11949899/230513 */ public class TabChart { private static final int N = 128; private static final Random random = new Random(); private int n = 1; private void display() { JFrame f = new JFrame("TabChart"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JTabbedPane jtp = new JTabbedPane(); jtp.add(String.valueOf(n), createPane()); f.add(jtp, BorderLayout.CENTER); JPanel p = new JPanel(new FlowLayout(FlowLayout.RIGHT)); p.add(new JButton(new AbstractAction("Add") { @Override public void actionPerformed(ActionEvent e) { jtp.add(String.valueOf(++n), createPane()); jtp.setSelectedIndex(n - 1); } })); f.add(p, BorderLayout.SOUTH); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } private ChartPanel createPane() { final XYSeries series = new XYSeries("Data"); for (int i = 0; i < random.nextInt(N) + N / 2; i++) { series.add(i, random.nextGaussian()); } XYSeriesCollection dataset = new XYSeriesCollection(series); new Timer(1000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { series.add(series.getItemCount(), random.nextGaussian()); } }).start(); JFreeChart chart = ChartFactory.createXYLineChart("Test", "Domain", "Range", dataset, PlotOrientation.VERTICAL, false, false, false); return new ChartPanel(chart) { @Override public Dimension getPreferredSize() { return new Dimension(480, 240); } }; } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new TabChart().display(); } }); } }