当前位置: 首页 > 知识库问答 >
问题:

使用JPanel将ChartPanel添加到JTabbedPane

彭成天
2023-03-14

我想将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());

共有1个答案

司空鸿熙
2023-03-14

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

由于您是新手,请限制使用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();
            }
        });
    }
}
 类似资料:
  • 我得到了这个面板: 当我将此面板添加到jFrame时,它不会显示图表。 我很有信心,问题在于jPanel实现。 谁能给我一些指点吗。(其他面板到目前为止似乎没有问题)

  • 问题内容: 我有一个gui,它的Panel包含一系列标签和TextField,并使用spring布局(这是mainPanel),而另一个Panel仅包含button(buttonPanel)。我正在尝试使我的mainPanel也具有垂直滚动条。我想实现我的GUI,以便在JFrame中有2个面板。mainPanel出现在框架的顶部,而buttonPanel出现在mainPanel的下方。 我的问题是

  • 我正在尝试将此 JPanel 添加到 JFrame 中,但我看不到他。当我创建新的 java 类并自己制作这个框架时,一切都很好。 来自JFrame表单的代码。 来自 JPanel 的代码: 来自Java类的代码。 我想不出区别在哪里。有人能帮我吗?

  • 我正在创建一个swing应用程序,并希望将JfreeChart添加到JPanel中。我创建了一个方法,在该方法中我创建了如下所示的图表: 创建了一个全局变量: 由于某种原因,当我点击按钮时,图表没有显示出来。

  • 我目前有一个主JFrame包含几个JPanels,每个面板中都有一些文本。创建JPanels的代码在一个单独的类中(它“实现”JPanels)。如何仅向单个面板添加JScrollPane? 我已经花了一些时间尝试这样做,但什么也没有发生。顺便说一下,我的JPanel使用GridLayout 上面的类是另一个面板类的实例变量,它是主面板“MenuHold”的实例变量。但使用“MenuHolder”的

  • 因此,我的问题是面板被插入到JScrollPane中,这些面板的大小正在减小,但没有滚动条。 这是我的代码,我已经播种很远: