java - JFrame and JPanel problems -
i attempting make program local bagel shop sells pastries, bagels, , coffee. having trouble implementing panels have made jframe
any understanding how make jframe helpful http://kepler.covenant.edu/cos150/bagel_files/image002.jpg
once have working hope have middle set of panels change depending on product selected. not entirely sure how make buttons , panels talk 1 another.
thanks help!
here code jframe far.
import java.awt.borderlayout; import javax.swing.jframe; import javax.swing.jlabel; public class bagelorder extends jframe { jlabel toplabel; sizepanel sp = new sizepanel(); typepanel tp = new typepanel(); productspanel pp = new productspanel(); buttonpanel bp = new buttonpanel(); extraspanel ep = new extraspanel(); public bagelorder() { settitle("order entry screen"); setsize(800, 800); setdefaultcloseoperation(jframe.exit_on_close); toplabel = new jlabel("order entry screen"); add(pp, borderlayout.west); add(toplabel, borderlayout.north); add(bp, borderlayout.south); add(middlecoffeepanelsetbuild(), borderlayout.center); add(east, borderlayout.east); setvisible(true); } private jpanel middlecoffeepanelsetbuild() { jpanel middlepanel = new jpanel(new gridlayout(3,1)); add(sp); add(tp); add(ep); } public static void main(string args[]) { bagelorder bo = new bagelorder(); } }
i have no errors cannot see other label @ top of page.
here code other classes
buttonpanel
import java.awt.gridlayout; import javax.swing.buttongroup; import javax.swing.jbutton; import javax.swing.jpanel; public class buttonpanel extends jpanel { jbutton enteritembutton; jpanel buttonpanel; buttongroup bg; jbutton totalbutton; jbutton neworderbutton; public buttonpanel() { buttonpanel = new jpanel(new gridlayout(1,3)); bg = new buttongroup(); enteritembutton = new jbutton("enter item"); totalbutton = new jbutton("total"); neworderbutton = new jbutton("new order"); buttonpanel.setsize(150, 780); buttonpanel.add(enteritembutton); bg.add(enteritembutton); buttonpanel.add(totalbutton); bg.add(totalbutton); buttonpanel.add(neworderbutton); bg.add(neworderbutton); setvisible(true); } }
productpanel
import java.awt.gridlayout; import javax.swing.borderfactory; import javax.swing.buttongroup; import javax.swing.jpanel; import javax.swing.jradiobutton; import javax.swing.border.border; public class productspanel extends jpanel { public productspanel() { jpanel productpanel = new jpanel(new gridlayout(3,1)); buttongroup bg = new buttongroup(); jradiobutton coffeebutton = new jradiobutton("coffee"); jradiobutton bagelbutton = new jradiobutton("bagel"); jradiobutton pastrybutton = new jradiobutton("pastry"); productpanel.setsize(150, 780); productpanel.add(coffeebutton); bg.add(coffeebutton); productpanel.add(bagelbutton); bg.add(bagelbutton); productpanel.add(pastrybutton); bg.add(pastrybutton); border etched = borderfactory.createetchedborder(); border titled = borderfactory.createtitledborder(etched, "products"); productpanel.setborder(titled); setvisible(true); } }
size panel
import java.awt.gridlayout; import javax.swing.borderfactory; import javax.swing.buttongroup; import javax.swing.jpanel; import javax.swing.jradiobutton; import javax.swing.border.border; public class sizepanel extends jpanel{ public sizepanel() { jpanel sp = new jpanel(new gridlayout(3,1)); buttongroup bg = new buttongroup(); jradiobutton smallbutton = new jradiobutton("small"); jradiobutton mediumbutton = new jradiobutton("medium"); jradiobutton largebutton = new jradiobutton("large"); sp.setsize(200, 200); sp.add(smallbutton); bg.add(smallbutton); sp.add(mediumbutton); bg.add(mediumbutton); sp.add(largebutton); bg.add(largebutton); border etched = borderfactory.createetchedborder(); border titled = borderfactory.createtitledborder(etched, "size"); sp.setborder(titled); setvisible(true); } }
typepanel
import java.awt.gridlayout; import javax.swing.borderfactory; import javax.swing.buttongroup; import javax.swing.jpanel; import javax.swing.jradiobutton; import javax.swing.border.border; public class typepanel extends jpanel { public typepanel() { jpanel typepanel = new jpanel(new gridlayout(3,1)); buttongroup bg = new buttongroup(); jradiobutton regularbutton = new jradiobutton("regular"); jradiobutton decafbutton = new jradiobutton("decaf"); jradiobutton frenchroastbutton = new jradiobutton("french roast"); typepanel.setsize(200, 200); typepanel.add(regularbutton); bg.add(regularbutton); typepanel.add(decafbutton); bg.add(decafbutton); typepanel.add(frenchroastbutton); bg.add(frenchroastbutton); border etched = borderfactory.createetchedborder(); border titled = borderfactory.createtitledborder(etched, "type"); typepanel.setborder(titled); setvisible(true); } }
extraspanel
import java.awt.gridlayout; import javax.swing.borderfactory; import javax.swing.jcheckbox; import javax.swing.jpanel; import javax.swing.border.border; public class extraspanel extends jpanel { public extraspanel() { jpanel extraspanel = new jpanel(new gridlayout(2,1)); jcheckbox creamcheckbox = new jcheckbox("cream"); jcheckbox sugarcheckbox = new jcheckbox("sugar"); extraspanel.setsize(200, 200); extraspanel.add(creamcheckbox); extraspanel.add(sugarcheckbox); border etched = borderfactory.createetchedborder(); border titled = borderfactory.createtitledborder(etched, "extras"); extraspanel.setborder(titled); setvisible(true); } }
some practices when writing swing gui's:
1) panel classes built wrong. need re-write buttonpanel, , of others, read this:
public buttonpanel() { super(new gridlayout(1,3)); bg = new buttongroup(); enteritembutton = new jbutton("enter item"); totalbutton = new jbutton("total"); neworderbutton = new jbutton("new order"); this.setsize(150, 780); this.add(enteritembutton); bg.add(enteritembutton); this.add(totalbutton); bg.add(totalbutton); this.add(neworderbutton); bg.add(neworderbutton); this.setvisible(true); } }
the way yours written, have buttonpanel class (always capitalise classes) posseses jpanel buttons on it, never displays jpanel owns. need buttonpanel jpanel, not own one. thats major issue. minor points improve on:
2) jframe has jpanel called contentpane. said jzd, when using jframe.add calling jframe.getcontentpane.add(component c). convenience method, hides doing. when you're learning, shortcuts bad.
i go step further, starting jframes off with
jpanel content = new jpanel(new borderlayout()); content.add(...); .... this.setcontentpane(content);
3) practice when extending class (like jframe) begin call super(). again, can leave out shorthand, pedantic when beginning. calls superclass's constructor (with whatever arguments need), saying "lets create basic jframe, , apply extensions it".
4) practice capitalise classes, , begin functions lowercase verbs. ie buttonpanel or build()
5) seems you're starting out gui, might recommend external library "miglayout" (google it). amazing in power , ease gives on struggling against of java's inbuilt, horrible, layout types.
Comments
Post a Comment