6

我想知道是否可以将 JMenuBar 添加到 JFrame 或 JRootPane 的装饰窗口,或者围绕内容窗格的边框。我看到像 Firefox 或 Photoshop 这样的应用程序在装饰窗口中有它们的菜单栏。

这可能吗?我环顾了谷歌,但我无法找到任何关于这种事情的结果。我希望Java有这种能力。

4

3 回答 3

9

不确定您在寻找什么,但您可以添加JMenuBarJFrame- JFrame.setJMenuBar()。有关详细信息,请参阅如何使用菜单教程。

编辑:

下面是一个带有菜单的未装饰框架的过度简化示例,只是为了演示这个想法。

您可能想求助于现有的解决方案——JIDE 就是ResizableFrame为了这个目的。它是开源JIDE-oss的一部分。Substance L&F支持标题栏自定义(请参阅Substance LaF 发生了什么?)。您还可以通过@camickr非常有效地利用ComponentMover和类,有关更多详细信息,请参阅调整组件大小文章。ComponentResizer

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);
    }
}
于 2012-07-21T04:07:37.360 回答
2

尝试这个...

将 JMenuBar 添加到 JFrame

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

将 JMenuBar 添加到 JPanel

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

有关该主题的更多信息,请参阅此JMenuBar 教程链接

于 2012-07-21T04:49:25.143 回答
1

我做了一些挖掘,简短的回答是......不。

基本上框架装饰已卸载到操作系统,因此我们无权访问它的内容。

但是,如果你想去很多工作,你可以实现自己的装饰。不过,您需要负责调整大小和移动。

你可能想看看

http://java-swing-tips.blogspot.com.au/2010/05/custom-decorated-titlebar-jframe.htmlhttp://www.paulbain.com/2009/10/13/howto-draggabe- jframe-without-decoration/用于想法

于 2012-07-22T04:06:50.797 回答