javaswingresizecomponentlistener

Java ComponentResized - Detect whether user resized the window or it was resized programatically


I have a JFrame in which I remove and add components and each time I do this, I resize the frame accordingly. I added a Component Listener but of course it gets triggered both by the user resizing the window and also by my setSize() methods.
Is there any way to see from the ComponentEvent whether the user resized the window or I did through setSize()?
The posible solutions I found are:
1. Use a flag - boolean resizing - which I set to true before setSize() and to false after that.
2. Add a mouseDragged listener and compare sizes before and after the drag.
The second one is definitely not a good choice. The first one would work but I would like to know if I can find in a simple way whether the user is the one who resized the window or not.


Solution

  • I resize the frame accordingly

    Whats wrong with using pack()?

    I remove and add components and each time I do this,

    Then this is where you should set your Boolean value:

    programResize == true:
    panel.add(...);
    frame.setSize(...); // this should cause the ComponentListener to fire
    // the ComponentListener would then use programResize == false;
    

    Or a better option option could be:

    component.removeComponentListener(...);
    panel.add(...);
    frame.setSize(...);
    component.addComponentListener(...);
    

    I like this approach better because all the logic based on the manual update is self contained in one place and there is no need to define a Boolean variable.