java - Align components on the page top right with GridBagLayout Manager -
i trying make login page facebook, code have written not showing on top left side instead showing @ centre of page, using gridbaglayout , anchore setting text @ first_line_end.
final jframe f2=new jframe("admin main"); f2.setsize(1350,730); f2.setvisible(true); f1.setvisible(false); f2.setdefaultcloseoperation(jframe.exit_on_close);![enter image description here][2] gridbaglayout gbl=new gridbaglayout(); final jpanel p2=new jpanel(gbl){ private image img = imageio.read(new file("f:\\untitled folder\\rohan\\football2.jpg")); @override protected void paintcomponent( graphics g ) { super.paintcomponent(g); g.drawimage(img, 0,0,1366,730, null); } };; gridbagconstraints g2=new gridbagconstraints(); g2.insets=new insets(3,3,3,3); jlabel l2=new jlabel("admin id",jlabel.left); jlabel l3=new jlabel("password",jlabel.left); l2.setfont(new font("timesroman",font.bold,16)); l2.setforeground(color.blue); l2.setbackground(color.white); l3.setfont(new font("timesroman",font.bold,16)); l3.setforeground(color.blue); l3.setbackground(color.white); final jtextfield t1=new jtextfield(15); final jpasswordfield pw1=new jpasswordfield(15); jbutton b3=new jbutton("back"); jbutton b4=new jbutton("sign in"); f2.add(p2); g2.anchor=gridbagconstraints.first_line_end; g2.gridx=1; g2.gridy=1; p2.add(l2,g2); g2.gridx=2; g2.gridy=1; p2.add(t1,g2); g2.gridx=1; g2.gridy=2; p2.add(l3,g2); g2.gridx=2; g2.gridy=2; p2.add(pw1,g2); g2.gridx=1; g2.gridy=3; p2.add(b3,g2); g2.gridx=2; g2.gridy=3; p2.add(b4,g2);
i see 2 problems in current layout:
- you put login panel in center of parent
borderlayout
(so panel gets stretched size of container) - you have nothing in
gridbaglayout
"push" components top , left.
there several options here:
- you nest login panel several panels (for example using borderlayout, once constraint north , second time constraint west).
- add loginpanel west , add "filler" component bottom of
gridbaglayout
in order push other components top.
here demo of second solution:
import java.awt.borderlayout; import java.awt.color; import java.awt.dimension; import java.awt.flowlayout; import java.awt.font; import java.awt.gridbagconstraints; import java.awt.gridbaglayout; import java.awt.insets; import java.net.malformedurlexception; import java.net.url; import javax.swing.box; import javax.swing.imageicon; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jpasswordfield; import javax.swing.jtextfield; import javax.swing.swingutilities; public class testlogingridbaglayout { protected void initui() throws malformedurlexception { jframe frame = new jframe("admin main"); frame.setdefaultcloseoperation(jframe.exit_on_close); jlabel background = new jlabel(new imageicon(new url( "http://media1.santabanta.com/full1/football/football%20abstract/football-abstract-6a.jpg"))) { @override public dimension getpreferredsize() { dimension preferredsize = super.getpreferredsize(); dimension layoutpreferredsize = super.preferredsize(); preferredsize.width = math.max(preferredsize.width, layoutpreferredsize.width); preferredsize.height = math.max(preferredsize.height, layoutpreferredsize.height); return preferredsize; } }; background.setlayout(new borderlayout()); frame.add(background); gridbaglayout gbl = new gridbaglayout(); final jpanel loginpanel = new jpanel(gbl); loginpanel.setopaque(false); background.add(loginpanel, borderlayout.west); jlabel adminidlabel = new jlabel("admin id", jlabel.left); jlabel passwordlabel = new jlabel("password", jlabel.left); adminidlabel.setfont(new font("timesroman", font.bold, 16)); adminidlabel.setforeground(color.blue); adminidlabel.setbackground(color.white); passwordlabel.setfont(new font("timesroman", font.bold, 16)); passwordlabel.setforeground(color.blue); passwordlabel.setbackground(color.white); final jtextfield adminid = new jtextfield(15); final jpasswordfield password = new jpasswordfield(15); jpanel buttonpanel = new jpanel(new flowlayout(flowlayout.trailing)); buttonpanel.setopaque(false); jbutton = new jbutton("back"); jbutton signin = new jbutton("sign in"); buttonpanel.add(back); buttonpanel.add(signin); gridbagconstraints gbc = new gridbagconstraints(); gbc.insets = new insets(3, 3, 3, 3); gbc.anchor = gridbagconstraints.first_line_end; loginpanel.add(adminidlabel, gbc); gbc.gridwidth = gridbagconstraints.remainder; loginpanel.add(adminid, gbc); gbc.gridwidth = 1; loginpanel.add(passwordlabel, gbc); gbc.gridwidth = gridbagconstraints.remainder; loginpanel.add(password, gbc); loginpanel.add(buttonpanel, gbc); gridbagconstraints gbcfiller = new gridbagconstraints(); gbcfiller.weightx = 1.0; gbcfiller.weighty = 1.0; gbcfiller.fill = gridbagconstraints.both; loginpanel.add(box.createglue(), gbcfiller); frame.pack(); frame.setvisible(true); } /** * @param args */ public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { try { new testlogingridbaglayout().initui(); } catch (malformedurlexception e) { e.printstacktrace(); } } }); } }
i took liberty of:
- rename variables meaningful names (it makes code easier read others)
- replace custom background image panel
jlabel
- move buttons nested panel
layoutmanager
- take background image since don't have yours.
Comments
Post a Comment