天道酬勤,学无止境

使用JPanel将ChartPanel添加到JTabbedPane(Adding ChartPanel to JTabbedPane using JPanel)

问题

我想将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

如如何使用选项卡式窗格中所示,您可以将组件添加到选项卡式窗格中。 JPanel的子类ChartPanel就是这样的组件。 除了这些示例,您还可以使用以下示例尝试其他功能。

当您是新手时,请使用问题中暗示的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();
            }
        });
    }
}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Adding ChartPanel to JTabbedPane using JPanel
    I want to add JFreeChart to JPanel and then add JPanel to JTabbedPane. I managed to display JFreeChart on JFrame, but I want to add JFreeChart as a 4th tab of JTabbedPane. Code to display Chart: 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
  • 如何将关闭按钮添加到JTabbedPane选项卡?(How to add close button to a JTabbedPane Tab?)
    问题 我正在使用JTabbedPane,我需要在标签中添加一个关闭按钮以关闭当前按钮。 我一直在搜索,据我了解,我必须从JPanel扩展并添加关闭按钮,如他们在此处所说的那样,但是,有没有一种方法可以添加扩展JTabbedPane的关闭按钮呢? 在此先感谢您,感谢您的宝贵时间和帮助。 回答1 本质上,您将需要为选项卡提供一个“渲染器”。 查看JTabbedPane.setTabComponentAt(...)了解更多信息。 基本思想是提供一个将在选项卡上布置的组件。 我通常创建一个JPanel,在其上添加一个JLabel(用于标题),并根据我要显示的内容,提供某种作为关闭动作的控件。 tabPane.addTab(title, tabBody); int index = tabPane.indexOfTab(title); JPanel pnlTab = new JPanel(new GridBagLayout()); pnlTab.setOpaque(false); JLabel lblTitle = new JLabel(title); JButton btnClose = new JButton("x"); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc
  • How to set output stream to TextArea(How to set output stream to TextArea)
    问题 我正在尝试为程序创建GUI面板,我希望通常会打印到命令提示符下的所有内容都可以打印到TextArea对象。 我的GUI面板大部分都已格式化,但是我无法将文本打印到TextArea,这是我的文件: package guipanel; import javax.swing.*; import java.awt.*; import java.io.*; /** * * @author Dan */ public class GUIPanel extends JFrame { public GUIPanel() { initComponents(); } private void setOutputStream(boolean catchErrors) { System.setOut(aPrintStream); setVisible(true); requestFocus(); if (catchErrors) { System.setErr(aPrintStream); } } private void addTabs(JTabbedPane jTabbedPane1) { JPanel jPanel1 = new JPanel(); JPanel jPanel2 = new JPanel(); JPanel jPanel3 = new JPanel(); JPanel
  • 具有多个类别的Boxplots的JFreeChart缩放(JFreeChart scaling of Boxplots with several Categories)
    问题 我目前正在使用JFreeChart显示框线图的基于Java的项目。 我的问题是如何显示包含带有大约20个类别和5个以上系列的CategoryDataset的箱形图的图表。 当前,如果未设置ChartPanel的首选大小,则图例,标签和注释可读,但Boxplots太小。 或设置ChartPanel的大小,以使Boxplots具有可接受的大小,然后水平拉伸图例,标签和注释。 我的问题是,如何在不缩放图例,图轴标签和图表注释的情况下正确缩放框线图? 是否可以在不缩放图表所有元素的情况下缩放图表? 程式码范例 import java.awt.Color; import java.awt.Dimension; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import javax.swing.JFrame; import javax.swing.JScrollPane; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis
  • 如何更改JFreeChart的大小(How do I change a JFreeChart's size)
    问题 我已经向JPanel添加了一个JFreeChart (使用BorderLayout ),它很大。 我可以做些什么使它变小吗? public void generateChart() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); //set the values of the chart for(int i=0; i<8; i++) { dataset.setValue(income_array[i], "Income", Double.toString(percent_array[i])); } JFreeChart chart = ChartFactory.createBarChart( "Required Annual Income for a Variety of Interest Rates", "Percent", "Income", dataset, PlotOrientation.VERTICAL, false,true, false); ChartPanel cp = new ChartPanel(chart); chart.setBackgroundPaint(Color.white); chart.getTitle().setPaint(Color.black)
  • .gif image doesn't moves on adding it to the JTabbed pane
    I have a JFrame. In that i have two containers i.e two JPanel. one Panel holds a image. other holds a JButton. Then these two are added to JTabbedPane. My problem is on using a .gif image the image becomes static as any other normal .jpg image. Can anyone help me with some more ideas? Here is my code: import java.awt.Component; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io
  • How to set output stream to TextArea
    I'm trying to create a GUI Panel for a program and I'd like everything, that would normally print to my command prompt, to print to a TextArea object. I have the GUI panel formatted for the most part, I can't get the text to print to the TextArea though, here's my file: package guipanel; import javax.swing.*; import java.awt.*; import java.io.*; /** * * @author Dan */ public class GUIPanel extends JFrame { public GUIPanel() { initComponents(); } private void setOutputStream(boolean catchErrors) { System.setOut(aPrintStream); setVisible(true); requestFocus(); if (catchErrors) { System.setErr
  • 如何将一个窗格连接到另一个窗格(How to wire one pane to another)
    问题 如何将输出连接到paneWithList ? PaneWithList的JList上有一个侦听器,以便将选定的行输出到控制台。 如何将输出定向到输出的JTextPane ? PaneWithList触发Main PaneWithList的事件吗? PropertyChangeSupport是否足够? Main.java: package dur.bounceme.net; import javax.swing.JTabbedPane; public class Main { private static JTabbedPane tabs; private static PaneWithList paneWithList; private static PaneWithTable paneWithTable; private static Output output; public static void main(String[] args) { tabs = new javax.swing.JTabbedPane(); paneWithList = new PaneWithList(); paneWithTable = new PaneWithTable(); tabs.addTab("list", paneWithList); tabs.addTab("table"
  • 将其显示为可见后,如何更新JFreeChart的外观?(How can I update a JFreeChart's appearance after it's been made visible?)
    问题 将图表变为可见后,如何使用JFreeChart动态更新图表的外观? 回答1 ChartPanel类对此非常方便,因为它具有控制图表整体外观(包括属性和缩放状态)的方法。 此外,还可以访问图表的组件,如下所示。 此相关示例说明了缩放按钮的JToolBar 。 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.NumberFormat; import javax.swing.AbstractAction; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree
  • JTabbedPane:在选项卡中显示任务进度(JTabbedPane: show task progress in a tab)
    问题 我有一个简单的Swing Java应用程序来执行搜索,结果显示在新选项卡中。 搜索正在运行时,我想在选项卡的标题中显示进度图标或动画。 我尝试添加gif图标,但它没有动画。 有什么原因不起作用吗? 回答1 关于进度条的Swing教程(通常显示进度)是一个很好的起点。 它显示了如何通过使用SwingWorker在工作线程上执行持久操作,以及如何以一定的间隔更新UI以向用户显示持久操作的进度。 还有另一本教程可提供有关SwingWorker和Swing中的并发性的更多信息。 与往常一样,该站点充满了示例。 例如,我的先前答案使用SwingWorker类向用户显示进度 编辑 由于我错过了您问题的标签部分的标题。 您可以创建一个“进度图标”,然后在标签上进行设置。 然后可以使用SwingWorker来更新图标。 这样的图标的一个例子是 ,基本上是您每次取得一些进展时都会旋转的图像。 带选项卡的窗格教程向您展示如何向选项卡添加图标(甚至使用自定义组件) 编辑2 好像我的Mac与JDK1.7结合使用,比在其他系统上显示动画gif容易得多,我还创建了一个小型的SSCCE,与Andrew相似,但带有一个旋转图标,看起来并不像Andrew是由“痴呆的黑猩猩”创造的,我引述为“黑猩猩”。 旋转的图标代码来自此站点(我使用了精简版本并添加了计时器)。 我唯一不满意的是
  • Abnormal Behaviour of the Zoom In and Zoom Out Functionality of the JFreeChart?
    I have observed that the functionality of the "Zoom-In" and "Zoom-out" was implemented quite different than expected.Like for example when i do one step "Zoom-out" and then again after one step back of "Zoom-In". I couldn't see the Original graph again. I don't see "Zoom-In" and "Zoom-out" functionality of JFreechart to be in the sync. public class ChartPanelDemo { private static final String title = "Historical Data Graph"; private ChartPanel chartPanel = createChart(); private JButton ZoomX; private JButton ZoomY; private JButton Zoom; private JButton ZoomXOut; private JButton ZoomYOut
  • Changing the JFrame title
    This code compiles, I just can't get the name to change on the title bar. import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class VolumeCalculator extends JFrame implements ActionListener { private JTabbedPane jtabbedPane; private JPanel options; JTextField poolLengthText, poolWidthText, poolDepthText, poolVolumeText, hotTub
  • 如何动态更改JFrame中的JPanel?(How do I change JPanel inside a JFrame on the fly?)
    问题 简而言之,有一个简单的java swing应用程序,它由JFrame组成,其中包含一些组件。 组件之一是一个JPanel,可以根据用户操作将其替换为另一个JPanel。 那么,做这种事情的正确方法是什么? 我试过了 panel = new CustomJPanelWithComponentsOnIt(); parentFrameJPanelBelongsTo.pack(); 但这行不通。 你有什么建议? 回答1 您的用例对于CardLayout来说似乎是完美的。 在卡片布局中,您可以在同一位置添加多个面板,但是一次只能显示或隐藏一个面板。 回答2 1)设置第一个面板: JFrame frame=new JFrame(); frame.getContentPane().add(new JPanel()); 2)更换面板: frame.getContentPane().removeAll(); frame.getContentPane().add(new JPanel()); 还要注意,您必须在事件的线程中执行此操作,以确保使用SwingUtilities.invokeLater或SwingWorker 回答3 frame.setContentPane(newContents()); frame.revalidate(); // frame.pack() if you want
  • CombinedDomainXYPlot不重新缩放域轴(CombinedDomainXYPlot not rescaling domain axis)
    问题 当我从使用CombinedDomainXYPlot的图表中隐藏系列数时,所有范围轴都会很好地自动缩放。 但是,域轴不会重新缩放。 有什么方法可以手动刷新缩放比例,或者可能缺少在此设置中启用域轴自动缩放设置的设置? 回答1 CombinedDomainXYPlot在getDataRange()为其共享域轴建立组合的最大Range 。 这是允许共享轴所需的。 更改系列的可见性不会对共享域轴产生任何影响。 更改Dataset将通过其configure()方法更新共享域轴。 无论哪种情况,子图的范围轴都可以独立更新。 下面的示例允许您独立更新子图或更改系列的可见性。 中断configure()以查看效果。 您对setAutoRange ()进行切换的建议可以替换为一次对configure()调用; 但效果应为零,因为数据及其组合的最大Range不变。 mainPlot.getDomainAxis().configure(); 若要自动更新共享域轴,请使用addSeries()或removeSeries()而不是setSeriesVisible() 。 顺便说一句,不要忽略初始线程和pack() 。 import java.awt.*; import java.awt.event.ActionEvent; import java.util.Random; import javax
  • Multiple graphs in multiple figures using jFreeChart
    I am trying to use jFreechart to generate two figures each of which with 12 graphs (being referred as series in jFreeChart ). However some of the graphs get simply skipped! I know I have synchronization issue here and tried to used the method the user @trashgod provided me here however I failed. I know the way I use swingworker is wrong! I dont know how to fix it Each figure should contain 10 graphs which are parallel horizontal straight lines. As you see in the attached image some of the lines are missing. The two figures have to be identical too ( which are not). In practice I will have to
  • 显示图像数据的直方图(Displaying a histogram of image data)
    问题 有时我需要以直方图的形式显示图像数据的表示形式。 我对访问图像数据的方式特别感兴趣。 我熟悉JFreeChart ,它包括直方图支持,但我会考虑其他方法。 回答1 下面的示例使用多种技术来创建任意图像的RGB直方图: Raster方法getSamples()从BufferedImage提取每个色带的值。 HistogramDataset方法addSeries()将每个波段的计数添加到dataset 。 如下所示,StandardXYBarPainter取代了ChartFactory默认值。 自定义的DefaultDrawingSupplier提供每个系列所需的颜色。 它包含半透明的颜色。 此处讨论的VisibleAction的变体用于控制每个波段的可见性。 这里显示了使用ChartMouseListener一种补充方法。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.Paint; import java.awt.event.ActionEvent; import java.awt.image.BufferedImage; import java.awt.image.Raster; import java.io
  • Setting Different Color to particular Row in Series-JFreeChart
    I have array of elements and they belong to one Series,with these elements I calculated Centroids. Problem is when I display them with "ScatterPlot" I need to show "Array Elements" with "One Color" and the Centroid of these points in "Different Color". import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Shape; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree
  • How to add close button to a JTabbedPane Tab?
    I'm working in with a JTabbedPane, I need to add a close button in the tabs to close the current one. I have been searching and as I understand I must extend from JPanel and add the close button as they say here But, is there a way to add the close buttons extending JTabbedPane or is there a easier way to do it? Thanks in advance, I really appreciate your time and your help.
  • 使用Gridbag布局时的动画。(Animations when using Gridbag Layout.)
    问题 我最近开始使用Java,想知道使用GridBag Layout时是否可以制作动画。 这些可能吗?如何? 任何教程,帮助等将不胜感激:) 回答1 为了执行这种性质的任何动画,您将需要某种代理布局管理器。 它需要确定所有组件的当前位置,布局管理器希望它们具有的位置,然后将它们移动到适当的位置。 下面的示例演示了基本思想。 动画引擎的使用是非常基础的,不包括慢进和慢出等基本功能,而是使用线性方法。 public class TestAnimatedLayout { public static void main(String[] args) { new TestAnimatedLayout(); } public TestAnimatedLayout() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) { } catch (InstantiationException ex) { } catch (IllegalAccessException ex) { } catch
  • java drag and drop
    I try to get familar with drag and drop in java but all the tutorials I found were... (getting me angry) All I want is to drag a "PublicUserLabel" from a JList (included in a selfmade JPanel called "UserPanel") and drop it in a selfmade class inerited from JTabbedPanel. It is very important to drag the object itself and not its stringrepresentation!!! That is what I have so far: PublicUserLabel public class PublicUserLabel extends JLabel implements DragSourceListener, DragGestureListener, Transferable { private DragSource ds; private PublicUser user; public PublicUserLabel(PublicUser user) {