Java Swing How to - Update JFrame maximized bounds while keeping it maximized








Question

We would like to know how to update JFrame maximized bounds while keeping it maximized.

Answer

import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
//from  w w w  . ja  v a  2  s . co  m
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Main {
  public static void main(String[] args) {
    JFrame frame = new JFrame() {
      @Override
      public synchronized void setExtendedState(int state) {
        if (isUndecorated() && (state & MAXIMIZED_BOTH) == MAXIMIZED_BOTH) {
          super.setMaximizedBounds(new Rectangle(300, 300));
        }
        super.setExtendedState(state);
      }
    };
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(800, 600);
    frame.setUndecorated(true);
    frame.getContentPane().add(
        new JButton(new AbstractAction("Toggle maximize") {
          @Override
          public void actionPerformed(ActionEvent e) {
            int state = frame.getExtendedState();
            if ((state & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH) {
              frame.setExtendedState(JFrame.NORMAL);
            } else {
              frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            }
          }
        }), BorderLayout.PAGE_END);
    frame.setVisible(true);
  }
}