non devi chiamara repaint ma validate dopo che hai fatto il resize

codice:
import javax.swing.*;
import java.awt.event.*;

public class ResizableJWindow extends JWindow implements ActionListener {
  private int MODE = 0;
  
  public void actionPerformed (ActionEvent ae) {
    MODE++;
    if (MODE != 3) {
      this.setSize(this.getWidth() - MODE * 100, this.getHeight() - MODE * 100);
    }
    else {
      this.setSize(400, 400);
    }
    this.validate();
    MODE = MODE % 3;
    System.out.println("Resize performed");
  }
  
  
  public ResizableJWindow() {
    super();
    JButton res = new JButton("Ridimensionami");
    res.addActionListener(this);
    this.getContentPane().add(res);
    this.setSize(400,400);
    this.setVisible(true);
  }
  
  public static void main (String[] args) {
    ResizableJWindow rjw = new ResizableJWindow();
  }
}