java - How to rectify this program? -
this program display pie chart. have button. program have written, creates 2 separate frames , 1 frame pie chart , other button. how put both button , pie chart on same frame?? can please rectify program.
import java.awt.*; import org.jfree.chart.*; import org.jfree.chart.title.*; import org.jfree.data.general.defaultpiedataset; import org.jfree.ui.*; import java.io.*; import javax.swing.*; import java.awt.event.*; import javax.swing.filechooser.*; public class pie{ public static void getfile(file f) { system.out.println("file is: "+f.getname()); } public static void main(string[] args) { jpanel panel=new jpanel(); panel.setlayout(null); jbutton b=new jbutton("open file"); b.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { jfilechooser chooser=new jfilechooser(); int ret = chooser.showdialog(null, "open file"); if (ret == jfilechooser.approve_option) { file file = chooser.getselectedfile(); getfile(file); } } } ); b.setbounds(50,40,100,35); panel.add(b); defaultpiedataset piedataset = new defaultpiedataset(); iedataset.setvalue("a", new integer(10)); piedataset.setvalue("b", new integer(20)); piedataset.setvalue("c", new integer(30)); piedataset.setvalue("d", new integer(10)); piedataset.setvalue("e", new integer(20)); piedataset.setvalue("f", new integer(10)); freechart chart = chartfactory.createpiechart("pie chart using jfreechart", piedataset, true,true,true); chartframe frame1=new chartframe("pie chart",chart); frame1.add(panel); frame1.setvisible(true); frame1.setsize(600,600); } }
- don't use absolute layout unless necessary. rely on layout managers, pref/min/max size , constraints size , position components. means should not call setbounds/setsize/setlocation on components, let layout manager you.
- init ui edt (event dispatching tread)
- you don't filechooser currently
- try avoid
static, instead usenew something() - don't use
new integer()rather useinteger.valueof()(and valid primitive wrapping classes, boolean, short, long, ...)
i not sure how 2 frames, got code working modifying way.
import java.awt.borderlayout; import java.awt.flowlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.io.file; import javax.swing.jbutton; import javax.swing.jfilechooser; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.swingutilities; import org.jfree.chart.chartfactory; import org.jfree.chart.chartpanel; import org.jfree.chart.jfreechart; import org.jfree.data.general.defaultpiedataset; public class pie { private static void initui() { jpanel panel = new jpanel(new flowlayout()); final jbutton b = new jbutton("open file"); b.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { jfilechooser chooser = new jfilechooser(); int ret = chooser.showdialog(b, "open file"); if (ret == jfilechooser.approve_option) { file file = chooser.getselectedfile(); // don't know want } } }); panel.add(b); defaultpiedataset piedataset = new defaultpiedataset(); piedataset.setvalue("a", integer.valueof(10)); piedataset.setvalue("b", integer.valueof(20)); piedataset.setvalue("c", integer.valueof(30)); piedataset.setvalue("d", integer.valueof(10)); piedataset.setvalue("e", integer.valueof(20)); piedataset.setvalue("f", integer.valueof(10)); jfreechart chart = chartfactory.createpiechart("pie chart using jfreechart", piedataset, true, true, true); jframe frame1 = new jframe(); frame1.setdefaultcloseoperation(jframe.exit_on_close); chartpanel chartpanel = new chartpanel(chart); // chartpanel.setpreferredsize(new dimension(600, 600)); frame1.getcontentpane().add(chartpanel, borderlayout.center); frame1.getcontentpane().add(panel, borderlayout.south); frame1.pack(); frame1.setvisible(true); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { initui(); } }); } }
Comments
Post a Comment