Java 如何制作任何JFrame I';顶部的swing菜单栏;你创造了什么?
因此,我正在创建一个应用程序,在这个应用程序中,不同的JFrames可以在任何给定的时间打开。我已经在我的主窗口顶部创建了一个菜单栏,即您的标准“文件、工具、编辑等…”菜单栏。我想知道如何让这个菜单栏位于所有JFrames的顶部,而不仅仅是主应用程序窗口框架,而不必在每个框架上复制和粘贴它的所有代码 正如@mwarren和@jhamon在评论中所说,你必须使用继承。创建JFrame的子类,并在其中实现菜单栏所需的所有功能。我的毕业论文也有同样的问题,我做了以下工作: 我创建了一个类,比方说ExtendableJFrame,并在那里创建了菜单栏。在那里,我还实现了启用或禁用按钮/菜单的方法。因此,当我创建一个新的JFrame时,菜单栏被初始化,然后,使用一行代码,我可以启用或禁用我想要的任何东西(按钮/菜单) 如果添加快捷方式,请确保在禁用按钮时快捷方式不起作用Java 如何制作任何JFrame I';顶部的swing菜单栏;你创造了什么?,java,swing,Java,Swing,因此,我正在创建一个应用程序,在这个应用程序中,不同的JFrames可以在任何给定的时间打开。我已经在我的主窗口顶部创建了一个菜单栏,即您的标准“文件、工具、编辑等…”菜单栏。我想知道如何让这个菜单栏位于所有JFrames的顶部,而不仅仅是主应用程序窗口框架,而不必在每个框架上复制和粘贴它的所有代码 正如@mwarren和@jhamon在评论中所说,你必须使用继承。创建JFrame的子类,并在其中实现菜单栏所需的所有功能。我的毕业论文也有同样的问题,我做了以下工作: 我创建了一个类,比方说Ext
此外,我必须在不同的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)。有关使用工厂方法的示例,请参阅。感谢您提供的示例,它为我的工作提供了很大帮助!谢谢你的例子,帮了我很多忙!