swing - Java panel alignment -
swing - Java panel alignment -
class cipherguiframe extends jframe { public cipherguiframe() { super("caesar cipher gui"); setdefaultcloseoperation(jframe.exit_on_close); setsize(400, 600); jtextarea area1 = new jtextarea(); jtextarea area2 = new jtextarea(); jspinner myspinner=new jspinner(); jpanel mainframe = new jpanel(); mainframe.setlayout(new boxlayout(mainframe, boxlayout.y_axis)); jpanel p1 = new jpanel(); jpanel p2 = new jpanel(); jpanel p3 = new jpanel(); p1.setlayout(new boxlayout(p1, boxlayout.y_axis)); p2.setlayout(new boxlayout(p2, boxlayout.y_axis)); p1.setborder(borderfactory.createtitledborder("cleartext")); p2.setborder(borderfactory.createtitledborder("spinner")); p3.setlayout(new boxlayout(p3, boxlayout.y_axis)); p3.setborder(borderfactory.createtitledborder("ciphertext")); p1.add(area1); p2.add(myspinner); p3.add(area2); mainframe.add(p1); mainframe.add(p2); mainframe.add(p3); this.add(mainframe); } }
it seems code produces looks similar this:
i trying tidy looks cleaner; there way shrink middle panel or create others bigger create nicer?
don't set sizes of anything, instead set columns , rows of jtextareas. don't utilize boxlayout when don't want behaviors. set jtextareas in jscrollpanes instead. , don't forget pack() jframe.
import java.awt.borderlayout; import javax.swing.*; public class cipher2 extends jpanel { public static final int rows = 12; public static final int cols = 30; private jtextarea textarea1 = new jtextarea(rows, cols); private jtextarea textarea2 = new jtextarea(rows, cols); public cipher2() { setlayout(new boxlayout(this, boxlayout.y_axis)); // box ok here jscrollpane scroll1 = new jscrollpane(textarea1); add(wrapcomponentwithtitle(scroll1, "fubar"), borderlayout.page_start); add(wrapcomponentwithtitle(new jspinner(), "spinner"), borderlayout.center); scroll1 = new jscrollpane(textarea2); add(wrapcomponentwithtitle(scroll1, "snafu"), borderlayout.page_end); } private jpanel wrapcomponentwithtitle(jcomponent component, string title) { // boxlayout not ok here. utilize borderlayout instead jpanel wrappanel = new jpanel(new borderlayout()); wrappanel.add(component); wrappanel.setborder(borderfactory.createtitledborder(title)); homecoming wrappanel; } private static void createandshowgui() { cipher2 mainpanel = new cipher2(); jframe frame = new jframe("foo"); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.getcontentpane().add(mainpanel); frame.pack(); frame.setlocationbyplatform(true); frame.setvisible(true); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { createandshowgui(); } }); } }
java swing jframe jpanel alignment
Comments
Post a Comment