如何将JFreechart添加到面板中?

3
我曾经试图寻找答案来让这个工作,但一直没有成功,我快要疯了,所以我有一个问题。最近我下载了JFreeChart来创建一些图表并将它们实现在我的GUI中。下面是我想插入图表的面板(用白色标出)和GUI的截图:reports1 http://www.freeimagehosting.net/newuploads/eff3r.pngreports2 http://www.freeimagehosting.net/newuploads/v5sty.png。我使用NetBeans编辑器构建了GUI,并使用了一个在线可用的JFreeChart示例。下面是我的GUI代码:
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.math.BigDecimal;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;


public class Report extends JFrame implements Defaults {


public MMap j1map,j2map,j3map;
public int total_stations = 0, total_jobs = 0, total_parts = 0;
BigDecimal[] j1_systimebig, j1_worktimebig, j1_idletimebig, j1_queuetimebig,
             j2_systimebig, j2_worktimebig, j2_idletimebig, j2_queuetimebig,
             j3_systimebig, j3_worktimebig, j3_idletimebig, j3_queuetimebig;
public String sim_time;
BigDecimal systime = new BigDecimal(0);
BigDecimal worktime = new BigDecimal(0);
BigDecimal idletime = new BigDecimal(0);
BigDecimal queuetime = new BigDecimal(0);
/**
 * Creates new form Report
 */
public Report() {
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setTitle(TITLE_Report);
    validate();
    setResizable(false);
    setVisible(true);
    //setLocationRelativeTo(null);
    initComponents();
    this.addWindowListener(new WindowAdapter() {
        @Override
       public void windowClosing(WindowEvent e) {
          e.getWindow().dispose();
          }
       }
    );
    centertables();
    //JLayeredPane layeredPane = new JLayeredPane(); 
    PieChart demo = new PieChart("Which operating system are you using?");
    demo.setOpaque(true); 
    demo.setBounds(0, 0, 300, 300);
    demo.setFocusable(true);
    demo.setBackground(Color.gray); 
    demo.setBorder(BorderFactory.createLineBorder(Color.black, 1));
    //start();
    demo.setDoubleBuffered(true);        
    //demo.pack();
    //demo.setVisible(true);        
    //PieChart("teste");
    chartPanel1.add(demo, new Integer(0));
    //layeredPane.add(demo, new Integer(0));
    //this.getContentPane().add(jLayeredPane1); 
}

/* *************************************
 *          GRAPHICS
 *************************************/

public void PieChart(String chartTitle) {
    System.out.println("PieChart");
    // This will create the dataset 
    PieDataset dataset = createDataset();
    // based on the dataset we create the chart
    JFreeChart chart = createChart(dataset, chartTitle);
    // we put the chart into a panel
    ChartPanel chartPanel = new ChartPanel(chart);
    // default size
    chartPanel.setPreferredSize(new java.awt.Dimension(250, 270));
    // add it to our application
    //setContentPane(chartPanel);
    //StationsPanelGraph.add(chartPanel);
    //jLayeredPane1.add(chartPanel, new Integer(0), 0);

}

private  PieDataset createDataset() {
    System.out.println("PieDataset");
    DefaultPieDataset result = new DefaultPieDataset();
    result.setValue("Linux", 29);
    result.setValue("Mac", 20);
    result.setValue("Windows", 51);
    return result;

}

private JFreeChart createChart(PieDataset dataset, String title) {
    System.out.println("Create Chart");
    JFreeChart chart = ChartFactory.createPieChart3D(title,          // chart title
        dataset,                // data
        true,                   // include legend
        true,
        false);

    PiePlot3D plot = (PiePlot3D) chart.getPlot();
    plot.setStartAngle(290);
    plot.setDirection(Rotation.CLOCKWISE);
    plot.setForegroundAlpha(0.5f);
    return chart;

}    

 /* *************************************
 *         END GRAPHICS
 *************************************/  

}

这是结果:

这是结果:

reports3 http://www.freeimagehosting.net/newuploads/unolz.png

我正在主类构造函数中初始化并添加图表,下面是图表的代码。由于代码超出了字符限制,我不得不避免发布整个代码,但是这里有一个完整代码的url(使用NetBeans进行Swing组件初始化):http://tny.cz/8a4e8b2f

有什么解决方案的提示吗?

提前感谢,如果需要其他任何信息,请告诉我。


1
解决方案可能在于添加JFreeChart面板时使用正确的布局(我相信它仅仅是一个JPanel)。如果您熟悉可用的各种布局管理器,那么您应该很容易地将JFreeChart组件放置在您想要放置的位置。 - Hovercraft Full Of Eels
1
@Hovercraft: 没错;org.jfree.chart.ChartPanel 是一个 JPanel。它有一个 org.jfree.chart.JFreeChart,在 paintComponent() 中呈现。另请参见此示例 - trashgod
1
由于我一开始使用NetBeans,养成了一个坏习惯,就是使用它的编辑器来设计GUI界面,这意味着我并没有完全理解所有的布局概念,其中之一就是布局。我会进一步研究它! - Luis Afonso Teixeira
1个回答

