On Thu, 8 Oct 2020 03:57:48 GMT, Prasanta Sadhukhan <psadhuk...@openjdk.org> wrote:
>> The MetalRootPaneUI installs the MetalRootLayout as a layout manager for the >> current JRootPane. And it should be used >> from the Container.preferredSize() > > I tried following testcase snippet > ``` > JRootPane r = new JRootPane(); > JFrame f = new JFrame(); > f.getRootPane().setUI(new MetalRootPaneUI()); > f.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); > f.getRootPane().getUI().installUI(r); > r.getContentPane().add(new JLabel("foo")); > System.out.println("Preferred Size: " + r.getPreferredSize()); > but it uses JRootPane.RootLayout layout manager and not MetalRootLayout so it > calls Rootlayout.preferredLayoutSize and > not MetalRootLayout.preferredlayoutSize You need to set decorations for the root pane: UIManager.setLookAndFeel(new MetalLookAndFeel()); JFrame frame = new JFrame(); frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); frame.pack(); System.out.println("Layout: " + frame.getRootPane().getLayout()); ======== Layout: javax.swing.plaf.metal.MetalRootPaneUI$MetalRootLayout@69d9c55 ------------- PR: https://git.openjdk.java.net/jdk/pull/433