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

Popular posts from this blog

c++ - CryptStringToBinary API behavior -

java.util.scanner - How to read and add only numbers to array from a text file -

iphone - Three second countdown in cocos2d -