我想知道是否可以将JMenuBar添加到JFrame或JRootPane的装饰窗口,或者是否包含内容窗格内的边框。我看到像Firefox或Photoshop这样的应用程序在装饰窗口中有他们的菜单栏。
这可能吗?我环顾了谷歌,但我还没有找到任何关于这种事情的结果。我希望Java有这种能力。
答案 0 :(得分:9)
不确定您要查找的内容,但可以将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);
}
}
答案 1 :(得分:2)
试试这个......
将JMenuBar添加到JFrame
JMenuBar menuBar = new JMenuBar();
myFrame.setJMenuBar(menuBar);
将JMenuBar添加到JPanel
JMenuBar menuBar = new JMenuBar();
myPanel.add(menuBar);
有关该主题的更多信息,请参阅此JMenuBar Tutorial link。
答案 2 :(得分:1)
我做了一些挖掘,简短的回答是......不。
基本上框架装饰已卸载到操作系统,因此我们无权访问它的内容。
但是,如果你想做很多工作,你可以实现自己的装饰。你需要承担调整大小和移动的责任。
您可能想要查看
http://java-swing-tips.blogspot.com.au/2010/05/custom-decorated-titlebar-jframe.html和http://www.paulbain.com/2009/10/13/howto-draggabe-jframe-without-decoration/了解