Java JMenuBar中的最大JInternalFrame

Java JMenuBar中的最大JInternalFrame,java,swing,jinternalframe,Java,Swing,Jinternalframe,因此,我在其中创建了一个JDesktopPane和JInternalFrame(我使用的是windows L&F),但当我最大化JInternalFrame时,它并不像在windows中那样工作。我的意思是,框架应该消失,3个按钮应该在JMenuBar内部。 是否有任何解决方案可以使我的JInternalFrame在JMenuBar中最大化?我“猜”您正在设置帧的边界(大小/位置)以匹配JDesktopPane的大小。你应该使用 在C#中,当你最大化一个内部框架时,它会在菜单栏中最大化,并且

因此,我在其中创建了一个JDesktopPane和JInternalFrame(我使用的是windows L&F),但当我最大化JInternalFrame时,它并不像在windows中那样工作。我的意思是,框架应该消失,3个按钮应该在JMenuBar内部。

是否有任何解决方案可以使我的JInternalFrame在JMenuBar中最大化?

我“猜”您正在设置帧的边界(大小/位置)以匹配
JDesktopPane
的大小。你应该使用

在C#中,当你最大化一个内部框架时,它会在菜单栏中最大化,并且它周围的蓝色框架消失,这是一个默认的功能,但在java中则不同


这是不能在挥杆中完成的,或者至少,除非你想完全重写外观和感觉,否则它是不可能完成的。在JMenuBar,JialalFrimes仍然是最大的问题。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将导致更少的混乱和更好的响应。事实上,我在代码或JInternalFrame最大化方面没有问题。我发布了两张图片,显示了我到底想要什么。第一张图片是一个随机应用程序(我想是C#创建的)正如你所看到的,JInternalFrame在菜单栏中被最大化了。第二张图片是我的java应用程序,正如你所看到的,JInternalFrame也被最大化了,但不像第一张图片那样在JMenuBar中。我问这是java L&F中的一个bug还是有解决方案。在C#中,当你最大化内部框架时,它是默认的功能菜单栏中的最大化和它周围的蓝色框架消失了,但在java中它不是同一件事。

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JDesktopPane dp = new JDesktopPane() {
                    @Override
                    public Dimension getPreferredSize() {
                        return new Dimension(400, 400);
                    }
                };
                JInternalFrame iFrame = new JInternalFrame("Test", true, true, true, true);
                iFrame.add(new TestPane());
                iFrame.setVisible(true);
                iFrame.pack();
                dp.add(iFrame);

                JMenuBar mb = new JMenuBar();
                JMenu menu = new JMenu("Window");
                JMenuItem mi = new JMenuItem("Maximise");
                mi.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JInternalFrame iFrame = dp.getSelectedFrame();
                        if (iFrame != null) {
                            try {
                                iFrame.setMaximum(true);
                            } catch (PropertyVetoException ex) {
                                ex.printStackTrace();
                            }
                        }
                    }
                });
                menu.add(mi);

                mi = new JMenuItem("Restore");
                mi.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JInternalFrame iFrame = dp.getSelectedFrame();
                        if (iFrame != null) {
                            try {
                                iFrame.setMaximum(false);
                            } catch (PropertyVetoException ex) {
                                ex.printStackTrace();
                            }
                        }
                    }
                });
                menu.add(mi);

                mb.add(menu);

                JFrame frame = new JFrame("Testing");
                frame.setJMenuBar(mb);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(dp);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                dp.setSelectedFrame(iFrame);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

}