2012-09-20 50 views
2

我试过寻找答案来得到这个工作,但没有设法做到这一点,我即将失去理智,所以这里就是我的问题。如何将JFreechart添加到面板?

我最近下载了JFreeChart来创建这样的图表,并在GUI中实现它们。 这里的GUI和我想要的插入图表面板(标记为白色):

reports1 http://www.freeimagehosting.net/newuploads/eff3r.png reports2 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组件放置到您想放置它的位置应该是一件轻而易举的事情。 –

+1

@Hovercraft:确切地说; 'org.jfree.chart.ChartPanel'是一个'JPanel'。它具有一个'org.jfree.chart.JFreeChart',它在'paintComponent()'中呈现。另请参阅此[示例](http://stackoverflow.com/a/5522583/230513)。 – trashgod

+1

当我开始使用NetBeans时,我已经习惯使用它的编辑器来设计GUI,这意味着我不完全理解作为其中之一的所有概念布局。我会进一步研究它! –

回答

6

不要让GUI设计者指定您的设计。如果有的话,使用它来管理单个面板,如建议here。没有.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 
} 
+0

有一个相关示例[此处](http://stackoverflow.com/a/7602126/230513)。 – trashgod

+0

非常感谢!这确实设法添加图。我将进一步研究布局管理,以便我可以更好地在其GUI中添加和操作其他图。 我还会详细阅读所提供的示例。 再次谢谢你! –