java - MigLayout issue while setting position explicitly -
i have problem in miglayout when setting position of component explicitly (with id.x , id.y constraints) , resizing container component added. here sscce:
import java.awt.event.keyevent; import java.awt.event.keylistener; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jtextfield; import net.miginfocom.swing.*; public class migclass extends jframe { migclass(string title) { super(title); miglayout layout = new miglayout(); setlayout(layout); final jpanel content = new jpanel(new miglayout()); final jlabel l1 = new jlabel("a label"); content.add(l1, "push, center, top, id l1"); l1.addmouselistener(new mouselistener() { @override public void mouseclicked(mouseevent e) { final jtextfield editor = new jtextfield(5); content.add(editor, "pos l1.x l1.y"); editor.setvisible(true); l1.setvisible(false); editor.addkeylistener(new keylistener() { @override public void keytyped(keyevent e) { } @override public void keypressed(keyevent e) { if(e.getkeycode() == (keyevent.vk_enter)) { l1.settext(editor.gettext()); editor.setvisible(false); l1.setvisible(true); } } @override public void keyreleased(keyevent e) { } }); } @override public void mousepressed(mouseevent e) { } @override public void mousereleased(mouseevent e) { } @override public void mouseentered(mouseevent e) { } @override public void mouseexited(mouseevent e) { } }); add(content, "grow, push, span"); pack(); setvisible(true); } public static void main(string[] args) { migclass gui = new migclass(null); } } the jtextfield editor hasn't right position (it should overlap l1's position) if constraint "push" added label (this happens if frame enlarged). how can solve problem?
it not stated in documentation cannot mix relative positioning grid structure. either use relative positioning or normal grid structure.
there no need have 2 miglayout managers set. panel can added central area of borderlayout.
i came solution utilizes hidemode constraint.
package com.zetcode; import java.awt.eventqueue; import java.awt.event.keyadapter; import java.awt.event.keyevent; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jtextfield; import net.miginfocom.swing.miglayout; public class miglayoutreplaceex extends jframe { public miglayoutreplaceex() { initui(); setsize(300, 250); settitle("replace component"); setdefaultcloseoperation(jframe.exit_on_close); setlocationrelativeto(null); } private void initui() { jpanel pnl = new jpanel(new miglayout()); jlabel lbl = new jlabel("a label"); pnl.add(lbl, "cell 0 0, hidemode 3"); jtextfield field = new jtextfield(10); pnl.add(field, "cell 0 0, hidemode 3"); field.addkeylistener(new keyadapter() { @override public void keypressed(keyevent e) { if (e.getkeycode() == (keyevent.vk_enter)) { lbl.settext(field.gettext()); field.setvisible(false); lbl.setvisible(true); } } }); field.setvisible(false); lbl.addmouselistener(new mouseadapter() { @override public void mouseclicked(mouseevent e) { lbl.setvisible(false); field.setvisible(true); } }); add(pnl); } public static void main(string[] args) { eventqueue.invokelater(new runnable() { @override public void run() { miglayoutreplaceex ex = new miglayoutreplaceex(); ex.setvisible(true); } }); } } the example shows label on window. clicking on label hide label , show text field. when press enter in field, text field hidden , label shown, copying new text text field.
in hidemode 3 invisible components not participate in layout. can therefore dynamically show components in same cell other component hidden.
Comments
Post a Comment