我想知道我是否可以将JMenuBar添加到JFrame或JRootPane的装饰窗口,或者是否包含内容窗格内的边框.我看到像Firefox或Photoshop这样的应用程序在装饰窗口中有他们的菜单栏.
这可能吗?我环顾了谷歌,但我还没有找到任何关于这种事情的结果.我希望Java有这种能力.
解决方法
不确定您要找的是什么,但您可以将JMenuBar添加到JFrame –
JFrame.setJMenuBar().有关详细信息,请参阅
How to Use Menus教程.
编辑:
下面是一个过度简化的未装饰框架示例,带有菜单,只是为了演示这个想法.
您可能希望转向现有解决方案 – JIDE为此目的使用ResizableFrame.它是开源JIDE-oss的一部分.Substance L&F支持标题栏自定义(见What happened to the Substance LaF?).您还可以非常有效地利用@camickr的ComponentMover和ComponentResizer类,有关详细信息,请参阅Resizing Components文章.
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); } }