8
不要让GUI设计师来决定你的设计,如果必须使用GUI,只需像这里建议的那样使用它来管理单独的面板。没有.form文件就无法编辑GUI项目;我只是使用FlowLayout添加了你的图表,以便你可以看到它,而不用改变initComponents()

image

import java.awt.FlowLayout;
import java.math.BigDecimal;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;

public class Report extends JFrame {

    public int total_stations = 0, total_jobs = 0, total_parts = 0;
    BigDecimal[] j1_systimebig, j1_worktimebig, j1_idletimebig, j1_queuetimebig,
        j2_systimebig, j2_worktimebig, j2_idletimebig, j2_queuetimebig,
        j3_systimebig, j3_worktimebig, j3_idletimebig, j3_queuetimebig;
    public String sim_time;
    BigDecimal systime = new BigDecimal(0);
    BigDecimal worktime = new BigDecimal(0);
    BigDecimal idletime = new BigDecimal(0);
    BigDecimal queuetime = new BigDecimal(0);

    private static final String title = "Which operating system are you using?";

    /**
    * Creates new form Report
    */
    public Report() {
        initComponents();
        jPanel2.removeAll();
        jPanel2.setLayout(new FlowLayout(FlowLayout.LEFT));
        jPanel2.add(createPieChart(title));
        this.setLocationRelativeTo(null);
    }

    /*
    * *************************************
    * GRAPHICS ***********************************
    */
    private ChartPanel createPieChart(String chartTitle) {
        System.out.println("PieChart");
        PieDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset, chartTitle);
        ChartPanel chartPanel = new ChartPanel(chart);
        return chartPanel;
    }

    private PieDataset createDataset() {
        System.out.println("PieDataset");
        DefaultPieDataset result = new DefaultPieDataset();
        result.setValue("Linux", 29);
        result.setValue("Mac", 20);
        result.setValue("Windows", 51);
        return result;

    }

    private JFreeChart createChart(PieDataset dataset, String title) {
        System.out.println("Create Chart");
        JFreeChart chart = ChartFactory.createPieChart3D(
            title, dataset, true, true, false);
        PiePlot3D plot = (PiePlot3D) chart.getPlot();
        plot.setStartAngle(290);
        plot.setDirection(Rotation.CLOCKWISE);
        plot.setForegroundAlpha(0.5f);
        plot.setCircular(true);
        return chart;

    }

    /*
    * *************************************
    * END GRAPHICS ***********************************
    */
    /**
    * This method is called from within the constructor to initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is always
    * regenerated by the Form Editor.
    */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
        // code elided
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        this.dispose();
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Report().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    public javax.swing.JPanel chartPanel1;
    public javax.swing.JButton jButton1;
    public javax.swing.JButton jButton2;
    public javax.swing.JLabel jLabel1;
    public javax.swing.JLabel jLabel10;
    public javax.swing.JLabel jLabel11;
    public javax.swing.JLabel jLabel12;
    public javax.swing.JLabel jLabel13;
    public javax.swing.JLabel jLabel14;
    public javax.swing.JLabel jLabel15;
    public javax.swing.JLabel jLabel16;
    public javax.swing.JLabel jLabel17;
    public javax.swing.JLabel jLabel18;
    public javax.swing.JLabel jLabel19;
    public javax.swing.JLabel jLabel2;
    public javax.swing.JLabel jLabel20;
    public javax.swing.JLabel jLabel21;
    public javax.swing.JLabel jLabel22;
    public javax.swing.JLabel jLabel23;
    public javax.swing.JLabel jLabel24;
    public javax.swing.JLabel jLabel25;
    public javax.swing.JLabel jLabel26;
    public javax.swing.JLabel jLabel27;
    public javax.swing.JLabel jLabel28;
    public javax.swing.JLabel jLabel29;
    public javax.swing.JLabel jLabel30;
    public javax.swing.JLabel jLabel4;
    public javax.swing.JLabel jLabel7;
    public javax.swing.JLabel jLabel8;
    public javax.swing.JLabel jLabel9;
    public javax.swing.JPanel jPanel1;
    public javax.swing.JPanel jPanel2;
    public javax.swing.JPanel jPanel3;
    public javax.swing.JPanel jPanel4;
    public javax.swing.JPanel jPanel6;
    public javax.swing.JPanel jPanel7;
    public javax.swing.JPanel jPanel8;
    public javax.swing.JScrollPane jScrollPane1;
    public javax.swing.JScrollPane jScrollPane3;
    public javax.swing.JScrollPane jScrollPane5;
    public javax.swing.JScrollPane jScrollPane6;
    public javax.swing.JSeparator jSeparator1;
    public javax.swing.JSeparator jSeparator3;
    public javax.swing.JSeparator jSeparator4;
    public javax.swing.JSeparator jSeparator5;
    public javax.swing.JSeparator jSeparator6;
    public javax.swing.JTabbedPane jTabbedPane1;
    public javax.swing.JTable jTable1;
    public javax.swing.JTable jTable2;
    public javax.swing.JTable jTable3;
    public javax.swing.JTable jTable4;
    // End of variables declaration
}

非常感谢!这确实成功添加了图表。我将进一步了解布局管理,以便更好地向我的GUI中添加和操作其他图表。我也会进一步阅读提供的示例。再次感谢! - Luis Afonso Teixeira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接