diff --git a/test/jdk/java/awt/Frame/FrameRepackTest.java b/test/jdk/java/awt/Frame/FrameRepackTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4f77d195ca622ae21d5468def6e5eeb5ed766b20
--- /dev/null
+++ b/test/jdk/java/awt/Frame/FrameRepackTest.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.Label;
+import java.awt.Menu;
+import java.awt.MenuBar;
+import java.awt.MenuItem;
+import java.awt.Panel;
+import java.awt.ScrollPane;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/*
+ * @test
+ * @key headful
+ * @summary Test dynamically changing frame component visibility and repacking
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual FrameRepackTest
+ */
+
+public class FrameRepackTest {
+
+    private static final String INSTRUCTIONS = """
+            There is a green frame with a menubar.
+            The menubar has one menu, labelled 'Flip'.
+            The menu has two items, labelled 'visible' and 'not visible'.
+            The frame also contains a red panel that contains two line labels,
+            'This panel is always displayed' and 'it is a test'.
+
+            If you select the menu item 'Flip->visible', then another panel is
+            added below the red panel.
+            The added panel is blue and has yellow horizontal and vertical scrollbars.
+
+            If you select menu item 'Flip->not visible', the second panel
+            is removed and the frame appears as it did originally.
+
+            You can repeatedly add and remove the second panel in this way.
+            After such an addition or removal, the frame's location on the screen
+            should not change, while the size changes to accommodate
+            either just the red panel or both the red and the blue panels.
+
+            If you resize the frame larger, the red panel remains at the
+            top of the frame with its height fixed and its width adjusted
+            to the width of the frame.
+
+            Similarly, if it is present, the blue panel and its yellow scroolbars
+            remain at the bottom of the frame with fixed height and width adjusted
+            to the size of the frame.  But selecting 'visible' or 'not visible'
+            repacks the frame, thereby adjusting its size tightly to its panel(s).
+
+            Upon test completion, click Pass or Fail appropriately.
+            """;
+
+    public static void main(String[] args) throws Exception {
+        PassFailJFrame passFailJFrame = new PassFailJFrame.Builder()
+                .title("FrameRepackTest Instructions")
+                .instructions(INSTRUCTIONS)
+                .testTimeOut(5)
+                .rows(30)
+                .columns(45)
+                .build();
+
+        EventQueue.invokeAndWait(() -> {
+            FrameRepack frame = new FrameRepack();
+
+            PassFailJFrame.addTestWindow(frame);
+            PassFailJFrame.positionTestWindow(frame,
+                    PassFailJFrame.Position.HORIZONTAL);
+
+            frame.setVisible(true);
+        });
+
+        passFailJFrame.awaitAndCheck();
+    }
+
+}
+
+class FrameRepack extends Frame implements ActionListener {
+
+    Panel south;
+
+    public FrameRepack() {
+        super("FrameRepack");
+
+        // create the menubar
+        MenuBar menubar = new MenuBar();
+        this.setMenuBar(menubar);
+        // create the options
+        Menu flip = new Menu("Flip");
+        MenuItem mi;
+        mi = new MenuItem("visible");
+        mi.addActionListener(this);
+        flip.add(mi);
+        mi = new MenuItem("not visible");
+        mi.addActionListener(this);
+        flip.add(mi);
+
+        menubar.add(flip);
+
+        setLayout(new BorderLayout(2, 2));
+        setBackground(Color.green);
+
+        // north panel is always displayed
+        Panel north = new Panel();
+        north.setBackground(Color.red);
+        north.setLayout(new BorderLayout(2, 2));
+        north.add("North", new Label("This panel is always displayed"));
+        north.add("Center", new Label("it is a test"));
+        north.setSize(200, 200);
+        add("North", north);
+
+        // south panel can be visible or not...
+        // The problem seems to occur when I put this panel not visible
+        south = new Panel();
+        south.setBackground(Color.white);
+        south.setLayout(new BorderLayout());
+
+        ScrollPane scroller = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
+        scroller.setBackground(Color.yellow);
+        Panel pan1 = new Panel();
+        pan1.setBackground(Color.blue);
+        pan1.setLayout(new BorderLayout());
+
+        pan1.setSize(400, 150);
+        scroller.add("Center", pan1);
+
+        south.add("South", scroller);
+
+        add("South", south);
+
+        south.setVisible(false);
+
+        setSize(350, 300);
+
+        pack();
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent evt) {
+        if (evt.getSource() instanceof MenuItem) {
+            if (evt.getActionCommand().equals("visible")) {
+                south.setVisible(true);
+                pack();
+            } else if (evt.getActionCommand().equals("not visible")) {
+                south.setVisible(false);
+                pack();
+            }
+        }
+    }
+}
diff --git a/test/jdk/java/awt/Frame/FrameResizeTest/FrameResizeTest_1.java b/test/jdk/java/awt/Frame/FrameResizeTest/FrameResizeTest_1.java
new file mode 100644
index 0000000000000000000000000000000000000000..7503672fccda9701d9f16a49052a1d29d041b4d8
--- /dev/null
+++ b/test/jdk/java/awt/Frame/FrameResizeTest/FrameResizeTest_1.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Canvas;
+import java.awt.Color;
+import java.awt.EventQueue;
+import java.awt.Frame;
+
+/*
+ * @test
+ * @bug 4041442
+ * @key headful
+ * @summary Test resizing a frame containing a canvas
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual FrameResizeTest_1
+ */
+
+public class FrameResizeTest_1 {
+
+    private static final String INSTRUCTIONS = """
+        To the right of this frame is an all-white 200x200 frame.
+
+        This is actually a white canvas component in the frame.
+        The frame itself is red.
+        The red should never show.
+        In particular, after you resize the frame, you should see all white and no red.
+        (During very fast window resizing, red color may appear briefly,
+        which is not a failure.)
+
+        Upon test completion, click Pass or Fail appropriately.
+        """;
+
+    public static void main(String[] args) throws Exception {
+        PassFailJFrame passFailJFrame = new PassFailJFrame.Builder()
+                .title("FrameResizeTest_1 Instructions")
+                .instructions(INSTRUCTIONS)
+                .testTimeOut(5)
+                .rows(12)
+                .columns(45)
+                .build();
+
+        EventQueue.invokeAndWait(() -> {
+            FrameResize_1 frame = new FrameResize_1();
+
+            PassFailJFrame.addTestWindow(frame);
+            PassFailJFrame.positionTestWindow(frame,
+                    PassFailJFrame.Position.HORIZONTAL);
+
+            frame.setVisible(true);
+        });
+
+        passFailJFrame.awaitAndCheck();
+    }
+}
+
+class FrameResize_1 extends Frame {
+
+    FrameResize_1() {
+        super("FrameResize_1");
+        // Create a white canvas
+        Canvas canvas = new Canvas();
+        canvas.setBackground(Color.white);
+
+        setLayout(new BorderLayout());
+        add("Center", canvas);
+
+        setBackground(Color.red);
+        setSize(200,200);
+    }
+}
diff --git a/test/jdk/java/awt/Frame/FrameResizeTest/FrameResizeTest_2.java b/test/jdk/java/awt/Frame/FrameResizeTest/FrameResizeTest_2.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8fdd52522b229aab7959423d921190d6b706a0f
--- /dev/null
+++ b/test/jdk/java/awt/Frame/FrameResizeTest/FrameResizeTest_2.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Canvas;
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Panel;
+
+/*
+ * @test
+ * @bug 4065568
+ * @key headful
+ * @summary Test resizing a frame containing a canvas
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual FrameResizeTest_2
+ */
+
+public class FrameResizeTest_2 {
+    private static final String INSTRUCTIONS = """
+        There is a frame (size 300x300).
+        The left half is red and the right half is blue.
+
+        When you resize the frame, it should still have a red left half
+        and a blue right half.
+
+        In particular, no green should be visible after a resize.
+
+        Upon test completion, click Pass or Fail appropriately.
+        """;
+
+    public static void main(String[] args) throws Exception {
+        PassFailJFrame passFailJFrame = new PassFailJFrame.Builder()
+                .title("FrameResizeTest_2 Instructions")
+                .instructions(INSTRUCTIONS)
+                .testTimeOut(5)
+                .rows(10)
+                .columns(45)
+                .build();
+
+        EventQueue.invokeAndWait(() -> {
+            FrameResize_2 frame = new FrameResize_2();
+
+            PassFailJFrame.addTestWindow(frame);
+            PassFailJFrame.positionTestWindow(frame,
+                    PassFailJFrame.Position.HORIZONTAL);
+
+            frame.setVisible(true);
+        });
+
+        passFailJFrame.awaitAndCheck();
+    }
+}
+
+class FrameResize_2 extends Frame {
+
+    FrameResize_2() {
+        super("FrameResize_2");
+
+        setLayout(new GridBagLayout());
+
+        GridBagConstraints c = new GridBagConstraints();
+        c.fill = GridBagConstraints.BOTH;
+        c.weightx = 1;
+        c.weighty = 1;
+
+        Container dumbContainer = new DumbContainer();
+        add(dumbContainer, c);
+
+        Panel dumbPanel = new DumbPanel();
+        add(dumbPanel, c);
+
+        setSize(300, 300);
+    }
+}
+
+
+class Fake extends Canvas {
+    public Fake(String name, Color what) {
+        setBackground(what);
+        setName(name);
+    }
+
+    public void paint(Graphics g) {
+        Dimension d = getSize();
+        g.setColor(getBackground());
+        g.fillRect(0, 0, d.width, d.height);
+    }
+}
+
+class DumbContainer extends Container {
+    public DumbContainer() {
+        setLayout(new BorderLayout());
+        add("Center", new Fake("dumbc", Color.red));
+    }
+
+    public void paint(Graphics g) {
+        Dimension d = getSize();
+        g.setColor(Color.green);
+        g.fillRect(0, 0, d.width, d.height);
+        super.paint(g);
+    }
+}
+
+class DumbPanel extends Panel {
+    public DumbPanel() {
+        setLayout(new BorderLayout());
+        add("Center", new Fake("dumbp", Color.blue));
+    }
+
+    public void paint(Graphics g) {
+        Dimension d = getSize();
+        g.setColor(Color.green);
+        g.fillRect(0, 0, d.width, d.height);
+        super.paint(g);
+    }
+}
diff --git a/test/jdk/java/awt/Frame/WindowMoveTest.java b/test/jdk/java/awt/Frame/WindowMoveTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b086216a3b514c506590ce20c28f095db3feff2
--- /dev/null
+++ b/test/jdk/java/awt/Frame/WindowMoveTest.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Color;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/*
+ * @test
+ * @bug 4077874
+ * @key headful
+ * @summary Test window position at opening, closing, and closed for consistency
+ */
+
+public class WindowMoveTest {
+
+    static WindowMove frame;
+    public static void main(String[] args) throws Exception {
+        Robot robot = new Robot();
+        robot.setAutoDelay(50);
+        robot.setAutoWaitForIdle(true);
+
+        EventQueue.invokeAndWait(() -> frame = new WindowMove());
+
+        robot.waitForIdle();
+        robot.delay(1000);
+
+        EventQueue.invokeAndWait(() ->
+                frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)));
+
+        if (!WindowMove.latch.await(2, TimeUnit.SECONDS)) {
+            throw new RuntimeException("Test timeout.");
+        }
+
+        if (WindowMove.failMessage != null) {
+            throw new RuntimeException(WindowMove.failMessage);
+        }
+    }
+}
+
+class WindowMove extends Frame implements WindowListener {
+    static final Rectangle expectedBounds =
+            new Rectangle(100, 100, 300, 300);
+
+    static CountDownLatch latch = new CountDownLatch(1);
+    static String failMessage = null;
+
+    private boolean layoutCheck;
+    private boolean visibleCheck;
+    private boolean openedCheck;
+    private boolean closingCheck;
+    private boolean closedCheck;
+
+    public WindowMove() {
+        super("WindowMove");
+        addWindowListener(this);
+
+        setSize(300, 300);
+        setLocation(100, 100);
+        setBackground(Color.white);
+
+        setLayout(null);
+        if (checkBounds()) {
+            layoutCheck = true;
+        }
+        System.out.println("setLayout bounds: " + getBounds());
+
+        setVisible(true);
+        if (checkBounds()) {
+            visibleCheck = true;
+        }
+        System.out.println("setVisible bounds: " + getBounds());
+    }
+
+    private boolean checkBounds() {
+        return getBounds().equals(expectedBounds);
+    }
+
+    public void checkResult() {
+        if (layoutCheck
+                && visibleCheck
+                && openedCheck
+                && closingCheck
+                && closedCheck) {
+            System.out.println("Test passed.");
+        } else {
+            failMessage = """
+                    Some of the checks failed:
+                    layoutCheck %s
+                    visibleCheck %s
+                    openedCheck %s
+                    closingCheck %s
+                    closedCheck %s
+                    """
+                    .formatted(
+                            layoutCheck,
+                            visibleCheck,
+                            openedCheck,
+                            closingCheck,
+                            closedCheck
+                    );
+        }
+
+        latch.countDown();
+    }
+
+    public void windowClosing(WindowEvent evt) {
+        if (checkBounds()) {
+            closingCheck = true;
+        }
+        System.out.println("Closing bounds: " + getBounds());
+
+        setVisible(false);
+        dispose();
+    }
+
+    public void windowClosed(WindowEvent evt) {
+        if (checkBounds()) {
+            closedCheck = true;
+        }
+        System.out.println("Closed bounds: " + getBounds());
+
+        checkResult();
+    }
+
+    public void windowOpened(WindowEvent evt) {
+        if (checkBounds()) {
+            openedCheck = true;
+        }
+        System.out.println("Opening bounds: " + getBounds());
+    }
+
+    public void windowActivated(WindowEvent evt) {}
+
+    public void windowIconified(WindowEvent evt) {}
+
+    public void windowDeactivated(WindowEvent evt) {}
+
+    public void windowDeiconified(WindowEvent evt) {}
+}