gpt4 book ai didi

Java - 是否可以将 JMenuBar 添加到 JFrame 的装饰窗口?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:53:32 25 4
gpt4 key购买 nike

我想知道是否可以将 JMenuBar 添加到 JFrame 或 JRootPane 的装饰窗口,或者以其他方式添加围绕内容 Pane 的边框。我看到像 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 的 ComponentMoverComponentResizer 类,请参阅 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);
}
}

关于Java - 是否可以将 JMenuBar 添加到 JFrame 的装饰窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11589330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com