On Thu, 8 Oct 2020 03:57:48 GMT, Prasanta Sadhukhan <[email protected]>
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