首页javajframeJava Swing - 如何更新JFrame最大化边界,同时保持最大化

Java Swing - 如何更新JFrame最大化边界,同时保持最大化

我们想知道如何更新JFrame最大化边界,同时保持最大化。
import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;

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);
  }
}