So fügen Sie eine JFreechart ein Panel?
Ich habe versucht, auf der Suche nach Antworten zu bekommen, diese funktioniert aber noch nicht gelungen und ich freue mich über meinen Verstand verlieren so, hier geht meine Frage.
Habe ich vor kurzem heruntergeladen JFreeChart erstellen, damit Diagramme und implementieren diese in der GUI, die ich hatte.
Hier ist die GUI und die Platte wo ich Sie einfügen möchten, aus dem Graphen (in weiß):
reports1 http://www.freeimagehosting.net/newuploads/eff3r.png
reports2 http://www.freeimagehosting.net/newuploads/v5sty.png
Habe ich verwendet NetBeans-editor zum erstellen der GUI und ein JFreeChart Beispiel online zur Verfügung.
Unten ist der code für meine 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
*************************************/
}
Und das ist das Ergebnis:
reports3 http://www.freeimagehosting.net/newuploads/unolz.png
Ich bin initialisieren und hinzufügen der Karte in der main-Klasse Konstruktor und rechts unten ist der code für das Diagramm. Ich hatte zu unterlassen, die Veröffentlichung der gesamte code, wie es ging über den Charakter Grenzen, allerdings ist hier eine url für den vollständigen code (mit dem Swing-Komponenten-Initialisierung von NetBeans): http://tny.cz/8a4e8b2f
Hinweise für Lösungen?
Vielen Dank im Voraus und lassen Sie mich wissen, wenn etwas anderes benötigt wird.
- Die Lösung liegt wahrscheinlich in der Verwendung der richtigen layout beim hinzufügen der JFreeChart-panel (was ich glaube, ist nichts weiter als ein JPanel). Wenn Sie vertraut sind mit den verschiedenen layout-Managern, die für Sie verfügbar sind, es sollte eine triviale Angelegenheit für Sie in der Lage sein, um Ihre JFreeChart Komponente ausreichend und leicht, wo Sie es platzieren möchten.
- Genau;
org.jfree.chart.ChartPanel
ist einJPanel
. Es hat eineorg.jfree.chart.JFreeChart
gerenderten inpaintComponent()
. Siehe auch diese Beispiel. - Als ich begann mit NetBeans, ich habe die schlechte Gewohnheit, mit es editor zur Gestaltung der GUI ist, was bedeutet, dass ich nicht vollständig verstehen, alle Konzepte, layouts einer von Ihnen. Ich werde schauen weiter in Sie!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie sich nicht von den GUI-designer bestimmen Sie Ihr design. Verwenden Sie es, wenn überhaupt, zu verwalten einzelne Tafeln, wie vorgeschlagen,hier. Es ist nicht möglich, Bearbeiten Sie ein GUI-Projekt ohne die
.form
- Datei; ich habe gerade ein Diagramm mit einemFlowLayout
damit Sie es sehen können, ohne dassinitComponents()
.