爪哇 - 是否有可能到的JMenuBar添加到JFrame中的装饰窗?(Java - Is it p

2019-06-26 11:07发布

我想知道如果我可以添加的JMenuBar到环绕中的内容窗格中的JFrame或JRootPane中的装饰窗,否则边境。 我看到像Firefox或Photoshop中有在装修窗口菜单栏中的应用程序。

这可能吗? 我环顾四周,谷歌,但我一直没能找到过这种事情任何结果。 我希望Java有这个能力。

Answer 1:

不知道你在寻找什么,而是你可以添加JMenuBarJFrame - JFrame.setJMenuBar() 。 看看如何使用菜单教程的详细信息。

编辑:

下面是与菜单未修饰帧的过于简化的示例,只是为了演示的想法。

你可能希望把现有的解决方案-基德有ResizableFrame用于这一目的。 它是开源的一部分基德和OSS 。 物质L&F有标题栏自定义支持(见发生了什么事物质的LaF? )。 您也可以非常有效地利用ComponentMoverComponentResizer通过@camickr类,请参见调整大小组件文章的更多细节。

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

public class UndecoratedFrameDemo {
    private static Point point = new Point();

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setUndecorated(true);
        frame.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                point.x = e.getX();
                point.y = e.getY();
            }
        });
        frame.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) {
                Point p = frame.getLocation();
                frame.setLocation(p.x + e.getX() - point.x,
                        p.y + e.getY() - point.y);
            }
        });

        frame.setSize(300, 300);
        frame.setLocation(200, 200);
        frame.setLayout(new BorderLayout());

        frame.getContentPane().add(new JLabel("Drag to move", JLabel.CENTER),
                BorderLayout.CENTER);

        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Menu");
        menuBar.add(menu);
        JMenuItem item = new JMenuItem("Exit");
        item.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        menu.add(item);
        frame.setJMenuBar(menuBar);

        frame.setVisible(true);
    }
}


Answer 2:

试试这个...

添加的JMenuBar到JFrame

JMenuBar menuBar = new JMenuBar();
myFrame.setJMenuBar(menuBar);

添加的JMenuBar到的JPanel

JMenuBar menuBar = new JMenuBar();
myPanel.add(menuBar);

看到这个的JMenuBar教程链接有关该主题的更多信息。



Answer 3:

我做了一些挖掘和简单的答案是...没有。

基本上外框装饰被关闭加载到操作系统,所以我们没有任何访问它的内容。

不过,如果你想要去了很多的工作,你可以实现自己的装修。 你需要采取的调整,虽然移动的责任。

你可能想看看

http://java-swing-tips.blogspot.com.au/2010/05/custom-decorated-titlebar-jframe.html和http://www.paulbain.com/2009/10/13/howto-draggabe- JFrame的,不装饰/的想法



文章来源: Java - Is it possible to add a JMenuBar to a JFrame's decoration window?