java - Valign JPanel not working -
i trying align jpanel vertically. setalignmenty not working expected. here have done far.
import java.awt.color; import java.awt.component; import java.awt.gridlayout; import javax.swing.boxlayout; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jtextfield; import javax.swing.border.lineborder; public class valignjpanel { public static void main(string args[]) { jframe frame = new jframe("vertical alignment"); frame.setdefaultcloseoperation(jframe.exit_on_close); jpanel panel1 = wrappanel(createpanel(), component.top_alignment); jpanel panel2 = wrappanel(createpanel(), component.center_alignment); jpanel panel3 = wrappanel(createpanel(), component.bottom_alignment); frame.setlayout(new gridlayout(1, 3)); frame.add(panel1); frame.add(panel2); frame.add(panel3); frame.setsize(400, 150); frame.setvisible(true); } private static jpanel wrappanel(jpanel oldpanel, float alignment) { jpanel panel = new jpanel(); oldpanel.setalignmenty(alignment); panel.add(oldpanel); return panel; } private static jpanel createpanel() { jpanel panel = new jpanel(); panel.setlayout(new boxlayout(panel, boxlayout.y_axis)); panel.add(new jlabel("hello world")); panel.add(new jtextfield(10)); panel.setborder(new lineborder(color.red)); return panel; } } i trying create wrapper method takes jpanel & wraps given alignment.
edit (from comment, image) trying output looks this, in place of button, want have jpanel

what need set layout boxlayout new jpanel in wrappanel method.
jpanel panel = new jpanel(); boxlayout layout = new boxlayout(panel, boxlayout.line_axis); panel.setlayout(layout); bug: current code doesn't seem work because it'll stretch text field. if use jbutton in place of jtextfeild see effect. i'm still trying figure out why text field that.
update along above code, fix problem of text field stretching, answered camickr in this answer
boxlayout1 of few layout managers respects minimum , maximum sizes of component. if want prevent panel stretching can use:
panel.setmaximumsize( panel.getpreferredsize() ); the above code want put in createpanel method.

import java.awt.color; import java.awt.component; import java.awt.gridlayout; import javax.swing.boxlayout; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jtextfield; import javax.swing.border.lineborder; public class valignjpanel { public static void main(string args[]) { jframe frame = new jframe("vertical alignment"); frame.setdefaultcloseoperation(jframe.exit_on_close); jpanel panel1 = wrappanel(createpanel(), component.top_alignment); jpanel panel2 = wrappanel(createpanel(), component.center_alignment); jpanel panel3 = wrappanel(createpanel(), component.bottom_alignment); frame.setlayout(new gridlayout(1, 3)); frame.add(panel1); frame.add(panel2); frame.add(panel3); frame.setsize(400, 150); frame.setvisible(true); } private static jpanel wrappanel(jpanel oldpanel, float alignment) { jpanel panel = new jpanel(); boxlayout layout = new boxlayout(panel, boxlayout.line_axis); panel.setlayout(layout); oldpanel.setalignmenty(alignment); panel.add(oldpanel); return panel; } private static jpanel createpanel() { jpanel panel = new jpanel(); panel.setlayout(new boxlayout(panel, boxlayout.y_axis)); panel.add(new jlabel("hello world")); panel.add(new jtextfield(10)); panel.setborder(new lineborder(color.red)); panel.setmaximumsize( panel.getpreferredsize()); return panel; } }
Comments
Post a Comment