Java 如何制作任何JFrame I';顶部的swing菜单栏;你创造了什么?

Java 如何制作任何JFrame I';顶部的swing菜单栏;你创造了什么?,java,swing,Java,Swing,因此,我正在创建一个应用程序,在这个应用程序中,不同的JFrames可以在任何给定的时间打开。我已经在我的主窗口顶部创建了一个菜单栏,即您的标准“文件、工具、编辑等…”菜单栏。我想知道如何让这个菜单栏位于所有JFrames的顶部,而不仅仅是主应用程序窗口框架,而不必在每个框架上复制和粘贴它的所有代码 正如@mwarren和@jhamon在评论中所说,你必须使用继承。创建JFrame的子类,并在其中实现菜单栏所需的所有功能。我的毕业论文也有同样的问题,我做了以下工作: 我创建了一个类,比方说Ext

因此,我正在创建一个应用程序,在这个应用程序中,不同的JFrames可以在任何给定的时间打开。我已经在我的主窗口顶部创建了一个菜单栏,即您的标准“文件、工具、编辑等…”菜单栏。我想知道如何让这个菜单栏位于所有JFrames的顶部,而不仅仅是主应用程序窗口框架,而不必在每个框架上复制和粘贴它的所有代码

正如@mwarren和@jhamon在评论中所说,你必须使用继承。创建JFrame的子类,并在其中实现菜单栏所需的所有功能。我的毕业论文也有同样的问题,我做了以下工作:

我创建了一个类,比方说ExtendableJFrame,并在那里创建了菜单栏。在那里,我还实现了启用或禁用按钮/菜单的方法。因此,当我创建一个新的JFrame时,菜单栏被初始化,然后,使用一行代码,我可以启用或禁用我想要的任何东西(按钮/菜单)

如果添加快捷方式,请确保在禁用按钮时快捷方式不起作用


此外,我必须在不同的jframe中使用菜单栏做类似的事情,,但不完全相同。因此,我创建了一个接口,比方说MyMenuBarInterface,然后在每个JFrame类中分别实现代码,为它们提供我想要的确切功能。

正如@mwarren和@jhamon在评论中所说的,您必须使用继承。创建JFrame的子类,并在其中实现菜单栏所需的所有功能。我的毕业论文也有同样的问题,我做了以下工作:

我创建了一个类,比方说ExtendableJFrame,并在那里创建了菜单栏。在那里,我还实现了启用或禁用按钮/菜单的方法。
因此,当我创建一个新的JFrame时,菜单栏被初始化,然后,使用一行代码,我可以启用或禁用我想要的任何东西(按钮/菜单)

如果添加快捷方式,请确保在禁用按钮时快捷方式不起作用

此外,我必须在不同的jframe中使用菜单栏做类似的事情,,但不完全相同。因此,我创建了一个接口,比如说MyMenuBarInterface,然后分别在每个JFrame类中实现代码,为它们提供我想要的确切功能。代码如下所示:

import java.awt.FlowLayout;
import java.awt.Point;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * <code>FactoryDemo</code>.
 */
public class FactoryDemo {

    private int frameIndex;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new FactoryDemo()::createUI);
    }

    // Factory method to create your editor frame
    private JFrame createEditor(String title) {
        JFrame frm = new JFrame(title);
        frm.setJMenuBar(createMenu());
        frm.add(new JScrollPane(new JTextArea(10, 40)));
        frm.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
        frm.pack();
        return frm;
    }

    // factory method to create your menu bar
    private JMenuBar createMenu() {
        JMenuBar menu = new JMenuBar();
        menu.add(new JMenu("File"));
        menu.add(new JMenu("Edit")); // so on
        return menu;
    }

    private void createUI() {
        // create main frame
        JFrame frm = new JFrame();
        JButton button = new JButton("Add Editor");
        button.addActionListener(e -> {
            Point location = frm.getLocation();
            JFrame nextFrm = createEditor("Editor: " + (++frameIndex));
            location.x += frameIndex * 20;
            location.y = frameIndex * 20;
            nextFrm.setLocation(location);
            nextFrm.setVisible(true);
        });
        frm.setLayout(new FlowLayout());
        frm.add(button);
        frm.setSize(300, 200);
        frm.setLocationRelativeTo(null);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setVisible(true);
    }
}
使用。代码如下所示:

import java.awt.FlowLayout;
import java.awt.Point;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * <code>FactoryDemo</code>.
 */
public class FactoryDemo {

    private int frameIndex;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new FactoryDemo()::createUI);
    }

    // Factory method to create your editor frame
    private JFrame createEditor(String title) {
        JFrame frm = new JFrame(title);
        frm.setJMenuBar(createMenu());
        frm.add(new JScrollPane(new JTextArea(10, 40)));
        frm.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
        frm.pack();
        return frm;
    }

    // factory method to create your menu bar
    private JMenuBar createMenu() {
        JMenuBar menu = new JMenuBar();
        menu.add(new JMenu("File"));
        menu.add(new JMenu("Edit")); // so on
        return menu;
    }

    private void createUI() {
        // create main frame
        JFrame frm = new JFrame();
        JButton button = new JButton("Add Editor");
        button.addActionListener(e -> {
            Point location = frm.getLocation();
            JFrame nextFrm = createEditor("Editor: " + (++frameIndex));
            location.x += frameIndex * 20;
            location.y = frameIndex * 20;
            nextFrm.setLocation(location);
            nextFrm.setVisible(true);
        });
        frm.setLayout(new FlowLayout());
        frm.add(button);
        frm.setSize(300, 200);
        frm.setLocationRelativeTo(null);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setVisible(true);
    }
}

无需复制和粘贴所有代码
->inheritanceAs@jhamon说,创建定义菜单的JFrame子类,然后为任何其他帧创建该子类。
无需复制和粘贴所有代码
->inheritanceAs@jhamon说,创建定义菜单的JFrame子类,然后将其子类化为任何其他帧。非常感谢,刚刚成功地将其全部启动并运行!不客气。请,如果这个答案是有用的,或者更好,请更正您的问题,接受它作为答案。“您必须使用继承。”不,您没有。制作框架的工厂方法就是所需要的,这样做可以避免使用继承(ab)。有关使用factory方法的示例,请参见。非常感谢,刚刚成功地将其全部安装并运行!不客气。请,如果这个答案是有用的,或者更好,请更正您的问题,接受它作为答案。“您必须使用继承。”不,您没有。制作框架的工厂方法就是所需要的,这样做可以避免使用继承(ab)。有关使用工厂方法的示例,请参阅。感谢您提供的示例,它为我的工作提供了很大帮助!谢谢你的例子,帮了我很多忙!